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
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