Introduce a configure option controlling the installation and build
the documentation during the build instead of the install phase. Targets
for installation of the html version have also been added.
Fixes#482.
In expansions such as
(loop for i of-type some-type in some-list ...)
we were declaring the type of i to be some-type instead of the
correct (or null some-type).
Only disallow struct redefinition if we are certain about subtype
relationships in slots. Otherwise, we can wrongly disallow struct
redefinitions which don't change slot types.
This leads to compiled code checking types such as (complex
single-float) with a simple call to complexp. While this may
technically be allowed by the ANSI standard, since
upgraded-complex-part-type always returns 'real, it is very confusing
since for example typep correctly discriminates between different
complex part types.
See #468.
The :process keyword argument is used inconsistently for symbols
denoting functions and function objects. Furthermore, it isn't
needed and unused in our own code.
Since we only support vectors with element type size of a byte, we
don't need to check for non-base-strings. Also make sure to set
the byte size of the stream always to a positive value.
Issue comes from the fact that list and symbol types are not
disjoint. Fixes#475.
My personal opinion (to put some rambling in a commit message) is that
having NIL being so many things is a blatant mistake and shouldn't be
picked up for Common Lisp (though many programs would probably break
and it wouldn't be so Common then).
This is as for CLHS section 7.1.2. Error was caused by the fact that
unknown-key was a flag, so if the initarg was NIL, we were assigning
it value NIL, what is also a boolean false. Right now we collect all
invalid initargs in a list, so in case of NIL we'll get (NIL) what is
a generalized boolean true value. Closes#474.
Also add cosmetic fixes with declarations.
sys::scale-exponent was not working correctly and outputting
numbers in the wrong range. Furthermore, using sys::scale-exponent
for scaling the number to the correct range is flawed anyway,
since it introduces rounding errors. Hence we replace
sys::scale-exponent by the much simpler sys::exponent-in-base10
function and fix the logic in format-exp-aux to scale using
sys::flonum-to-string, which is rounding error free. Moreover,
sys::flonum-to-string was buggy and not rounding numbers correctly
when the 'd' parameter was given, which has also been fixed.
Fixes#437.
We signal an error if the structure is incompatible with an already defined
one. We concern ourself about slot names, their types, offset and number of
slots. Fixes#457.
Print empty structures without slots as "#" when *print-level* is
0 (same as non-empty structures) and decrement *print-level* by 1
for printing of structure elements.
Fixes#454.