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
initial implementation of let-syntax
making nconc, assq, and memq builtins
adding apply1, using it in trycatch (avoids consing)
fixing bug in datum comment #;
allowing logand, logior, logxor to accept any number of arguments
simplifying (string) to just princ-to-string
adding io.putc, io.tostring!, string.map, print-to-string
adding dump, memstream, io.read, and io.write
fixing bug reading negative constants with #b,o,d,x
changing load to expand each expression before evaluating
fixing ambiguity in reading hex numbers and floating point
adding copy and string.count
better solution for allowing an input stream to be relocated while
fixing some bugs in lerror and read
moving delete-duplicates and new f-body so they can be macroexpanded in advance
moving implementation of startup, repl, load, and top-level
adding io.print and io.princ
file stream creation and io.read
adding integer? and number->string
adding #b, #o, #d, #x numeric literals
switching to scheme #t, #f, and () values
simplified and improved some of the prettyprinting logic
adding CPRIM type, smaller representation for primitives
fixes and improvements to cps converter
improvements and bug fixes to CPS converter
adding branch probability annotations
generic aref/aset for all arrays
fixing several bugs in string.find
renaming 'char' type to 'byte' to avoid confusion