If a function which was previously proclaimed inline by the
native compiler was redefined by the bytecodes compiler, the
native compiler would still continue to inline the old
definition (see also commit 892e21012a).
If mp:compare-and-swap was expanding from a place which was not a
list, it would throw a bogus type error instead of the correct
"Cannot get the compare-and-swap expansion" error.
This is slightly more efficient and prevents an error message like
"There exists no package with name NIL". Instead of NIL, the
actual name is printed.
This behaviour makes more sense, since the ANSI standard mandates
that disassemble should compile an interpreted function before
displaying the output (our own documentation even says so).
Also fixes disassemble for closures.
The io-syntax forced all symbols except those in the COMMON-LISP
package to be written with a package prefix. However the symbols
could be read when the current package was shadowing symbols in
the COMMON-LISP package, leading to incorrectly interned symbols.
Problem reported by Gunter Königsmann on the ecl-devel mailing
list.
In Debian, the -Werror=format-security flag is now passed by default to gcc.
This makes the ECL_LINEFEED_MODE test fail.
The fix is to replace the call to fprintf() by fputs().
The compiler refactor of commit
7ec2f4a939 introduced an error where
all lexical variables where marked to cross function boundaries,
leading them to be stored in volatile variables on the stack.
ECL needs the definition of a function to inline it. Previously,
this definition would only be saved in the file local environment
(*cmp-env-root*) but not in the global environment used by
proclaim. Hence, ECL could only inline functions in the same file.
Now, we also put the definition of inline functions in the global
environment during load time. This leads to a behaviour of declaim
for inline functions, which is consistent with other declarations
(meaning that the declarations stay only in force during
compilation, but are proclaimed again at load time of the compiled
file).
Fixes#451.
We support both compare-and-swap and fetch-and-add (via
atomic-incf/decf) on the most common places and define an
extension interface for compare-and-swap similiar to the one in
SBCL.
These changes introduce new dependencies on the libatomic_ops
macros AO_fetch_compare_and_swap and AO_fetch_and_add.