MS link.exe can pick the right crt libraries according to the compiler flags,
such as /MD, /MDd etc.
So we remove them to keep the command line tidy and clean.
It can happen for example in
(subtypep t '(CONS (AND STANDARD-CHAR (MEMBER #\@)) REAL))
that in subtypep and type= the second call to safe-canonical-type
fails and returns the error from +canonical-type-failure+ instead of a
valid tag. This leads to type-errors in logandc2 or = which expect an
integer.
Fixes#519.
Previously, we assumed that all stack frames were lying at the top of
the lisp stack. This is not always true due to e.g.
multiple-value-prog1 pushing onto the lisp stack.
C argument limit is set to 63, this case is not harmful but *may*
confuse a person who reads the code. If we raise the limit adding
remaining cases is trivial.
When we process required arguments their amount may exceed maximum
number of arguments which are allowed to be passed on C stack. In this
case the remainder is shifted to optionals *but* we have called
next-lcl for all arguments what lead to a situation where all
arguments were passed on the list. Fixes#514.
This is a canary which errors when code needs to be adjusted. When
appropriate definitions are added the error condition should be
changed accordingly.
We allocate arguments on a heap when number of them exceeds
ECL_C_ARGUMENTS_LIMIT. Was:
if (narg < ECL_C_ARGUMENTS_LIMIT) ... else ..
should be
if (narg <= ECL_C_ARGUMENTS_LIMIT) ... else ..
It is a partial fix for #513 (solves a segfault).
The pipe from which we read the output of the C compiler could fill up
when a large number of warnings were printed leading to a deadlock
because we waited for the C compiler to finish before reading the
output.
This reverts commit 2a9084b105.
It turned out that #347 was caused by the Maxima computer algebra
system enabling floating point exceptions via si:trap-fpe (see
https://trac.sagemath.org/ticket/22191). Hence we can revert to the
less intrusive behaviour of not changing the floating point
environment if ECL_OPT_TRAP_SIGFPE is false.
External format decoders now operatore on characters buffers instead
of reading input byte by byte from the streams. This allows us to
provide efficient read_vector implementations.
Previously, we were simply returning the number of hours West of
Greenwich, which had the effect that si::get-local-time-zone could
return different values for a user in the same location depending on
the time of the year. However, the functions calling
si::get-local-time-zone later do the necessary fixup for Daylight
Saving Time on their own, which lead to wrong values returned in
decode-universal-time and encode-universal-time.
Fixes#495.
Previously we mishandled weak values when there was no such key. Also
gethash returned a weak pointer instead of the value (same goes for
maphash). These things are fixed now.