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.
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.
Before this change, we called user defined write-string methods
directly in write-string/write-line but all other operations were
done inefficiently through generic_write/read_vector.
defclass calls indirectly ensure-class-using-class from builtin module which
calls make-instance on metaclass (which could be a forward-referenced
class). That triggers validate-superclass on
(validate-superclass #<forward-ref-class> #<standard-class standard-object>)
which failed. This commit mitigates this situation. Problem was masked
because of *clos-boot* never been set to T (recently fixed).
In both bytecmp and c compiler we use si:function-boundary and
si:unwind-protect-boundary where appropriate. Previously bytecmp used an ad-hoc
special variable for function-boundary and didn't mark unwind-protect at all.
Remove recently-introduced ECI package (maybe we will reintroduce it later when
we'll have a common frontend for compilers).
Print method qualifiers.
For specializers, print class names, not class objects, and print eql specializers.
(defmethod m :around (a b (c (eql "10"))))
was
#<standard-method M (#<BUILT-IN-CLASS T> #<BUILT-IN-CLASS T>
#<CLOS:EQL-SPECIALIZER>)>
becomes
#<standard-method M :AROUND (T T (EQL "10"))>
Functions to print (nan,float)-to-string and and predicates are still
available, but ext:*-float-*-infinity aren't available if ECL is built
with option `--with-ieee-fp=no`.
Some libraries somewhat abuse the CLOSE method specializing it on their
own stuff which isn't a stream. Calling the NEXT-METHOD triggers the
condition. For pragmatic reasons we'll honor this and will specialize
only on the streams.
"style" temporary branch
The ECL code no longer uses tabulator characters, they were replaced
by spaces.
A custom script was used to insert/replace Emacs and ViM per-file editor
settings according to their type and the new ECL coding style.
See merge request !8
CLOS printer uses normal strings while float_to_string.d calls
push_base_string to cache printable form of infinity (and nan). Coerce
clos strings to base-string. Fixes#153. Related to #114.
Signed-off-by: Daniel Kochmański <daniel@turtleware.eu>
Some libraries want methods to specialize on double-float and ECL
fails on such attempts. Fixes#96.
Signed-off-by: Daniel Kochmański <daniel@turtleware.eu>
Previous commit overgeneralized. Handle just one particular corner
situation, when print-object leaks from standard-object to builtin
class T.
Signed-off-by: Daniel Kochmański <dkochmanski@turtle-solutions.eu>
Corner case. When user despite spec defines method `print-object'
specialized on standard-object and calls call-next-method,
`print-object' specialized on T called `write', which triggers
original `print-object' specialized on `standard-object'.
Signed-off-by: Daniel Kochmański <dkochmanski@turtle-solutions.eu>
Add `serror' and `stack-error-handler', which behave like normal
`cerror' -> `universal-error-handler' call order, except fact, that
after handling stack-overflow condition they reset appropriate stack
limit. Fixes#56.
Signed-off-by: Daniel Kochmański <dkochmanski@turtle-solutions.eu>