fixing open-string-output-port (R6RS)
making io.tostring! more consistent
adding newlines to boot file; wastes space but will allow more
efficient diffing
anything can be shadowed by closer nested variables
fixing bugs in let-syntax and expanding optional arg default values
improving expansion algorithm on internal define
some small optimizations to the compiler
maintaining interpreter for bootstrapping
making io.write output chars as utf8;
suddenly switching to UTF32 was not intuitive
adding stream argument to newline (R6RS)
adding several more scheme compatibility procedures
do not need to be written in terms of the base language any more
moving handling of internal define and multiple-body-lambda to the
compiler where it belongs. macroexpand now only handles syntax.
between top-level functions
making colon at the end also valid for keywords
adding keyword? predicate
fixing bug in map
adding functions to emulate values and call-with-values
adding receive macro
improving equal? on closures
adding lambda-lifting optimization to the compiler
changing default bootstrap process to use VM instead of interpreter
fixing bug where only a fixnum could index a vector
merging equal.c into the main compilation unit
adding the ability to grow the value stack as needed
the net effect is that calls use much less space, and stack frames
can use all available heap space. the only downside is that C builtins
must be aware that the stack can change out from under them if they call
lisp code. currently the only example of this is table.foldl.
also fixing bug where exceptions failed to unwind the gc handle stack.
making branch destinations relative so we can access the code
using *ip instead of code[ip]
doing the same to bp (argument access)
small improvement to map, builtin->instruction
better profiling
using copy-list to implement append2
fixing bug in op_vargc when nrequired==MAX_ARGS
making fetching of multibyte numbers from bytecode portable
some cleanup in compiler
various bug fixes
language changes:
• constant symbols no longer shadow everything
• eval* removed
• vararg lists always allocated on entry, dotted argument
lists not preserved
new applyn() entry point
so recursion depth is limited only by the process stack limit.
reorganizing evaluator so the same code is used for evaluating
and pushing arguments for both builtin functions and lambdas.
for now this is slower, but it was done in preparation for
Things To Come.
adding list-head
implementing the calling convention for long argument lists in
bytecode compiler. arguments are broken down into a nest of
list and nconc calls.
also implementing vararg builtins.
fixing bug in ios, not initializing readonly flag
updating string and sizeof to use new strstream functions
removing some redundant numeric type init functions