used to be a relative jump from one code object to another is now
turned into a pc-relative jump, where the jump targets are stored
somewhere at the bottom of the code that performs the jump:
old code sequence:
call-relative (Ltarget - L0)
L0: ...
new code sequence:
call-pc-relative (L1 - L0)
L0: ...
...
L1: <8-byte Ltarget>
scope would get messed up when the macro call appears inside
let/letrec-syntax. Basically, in the following example,
(let-syntax ([id-macro (syntax-rules () [(_ x) x])])
(let ()
(define (foo) (display "not ok\n"))
(let-syntax ([foo (syntax-rules () [(_) (display "ok\n")])])
(id-macro (foo)))))
the call to (id-macro) would make (foo) refer to the foo in the
internal-definition context (the not ok one) instead of the
let-syntax one.
On the plus side, macro expansion is now half a second faster!
- it now takes an optional environment (it was required)
- it no longer returns a second value (list of libraries)
- it's output is "pretty".
the old expand is now called core-expand.
compiler. (useful for a future project)
- refershed all boot files (because of added primitives)
- regenerated some autoconf files (to use newer version)
- Ikarus fasl files and source files are not compared using
(< (file-mtime ikfasl) (file-mtime filename))
instead of
(<= (file-ctime ikfasl) (file-ctime filename))
unhandled causing compile time errors.
- fixed some bootstrapping issues with pointer? (which was moved out
of the (ikarus) library)
- freshened up the bootfiles for both 32- and 64-bit version of
ikarus.
indices (r6rs requirement).
- file-options are now represented as enum-sets (r6rs requirement)
- odd?, even?, lcm, remainder, etc., now accept inexact integers.