The deftype expansion functions now take two parameters, the type
argument and an environment. More precisely, for an atomic type 'x the
type argument for the expansion function is given by '(x) while for a
non-atomic type '(x y z) it is given by '(x y z). This also fixes the
value of &whole parameters in deftype lambda lists. The new behaviour
is consistent with SBCL and CCL.
Fixes#750
Constant arguments for the dimensions were not handled correctly. The
valid-array-index function was lost in a refactor some time ago.
Moreover, we need to check all of the conditions on the
dimensions (limits on rank, dimension and total size) using an AND
statement instead of checking only the first condition using OR.
Simply call mkdir and ignore EEXIST errors to prevent race conditions
when two processes try to create a directory at the same time. Also
avoids a redundant syscall since by not calling si::file-kind, so this
should be slightly faster.
After this commit DESCRIBE prints two additional pieces of information below the
docstring. To avoid duplication, corresponding arg piece in doc/help.lsp has
been removed. Fixes#711.
We've made an implicit cast from bclosure to bytecodes, so instead of a name
we've printed bytecodes itself.
Except from thsi fix we also write the closure address to make it possible to
distinguish two different closures over the same function.
If we call stat in order to find out if a filename points to a
directory or an ordinary file, the emscripten stdlib may need to do a
network request to find out the size of the file even though we don't
care about that. This happens for files created with
FS.createLazyFile() by emscripten. By using readlink/opendir when
possible we avoid that.
Having *PRINT-LENGTH* at 3 is not satisfactory, especially in the early handler
where there are no other means to introspect errors. Change it to 8.
Before:
;;; Message:
|TYPE-ERROR|
;;; Arguments:
(:|EXPECTED-TYPE| |FUNCTION| :|DATUM| ...)
After:
;;; Message:
|TYPE-ERROR|
;;; Arguments:
(:|EXPECTED-TYPE| |FUNCTION| :|DATUM| (|QUOTE| |WHILE|))
The config script as it is now fails on gcc version 14.2.1 20240912 (Red Hat 14.2.1-3) (GCC)
This is because one test did not include string.h before memcpy, and two other tests relied
on implicit function definitions -- in one test definitions are moved before the first use
and the second test is removed wholesale as it relies on undefined behavior and tests some
obscure (and ancient) gcc flavor segfault.
1. We don't normalize garbage collected entries.
Doing that created a false free bucket, so GETHASH and SETHASH stopped searching
for entry too early. Fixes#761.
2. MAPHASH does not map over garbate collected entries.
Previously MAPHASH did not call copy_entry, so it was always accessing key/val
even if they were recently garbage collected, effectively mapping over NIL in
the place of the collected value
3. HASH-TABLE-CONTENT had a similar issue to MAPHASH.
4. REMHASH did fill the hole, but didn't replace the moved entry with a free
bucket, moreover we've used the value to comptue the hash when computing the
distance function.
Moreover we introduce an optimization, where SETHASH first tries to fill a
garbage collected entry in the bucket before it tries to extend the table.
This is to ensure that the line is not buffered and that it is visible to the
user. It is a synonym from *QUERY-IO* and *DEBUG-IO* which both are interactive.
Consider the following input from string: #j :r1
First the reader signals a condition that there is no dispatch character macro
for #j, and then we select the first restart. That's clearly undesireable.
The specification says that it makes the symbol unbound; that paired with the
definition of BOUNDP indicates, that what is meant is the binding in the dynamic
environment (and for consistency we want to make it behave as a pair to BOUNDP).
Note that this behavioral change matches implementations like CCL and SBCL, so
this change improves the compatibility.
The issue with interpretation comes from the subheader "Side Effects" in the
standard that states: "The value cell of symbol is modified", it should state
that "The value cell of symbol might be modified".
- add a new character name alias Formfeed (for Page) -- sometimes used in the wild
- export asdf:registered-system (exported upstream, some systems use it)
We call ecl_musleep that avoids the hassle of converting values back and forth
between lisp and c world.
The change is prompted by a potential bug in cosmopolitan libc, where the value
stored in a static variable can't be passed to a function in a different
compilation unit. Unmodified code lead to a segmentation fault with cosmocc.