[Ecls-list] Bunch of fixes

Juan Jose Garcia Ripoll worm at arrakis.es
Mon Mar 17 02:38:09 UTC 2003


it seems the 0.9 release will have the largest amount of fixes ever. I have 
been working last night with Paul F. Dietz' test suite, and discovered a 
couple of memory leaks, one race condition, and had time to implement some 
missing ANSI features (like *print-readably* and others). Since the amount of 
changes is too large, I simply put the latest version of the CHANGELOG 
(includes previously mentioned fixes).

Have fun!


* Errors fixed:

  - The PCL relied on the compiler to optimize certain method
    combinations. However, the native compiler is not always present,
    and therefore it is safer to use interpreted functions instead.

  - The compiler had wrong type information about CHAR-NAME &

  - DOTIMES fails with negative bignums and floats.

  - LOAD-TIME-VALUE should be a special operator.

  - COPY-SYMBOL fails with uninterned symbols.

  - GENSYM and GENTEMP failed if the suffix becomes a bignum.

  - COMPILE has to generate libraries with different names for each
    function. Otherwise, when compiling a second function, the
    dlopen() loader will not load the library because it thinks it has
    it already in memory.

  - When a compound form consists only of a string, this string should
    not be interpreted as a documentation string, but as a form.

  - SYMBOL-MACROLET definitions were ignored by GET-SETF-EXPANSION.

  - DESTRUCTURING-BIND fails to interpret &WHOLE arguments.

  - The compiler might get into an infinite loop when dealing with

  - When the functions/macros in a DLL are no longer used, and the
    garbage collector notices this, the library is properly deallocated.

  - BIT-* fails when the input is made of arrays with rank <> 1.

  - A few leaks from ECL's original garbage collector have been
    fixed. Thus, the option "--disable-boehm" at configuration time is
    again active.

  - When returning from a function, the values are stored in the
    VALUES() array. This process has to be "atomic", in the sense that
    no lisp function (cl_*, si_*, bytecodes) may be called, because
    they also try to overwrite these values. This requirement was not
    accomplished by the previous inliner.

  - CCASE forms would output no value.

  - Tags in TAGBODY should be compared with EQL so that a bignums may
    tags (Two bignums which are EQL may be not EQ!).

  - Various errors in STRING-TRIM* and *CAPITALIZE.

  - Wrong type information about NAME-CHAR, CHAR-NAME and DIGIT-CHAR
    lead to compilation errors.

* Errors of the interpreter:

  - CASE should use EQL to compare objects, not EQ.

  - Empty PROGN and implicit PROGNs (LAMBDA, etc) should output NIL
    instead of (VALUES). Similarly, a CASE with no matching clause
    should also output NIL.

  - A NIL in the keys position of a CASE clause can never match
    anything: (CASE () (NIL 'A) (T 'B)) => B

  - SETQ can only output one value

  - User could not have a keyword variable with name ALLOW-OTHER-KEYS,

  - Excesive arguments to NOT or NULL were not detected.

* Visible changes:

  - No "Bye" message in QUIT.

  - Function definitions from the interpreter are now remembered by
    default. This means you can now type
    and later on
    If you want to save memory, use this to forget these definitions

  - New function SI:MKSTEMP creates an totally new empty file by
    appending a 6-characters prefix to a template supplied by the

  - COMPILE now creates all temporary files in the directory pointed
    to by the environment variable TMPDIR (Or /tmp if none). It also
    uses MKSTEMP to produce unique file names, and solve the problem
    that dlopen() cannot reload two libraries with the same name.

  - The interpreter now detects syntax errors in function calls: such
    as in (setq a ("foo")).

* ANSI compatibility:


  - In DEFGENERIC, only SPACE and SPEED declarations were allowed.

  - The bytecodes compiler did not contemplate the possibility of
    a lambda list with &key and no keyword variables.

  - In MAKE-PATHNAME, values which are supplied (even if NIL), are not
    overwritten by the :DEFAULTS. For instance, (MAKE-PATHNAME :TYPE

  - INVOKE-DEBUGGER now uses the value of *DEBUGGER-HOOK*.

  - Implemented LEAST-*-NORMALIZED-*-FLOAT.

  - WITH-PACKAGE-ITERATOR implemented. LOOP clauses which iterate over
    the symbols of a package now work. Furthermore, LOOP... FOR
    PRESENT-SYMBOL... now iterates both over internal and external
    symbols, just to be conformant with other implementations.

  - COMPILE should output three values: the function itself, plus two
    flags indicating the existence of errors.

  - CONSTANTP takes two arguments, the second being an environment.

  - Implemented FUNCTION-LAMBDA-EXPRESSION (Replaces non-standard

  - Right evaluation order enforced in PUSH, PUSHNEW, PSETQ.

  - In FUNCALL, the interpreter evaluated the function form *after*
    the arguments.

  - (SETF #:GXXX), where #:GXXX is any uninterned symbol, should be a
    valid function name.

  - Symbol GC moved from the COMMON-LISP package, to SI and CL-USER.

  - DELETE-PACKAGE turns a package into an illegal object. Thus, if a
    reference to the package is around, this may cause problems.

  - *CASE and *TYPECASE now use condition & restarts for signaling errors.

  - Restarts may be associated to conditions. WITH-CONDITION-RESTART

  - *COMPILE-FILE-{PATHNAME,TRUENAME}* defined and used.

  - All package function now signal errors of type
    PACKAGE-ERROR. Also, when trying to operate on a locked package
    (See SI::PACKAGE-LOCK), a correctable error is signaled.

  - Errors in LOOP macro are signaled as PROGRAM-ERROR.

  - When a LOOP has a NAMED sentence, no enclosing NIL block is
    produced. Furthermore, the blocks always surround the whole of the
    code, so that (LOOP FOR A IN (RETURN :GOOD)) works.

  - Character names ("Return", "Tab", etc) now have the right case.

  - CHAR/= and CHAR-NOT-EQUAL require at least one character.

  - Implemented *PRINT-READABLY*, and the condition PRINT-NOT-READABLY.

  - Implemented type EXTENDED-CHAR.

More information about the ecl-devel mailing list