fixing bug in with-input-from-file
adding support for eof-object
adding gensym?, fixing keyword?
adding offset and count arguments to io.write
adding functions io.copy, io.readall, time.fromstring
adding read and print support for named characters, e.g. #\space
adding with-bindings, with-output-to-file, with-output-to
better error checking for formal argument lists
finishing initial implementation of keyword arguments
fixing a bug in optional args + rest args with no required arguments
fixing use of an undefined behavior that was breaking compiles occasionally
changing optional args to allow default values to be computed from
adding support for optional arguments
adding some combined instructions and teaching the compiler to emit them:
adding io.pos, io.readlines, read-all
making long argument lists more efficient
fixing a case where tail position was not properly observed
simplifying code by eliminating the hybrid stack/heap calling convention
rewriting some primitives to take advantage of the full language; they
changing boot file format; the old one did not preserve sharing
keeping track of function names, printing nice stack traces
adding functions max and min
using lisp value stack for call frames instead of the C stack
some renaming (intern is now symbol) and moving stuff around
adding the ability for the VM to use computed goto where available
adding maxstack calculation and stack overflow protection
optimizations to map and case
tiny performance tweaks: removing some variables, making some static
adding opcodes loada0, loada1, loadc00, loadc01
implementing support for lambdas with up to 2^32-1 required arguments
some renaming and reorganizing
simplifying the whole list* situation, taking better advantage of
making copy-list a builtin, since the functionality was there anyway.
fixing bug in cond when condition wasn't followed by any forms
allowing multiple expressions in lambda
fixing bug printing functions involved in cycles
made cons hashing tail recursive on cdrs
fixing hash function to do a better job on long lists.
doing a better job hashing circular structure. the hash function is now
adding gc handles, making evaluator stack static
adding R6RS div, mod, div0, mod0
adding divide by 0 check in div
adding integer division function div
fixing hash of circular structure to avoid tree recursion (very important!!)
fixing vararg apply to work properly
putting the saved environment in the order that matches the current
making 3rd argument to string.sub optional
adding *error-stream* variable
using global variables uniformly for print settings instead of passing
improving closure representation
making procedure? a builtin
updating interpreter to work better for bootstrapping
fixing printing of invalid UTF-8
fixing nconc on long argument lists
fixing !print_pretty on vectors
fixing function? and disassemble
implementing #vu8 read and print syntax for uint8 vectors
eliminating interpreter. the bytecode VM is now fully bootstrapped.
adding new "translucent" function type for byte-compiled lambdas
allowing (copy x) and other byte stream functions only on plain-old-data types
adding top-level-value and set-top-level-value!, using them instead of
cleaning up implementation of apply() entry point
a bug fix and a first pass at let-optimization
converting for to a special form
fixing glaring bug in last revision
bytecode vm is now working, off by default
implementing op_closure, fix to loadc/setc
moving (length) out of core
some cleanup, removing some unnecessary global bindings
replacing a recursive call with a goto; saves lots of stack space.
making some utf8 routines more robust against invalid data
adding the ability to heap-allocate extentions to the value stack,
fixing bug in hash table. growth schedule made it possible for
adding nestlist, to-proper, string.rep, pad-l, pad-r, trace, untrace,
fixing bug in macroexpand on lambdas
adding support for arbitrarily-long argument lists
avoiding sprintf for error messages where possible
char read/print improvement
removing some unnecessary stuff