[initial import of all-comments compiler
Kragen Javier Sitaker <kragen@pobox.com>**20080203193504] 
[added initial hello-world
Kragen Javier Sitaker <kragen@pobox.com>**20080203195806] 
[fixed whitespace
Kragen Javier Sitaker <kragen@pobox.com>**20080203200034] 
[refactored to writeln
Kragen Javier Sitaker <kragen@pobox.com>**20080203200325] 
[refactored movs
Kragen Javier Sitaker <kragen@pobox.com>**20080203200847] 
[refactored out write(2)
Kragen Javier Sitaker <kragen@pobox.com>**20080203202837] 
[refactored more to the stack machine
Kragen Javier Sitaker <kragen@pobox.com>**20080203203234] 
[factored out "insn" and "asm" instead of writeln
Kragen Javier Sitaker <kragen@pobox.com>**20080203210522] 
[added some basic string handling
Kragen Javier Sitaker <kragen@pobox.com>**20080203222520] 
[made it possible to have more than one string so that error messages get counted
Kragen Javier Sitaker <kragen@pobox.com>**20080203224331] 
[made Makefile produce a diff on the generated asm
Kragen Javier Sitaker <kragen@pobox.com>**20080203231315] 
[added dependency on varargs in exchange for 7% shorter code
Kragen Javier Sitaker <kragen@pobox.com>**20080203231334] 
[updated comments to reflect current state
Kragen Javier Sitaker <kragen@pobox.com>**20080203231733] 
[reorganized program a bit and improved comments
Kragen Javier Sitaker <kragen@pobox.com>**20080203233704] 
[changed makefile diffs to not panic when the previous compile broke
Kragen Javier Sitaker <kragen@pobox.com>**20080204005445] 
[fixed the long-running bug with backslashing in strings
Kragen Javier Sitaker <kragen@pobox.com>**20080204005513] 
[moved ascii to the "basic assembly language emission" section
Kragen Javier Sitaker <kragen@pobox.com>**20080204025729] 
[aligned pointers to constant strings
Kragen Javier Sitaker <kragen@pobox.com>**20080204025809] 
[added missing newline on string typecheck error msg
Kragen Javier Sitaker <kragen@pobox.com>**20080204025839] 
[added initial expression compiler
Kragen Javier Sitaker <kragen@pobox.com>**20080204025911] 
[added some comments about suboptimal things
Kragen Javier Sitaker <kragen@pobox.com>**20080204025930] 
[added the ability to handle multiple toplevel expressions
Kragen Javier Sitaker <kragen@pobox.com>**20080204030103] 
[added the ability to compile the "newline" routine
Kragen Javier Sitaker <kragen@pobox.com>**20080204031431] 
[added the ability to compile begin-expressions
Kragen Javier Sitaker <kragen@pobox.com>**20080204032224] 
[changed magic number for strings to 0xbabb1e
Kragen Javier Sitaker <kragen@pobox.com>**20080204032538] 
[updated comments
Kragen Javier Sitaker <kragen@pobox.com>**20080204032555] 
[factored out ensure_string into an asm routine
Kragen Javier Sitaker <kragen@pobox.com>**20080204033207] 
[improved assembly in ensure_string routine a bit
Kragen Javier Sitaker <kragen@pobox.com>**20080204034347] 
[switched to using MzScheme
Kragen Javier Sitaker <kragen@pobox.com>**20080204040702] 
[renamed push_const to push-const
Kragen Javier Sitaker <kragen@pobox.com>**20080204040725] 
[added booleans
Kragen Javier Sitaker <kragen@pobox.com>**20080204040750] 
[added "if"
Kragen Javier Sitaker <kragen@pobox.com>**20080204042550] 
[threaded an environment through all the compile functions and started using it for something stupid
Kragen Javier Sitaker <kragen@pobox.com>**20080204045600] 
[added some more silly comments
Kragen Javier Sitaker <kragen@pobox.com>**20080204045729] 
[added a layer of indirection to the assembly which I hope improves readability...
Kragen Javier Sitaker <kragen@pobox.com>**20080204053859] 
[some silly comment updates
Kragen Javier Sitaker <kragen@pobox.com>**20080204072150] 
[added procedure call and return! now display and newline use them!
Kragen Javier Sitaker <kragen@pobox.com>**20080204072800] 
[renamed pop-asm and push to asm-pop and asm-push for consistency
Kragen Javier Sitaker <kragen@pobox.com>**20080204072809] 
[tiny comment and formatting cleanup
Kragen Javier Sitaker <kragen@pobox.com>**20080204072846] 
[added a little recursive fibonacci program
Kragen Javier Sitaker <kragen@pobox.com>**20080204091318] 
[some comment updates
Kragen Javier Sitaker <kragen@pobox.com>**20080205024212] 
[changed compile-pair to use a dispatch table
Kragen Javier Sitaker <kragen@pobox.com>**20080205024239] 
[changed calling convention to support closures
Kragen Javier Sitaker <kragen@pobox.com>**20080205053828] 
[changed asm output to support -nostdlib
Kragen Javier Sitaker <kragen@pobox.com>**20080205061122] 
[tiny Makefile clarification
Kragen Javier Sitaker <kragen@pobox.com>**20080205061207] 
[factored out ensure_procedure in the asm so it would be smaller
Kragen Javier Sitaker <kragen@pobox.com>**20080205061228] 
[switched back to mzscheme because it has better error reporting than tinyscheme
Kragen Javier Sitaker <kragen@pobox.com>**20080205062541] 
[removed the need to list runtime support routines explicitly by name in compile-program
Kragen Javier Sitaker <kragen@pobox.com>**20080205062712] 
[added newline after fibonacci output
Kragen Javier Sitaker <kragen@pobox.com>**20080205062802] 
[added type-checking on integer operations
Kragen Javier Sitaker <kragen@pobox.com>**20080205064216] 
[added commented-out Makefile support for SCM, Bigloo, and Elk Schemes
Kragen Javier Sitaker <kragen@pobox.com>**20080205073152] 
[fixed up identifiers to be acceptable to RScheme (although RScheme is still not usable)
Kragen Javier Sitaker <kragen@pobox.com>**20080205073227] 
[changed make clean to delete more stuff
Kragen Javier Sitaker <kragen@pobox.com>**20080205150616] 
[some comment updates
Kragen Javier Sitaker <kragen@pobox.com>**20080205150839] 
[factored out caar and cdar
Kragen Javier Sitaker <kragen@pobox.com>**20080205150955] 
[changed function application to fetch the function separately
Kragen Javier Sitaker <kragen@pobox.com>**20080205151231
 
 Before this change, accessing a variable like "display" and "newline"
 would insert code to call the corresponding function with whatever was
 on top of the stack, and compiling a function application simply
 consisted of compiling its arguments followed by the code to fetch the
 variable.
 
 This had a couple of problems:
 - you couldn't access "display" and the like as variables;
 - "display" and the like couldn't tell how many arguments they were
   being given, so they fetched some hard-coded number of arguments
   instead of looking at the source;
 - if you did somehow manage to get a pointer to a procedure into a
   variable, then you couldn't actually call it.
 
 So now they do the right thing: compile-ration-2 and
 compile-application first compile the code for the arguments, then the
 code for the function, then call compile-apply to compile the code to
 invoke the function on the correct number of arguments.
 
 + and - are still open-coded, so they don't need compile-apply to be
 called after them; so now they are part of a special syntax list,
 along with "begin" and "if".  As an extra special bonus, they now
 complain at compile-time if they get the wrong number of arguments,
 instead of compiling to code that crashes.
 
] 
[a tiny refactoring to remove a couple of unnecessary functions
Kragen Javier Sitaker <kragen@pobox.com>**20080205201715] 
[put a couple of multi-expression lambdas into explicit-begin form
Kragen Javier Sitaker <kragen@pobox.com>**20080205202907] 
[factored out compile-word to emit ".int" directives
Kragen Javier Sitaker <kragen@pobox.com>**20080205203008] 
[added a first global variable
Kragen Javier Sitaker <kragen@pobox.com>**20080205203051] 
[added a primitive form of top-level "define"
Kragen Javier Sitaker <kragen@pobox.com>**20080205205511] 
[made true-value, false-value, and nil-value be strings instead of integers
Kragen Javier Sitaker <kragen@pobox.com>**20080205210159] 
[made emit verify that it's emitting strings and not symbols or numbers, and fixed the bugs that came to light
Kragen Javier Sitaker <kragen@pobox.com>**20080205210233] 
[improved comments in generated assembly
Kragen Javier Sitaker <kragen@pobox.com>**20080205223247] 
[added a somewhat broken implementation of lambda --- no arg binding yet
Kragen Javier Sitaker <kragen@pobox.com>**20080205223310] 
[another tiny refactoring to "cadr"
Kragen Javier Sitaker <kragen@pobox.com>**20080205223522] 
[fixed lambda to actually bind a variable!
Kragen Javier Sitaker <kragen@pobox.com>**20080205224737] 
[some comment updates, including one in the generated asm
Kragen Javier Sitaker <kragen@pobox.com>**20080205225732] 
[more comment updates
Kragen Javier Sitaker <kragen@pobox.com>**20080206001507] 
[factored out caddr
Kragen Javier Sitaker <kragen@pobox.com>**20080206001517] 
[renamed "lst" to "list" (no reason to be gratuitously incompatible)
Kragen Javier Sitaker <kragen@pobox.com>**20080206001757] 
[renamed "list-length" to standard "length"
Kragen Javier Sitaker <kragen@pobox.com>**20080206001945] 
[renamed "lookup" to "assq"
Kragen Javier Sitaker <kragen@pobox.com>**20080206002111] 
[used assq instead of manually cdring down a list in compile-ration(-2)
Kragen Javier Sitaker <kragen@pobox.com>**20080206002250] 
[renamed string-concatenate to string-append
Kragen Javier Sitaker <kragen@pobox.com>**20080206002611] 
[tiny comment addition
Kragen Javier Sitaker <kragen@pobox.com>**20080206002634] 
[simplified string representation for assembler
Kragen Javier Sitaker <kragen@pobox.com>**20080206002818] 
[factored out "nos" next-on-stack
Kragen Javier Sitaker <kragen@pobox.com>**20080206003545] 
[added some XXX rename comments
Kragen Javier Sitaker <kragen@pobox.com>**20080206050413] 
[made global variables really work
Kragen Javier Sitaker <kragen@pobox.com>**20080206050531
 
 So, before this, "global" variables had to be defined in basic-env.
 Now, if something isn't found in the lexical environment, it defaults
 to being a global variable reference, just like in real Scheme.  A
 global variable that never gets defined is reported as a compile-time
 error.
 
 The compiler allocates ugly unreadable labels to all of your beautiful
 readable function names.  This is for two reasons: 1. I'm hoping to
 avoid symbol->string; 2. your beautiful readable Scheme function names
 probably aren't all valid assembly labels.
 
 So now you can define a recursive function with a single call to
 "compile-toplevel-define".
 
] 
[added compile-toplevel for compiling top-level expressions
Kragen Javier Sitaker <kragen@pobox.com>**20080206051215] 
[moved input program in to simple.scm.
Kragen Javier Sitaker <kragen@pobox.com>**20080206052022] 
[another tiny comment change
Kragen Javier Sitaker <kragen@pobox.com>**20080206052809] 
[added "runscheme" script to compile and run a Scheme program
Kragen Javier Sitaker <kragen@pobox.com>**20080206052818] 
[made runscheme clean up output files on error
Kragen Javier Sitaker <kragen@pobox.com>**20080206053356] 
[added eof-object
Kragen Javier Sitaker <kragen@pobox.com>**20080206053838] 
[some comments about what to implement next
Kragen Javier Sitaker <kragen@pobox.com>**20080206055217] 
[took the primitive procedures out of default global-env and put them in global vars
Kragen Javier Sitaker <kragen@pobox.com>**20080206202841] 
[some comment updates
Kragen Javier Sitaker <kragen@pobox.com>**20080206203001] 
[renamed string-of-char to char->string
Kragen Javier Sitaker <kragen@pobox.com>**20080207003300] 
[renamed number-to-string to number->string
Kragen Javier Sitaker <kragen@pobox.com>**20080207003433] 
[renamed char-eqv? to char=?
Kragen Javier Sitaker <kragen@pobox.com>**20080207021434] 
[renamed string-sub to substring
Kragen Javier Sitaker <kragen@pobox.com>**20080207021829] 
[tiny comment update
Kragen Javier Sitaker <kragen@pobox.com>**20080207022035] 
[corrected order of arguments so that earlier arguments are closer to top of stack
Kragen Javier Sitaker <kragen@pobox.com>**20080207023552] 
[tiny error message improvement: now it starts with "error:"
Kragen Javier Sitaker <kragen@pobox.com>**20080207023734] 
[added primitive "remainder"
Kragen Javier Sitaker <kragen@pobox.com>**20080207030404] 
[added "quotient" primitive
Kragen Javier Sitaker <kragen@pobox.com>**20080207032155] 
[reorganized global variable handling slightly
Kragen Javier Sitaker <kragen@pobox.com>**20080207032207] 
[moved integer division stuff to integers section of file
Kragen Javier Sitaker <kragen@pobox.com>**20080207032726] 
[removed unused apply-built-in-by-label
Kragen Javier Sitaker <kragen@pobox.com>**20080207032859] 
[ghettoized the nonstring stuff from the strings section
Kragen Javier Sitaker <kragen@pobox.com>**20080207033041] 
[refactored definitions of global procedures a bit
Kragen Javier Sitaker <kragen@pobox.com>**20080207033520] 
[simplified define-global-procedure a bit
Kragen Javier Sitaker <kragen@pobox.com>**20080207033651] 
[refactored integer-add slightly
Kragen Javier Sitaker <kragen@pobox.com>**20080207034428] 
[added make-string and memory allocation
Kragen Javier Sitaker <kragen@pobox.com>**20080207041831] 
[added a few more instructions and renamed cmpl to cmp
Kragen Javier Sitaker <kragen@pobox.com>**20080207060209] 
[fixed a stupid memory allocation bug: the second string allocated might not be aligned!
Kragen Javier Sitaker <kragen@pobox.com>**20080207060312] 
[added enough string handling stuff that it can now compile its own decimal print routine
Kragen Javier Sitaker <kragen@pobox.com>**20080207060353] 
[fixed error message to have a newline on the end
Kragen Javier Sitaker <kragen@pobox.com>**20080207060539] 
[factored out definitions of error routines
Kragen Javier Sitaker <kragen@pobox.com>**20080207061334] 
[added a regression test suite!  not really "unit tests"... but close!
Kragen Javier Sitaker <kragen@pobox.com>**20080207063627] 
[removed stupid dependencies for phony targets in Makefile
Kragen Javier Sitaker <kragen@pobox.com>**20080207063814] 
[updated comments in compiler a bit
Kragen Javier Sitaker <kragen@pobox.com>**20080207063842] 
[updated support for various reference Scheme implementations
Kragen Javier Sitaker <kragen@pobox.com>**20080207070130] 
[added 'make summary' target to show the structure of the compiler
Kragen Javier Sitaker <kragen@pobox.com>**20080207070208] 
[updated some comments
Kragen Javier Sitaker <kragen@pobox.com>**20080207070227] 
[renamed test.simple.scm to test.crufty.scm
Kragen Javier Sitaker <kragen@pobox.com>**20080207071228] 
[oops, I guess the dependency on a.out wasn't bogus after all.
Kragen Javier Sitaker <kragen@pobox.com>**20080207071308] 
[simplified integer subtract
Kragen Javier Sitaker <kragen@pobox.com>**20080207071342] 
[simplified asm-represent-string following some ideas from ichbins
Kragen Javier Sitaker <kragen@pobox.com>**20080208021453] 
[changed compile-ration to compile-combination at Darius Bacon's suggestion
Kragen Javier Sitaker <kragen@pobox.com>**20080208021525] 
[switched from number->string to number->list, inspired by Darisu Bacon's ichbins
Kragen Javier Sitaker <kragen@pobox.com>**20080208023019] 
[some comment updates
Kragen Javier Sitaker <kragen@pobox.com>**20080208023219] 
[minor comment correction
Kragen Javier Sitaker <kragen@pobox.com>**20080208095652] 
[finished backslashify refactoring by renaming tables used
Kragen Javier Sitaker <kragen@pobox.com>**20080208095707] 
[let the assembler do the work of tagging the integers
Kragen Javier Sitaker <kragen@pobox.com>**20080208095729] 
[simplified the tagged-constant emission code a bit more
Kragen Javier Sitaker <kragen@pobox.com>**20080208100455] 
[added cons cells
Kragen Javier Sitaker <kragen@pobox.com>**20080208102607] 
[changed runtests to use mzscheme instead of elk so I can see what the errors are
Kragen Javier Sitaker <kragen@pobox.com>**20080208102620] 
[eliminated char=? and substring as unnecessary
Kragen Javier Sitaker <kragen@pobox.com>**20080208214852] 
[added support for negative decimal literals
Kragen Javier Sitaker <kragen@pobox.com>**20080208223020] 
[added variadic function support
Kragen Javier Sitaker <kragen@pobox.com>**20080208225936] 
[added commented-out test for assq
Kragen Javier Sitaker <kragen@pobox.com>**20080208225941] 
[added quote and symbols
Kragen Javier Sitaker <kragen@pobox.com>**20080209024923] 
[put a bunch of the Scheme standard library where target programs could use it
Kragen Javier Sitaker <kragen@pobox.com>**20080209032211] 
[some comment and formatting cleanup
Kragen Javier Sitaker <kragen@pobox.com>**20080209032322] 
[changed runtests to be able to run just specific tests
Kragen Javier Sitaker <kragen@pobox.com>**20080209032343] 
[implemented "implicit begin" for lambda bodies in -1 lines of code
Kragen Javier Sitaker <kragen@pobox.com>**20080210061359] 
[took advantage of the -1-line implementation of implicit begin to add another -62 lines to the program
Kragen Javier Sitaker <kragen@pobox.com>**20080210064253] 
[adding test for lambda implicit begin
Kragen Javier Sitaker <kragen@pobox.com>**20080210064731] 
[added pair?, and incidentally also for-each (since our map iterates in a funny order)
Kragen Javier Sitaker <kragen@pobox.com>**20080210070814] 
[some comment updates
Kragen Javier Sitaker <kragen@pobox.com>**20080210070851] 
[added < primitive procedure (not inlined for now)
Kragen Javier Sitaker <kragen@pobox.com>**20080210163702] 
[added the ability to quote integers
Kragen Javier Sitaker <kragen@pobox.com>**20080210163755] 
[commented < procedure
Kragen Javier Sitaker <kragen@pobox.com>**20080210164450] 
[added the ability to quote booleans
Kragen Javier Sitaker <kragen@pobox.com>**20080210164501] 
[eliminated compile-literal-string, compile-literal-boolean, compile-literal-integer (were duplicative with compile-quote)
Kragen Javier Sitaker <kragen@pobox.com>**20080210165517] 
[changed back to number->string
Kragen Javier Sitaker <kragen@pobox.com>**20080210165755] 
[simplified newline_string
Kragen Javier Sitaker <kragen@pobox.com>**20080210165801] 
[simplified string-ref and fixed a bug in it for high-bit-set chars
Kragen Javier Sitaker <kragen@pobox.com>**20080210170119] 
[some comment cleanup and updates
Kragen Javier Sitaker <kragen@pobox.com>**20080210171003] 
[implemented symbol?
Kragen Javier Sitaker <kragen@pobox.com>**20080210171033] 
[amended comments to reflect that < exists now
Kragen Javier Sitaker <kragen@pobox.com>**20080210171730] 
[removed mistaken use of number? instead of integer?
Kragen Javier Sitaker <kragen@pobox.com>**20080210171750] 
[added integer?
Kragen Javier Sitaker <kragen@pobox.com>**20080210172716] 
[added boolean?
Kragen Javier Sitaker <kragen@pobox.com>**20080210172913] 
[added string?
Kragen Javier Sitaker <kragen@pobox.com>**20080210175058] 
[refactored procedure and string tests
Kragen Javier Sitaker <kragen@pobox.com>**20080210175534] 
[refactored ensure_cons to use the same test as ensure_string
Kragen Javier Sitaker <kragen@pobox.com>**20080210175652] 
[refactored pair? to use the same test as string?
Kragen Javier Sitaker <kragen@pobox.com>**20080210175943] 
[defined procedure?
Kragen Javier Sitaker <kragen@pobox.com>**20080210180400] 
[added memq
Kragen Javier Sitaker <kragen@pobox.com>**20080210182318] 
[improved runtests output
Kragen Javier Sitaker <kragen@pobox.com>**20080210182332] 
[made error messages go to stderr instead of stdout
Kragen Javier Sitaker <kragen@pobox.com>**20080210182655] 
[fixed bug in handling of procedures with no arguments
Kragen Javier Sitaker <kragen@pobox.com>**20080210183918] 
[changed procedure epilogue in preparation for adding closures
Kragen Javier Sitaker <kragen@pobox.com>**20080210211249] 
[removed dependency on, and implementation of, list?
Kragen Javier Sitaker <kragen@pobox.com>**20080210212337] 
[removed dependency on, and implementation of, map
Kragen Javier Sitaker <kragen@pobox.com>**20080210212534] 
[wrote unused code to compile a tail call
Kragen Javier Sitaker <kragen@pobox.com>**20080210215440] 
[began tracking tail context information in compile-expr
Kragen Javier Sitaker <kragen@pobox.com>**20080210221121] 
[threaded tail information down to compile-expr-2
Kragen Javier Sitaker <kragen@pobox.com>**20080210221347] 
[threaded tail-context information down to expression type handlers
Kragen Javier Sitaker <kragen@pobox.com>**20080210221702] 
[threaded tail-context information down to compile-application
Kragen Javier Sitaker <kragen@pobox.com>**20080210222037] 
[got tail-call optimization working for the simplest empty loop case, fixing some bugs in the tail-call code
Kragen Javier Sitaker <kragen@pobox.com>**20080210224105] 
[threaded tail-context information down to handlers for particular special forms
Kragen Javier Sitaker <kragen@pobox.com>**20080210224612] 
[threaded tail-call information through compile-if so now we can write tail-recursive non-infinite loops!
Kragen Javier Sitaker <kragen@pobox.com>**20080210224939] 
[updated tailcall test to have fuller coverage
Kragen Javier Sitaker <kragen@pobox.com>**20080210230257] 
[gave UrScheme a name
Kragen Javier Sitaker <kragen@pobox.com>**20080212221942] 
[updated comments a bit, eliminating char? and string=? from to-do list
Kragen Javier Sitaker <kragen@pobox.com>**20080212221959] 
[started adding closure support
Kragen Javier Sitaker <kragen@pobox.com>**20080212222023] 
[changed procedure prologue a little bit (hoping will be useful in implementing closures)
Kragen Javier Sitaker <kragen@pobox.com>**20080212222055] 
[don't bother to explicitly discard results of expression statements inside function; just pop them all off at the end
Kragen Javier Sitaker <kragen@pobox.com>**20080212222127] 
[improved "if" argument length mismatch message
Kragen Javier Sitaker <kragen@pobox.com>**20080212222200] 
[clarified comment on for-each
Kragen Javier Sitaker <kragen@pobox.com>**20080212222220] 
[fixed handling of empty variadic argument lists
Kragen Javier Sitaker <kragen@pobox.com>**20080212223039] 
[simplified variadic args loop slightly
Kragen Javier Sitaker <kragen@pobox.com>**20080212224717] 
[added some more parts of the closure implementation
Kragen Javier Sitaker <kragen@pobox.com>**20080213055714
 
 Now it can detect when it's going to generate incorrect code (due to
 the need for closures) and refrains from doing so.  The code to manage
 this is about 135 lines of code, including blank lines, comments, and
 tests.
 
 Also, I split the procedure prologue stuff into two functions, since
 the variadic and non-variadic paths have like two instructions in
 common now.  And there's a little hook in there to compile code to
 handle closure arguments, although it doesn't yet have the information
 it needs to DTRT with them.
 
 
] 
[added "closures" document
Kragen Javier Sitaker <kragen@pobox.com>**20080214001056] 
[updating performance numbers in test.tailcall.scm
Kragen Javier Sitaker <kragen@pobox.com>**20080216025754] 
[more thrashing around in English trying to figure out how to do closures
Kragen Javier Sitaker <kragen@pobox.com>**20080216025819] 
[some comment updates
Kragen Javier Sitaker <kragen@pobox.com>**20080216025853] 
[changed environment representation and eliminated nested environment
Kragen Javier Sitaker <kragen@pobox.com>**20080216030528] 
[cleaned up unnecessarily worried comment from tail-call optimization time
Kragen Javier Sitaker <kragen@pobox.com>**20080216030617] 
[added 1+ and 1- functions, simplifying a few things a bit
Kragen Javier Sitaker <kragen@pobox.com>**20080216171107] 
[changed assembly output to contain names of global variables to reduce diff size
Kragen Javier Sitaker <kragen@pobox.com>**20080216175838] 
[now symbol names for builtin functions are mostly sensible too
Kragen Javier Sitaker <kragen@pobox.com>**20080216180812
 
 This makes the assembly output considerably more readable.
] 
[moved 1+ and 1- a bit and commented them.
Kragen Javier Sitaker <kragen@pobox.com>**20080216194435] 
[commented label-prefix addition
Kragen Javier Sitaker <kragen@pobox.com>**20080216194502] 
[changed free-vars-lambda to take separate vars and body, and added 'artifacts' function
Kragen Javier Sitaker <kragen@pobox.com>**20080216194512] 
[added a basic nonhygienic macro system and cond
Kragen Javier Sitaker <kragen@pobox.com>**20080216194801] 
[added the (define (foo args) ...) syntax as a macro
Kragen Javier Sitaker <kragen@pobox.com>**20080216195243] 
[changed compiler to take advantage of shorter define syntax.
Kragen Javier Sitaker <kragen@pobox.com>**20080216202644
 
 
 Unavoidably some unrelated comment and string cleanup got folded in.
] 
[replaced all nested if cascades with uses of cond
Kragen Javier Sitaker <kragen@pobox.com>**20080216204325
 
 It's a little disappointing that this reduced the length of the
 compiler by only three lines, while the definition of "cond" is itself
 six lines.
 
] 
[added "let" macro
Kragen Javier Sitaker <kragen@pobox.com>**20080216205417] 
[refactored a bunch of named procedures into let-expressions
Kragen Javier Sitaker <kragen@pobox.com>**20080216211642] 
[some comment updates
Kragen Javier Sitaker <kragen@pobox.com>**20080216211759] 
[added a couple more uses of (let...) where previously I had ((lambda ..) ..)
Kragen Javier Sitaker <kragen@pobox.com>**20080216212050] 
[adding test for string-append function
Kragen Javier Sitaker <kragen@pobox.com>**20080216212137] 
[added eqv? test (and incidentally string->list)
Kragen Javier Sitaker <kragen@pobox.com>**20080216215349] 
[added "case" macro
Kragen Javier Sitaker <kragen@pobox.com>**20080216220910] 
[some simplifications using cond and case
Kragen Javier Sitaker <kragen@pobox.com>**20080216222750] 
[added "or" macro
Kragen Javier Sitaker <kragen@pobox.com>**20080216223354] 
[used "or" to simplify the compiler slightly.
Kragen Javier Sitaker <kragen@pobox.com>**20080216223906] 
[added "map" function back in since the macro system uses it
Kragen Javier Sitaker <kragen@pobox.com>**20080216225108] 
[some more comment updates as I struggle with closures in my mind
Kragen Javier Sitaker <kragen@pobox.com>**20080216235841] 
[some more refactoring, renaming, and reformatting towards closures
Kragen Javier Sitaker <kragen@pobox.com>**20080216235921] 
[added closures.  they are still buggy.
Kragen Javier Sitaker <kragen@pobox.com>**20080217015159] 
[fixed closures to work for arguments other than the first :)
Kragen Javier Sitaker <kragen@pobox.com>**20080217015845] 
[fixed bug where macro-expansion was expanding lambda arg lists
Kragen Javier Sitaker <kragen@pobox.com>**20080217024808] 
[updated some comments
Kragen Javier Sitaker <kragen@pobox.com>**20080217024854] 
[fixed assert to not try to call if with two arguments
Kragen Javier Sitaker <kragen@pobox.com>**20080217024906] 
[added eof-object?, caadr, and cdadr, and reorganized the standard library a bit
Kragen Javier Sitaker <kragen@pobox.com>**20080217024921] 
[added equal? and string=?
Kragen Javier Sitaker <kragen@pobox.com>**20080217025041] 
[added chmodding thing so you can run the Makefile out of the box (stupid darcs)
Kragen Javier Sitaker <kragen@pobox.com>**20080220023955] 
[decided to implement character literals
Kragen Javier Sitaker <kragen@pobox.com>**20080220024025] 
[started on parsing
Kragen Javier Sitaker <kragen@pobox.com>**20080220024038] 
[added more parsing.  parser can now parse first 75 sexps of compiler!
Kragen Javier Sitaker <kragen@pobox.com>**20080220032827] 
[updated Makefile comments
Kragen Javier Sitaker <kragen@pobox.com>**20080220040505] 
[added character literals, negative numbers, and some eof handling to parser, and switched to it for now
Kragen Javier Sitaker <kragen@pobox.com>**20080220040512
 
 Ultimately the parser in question should become part of the standard
 library as (read), not part of the main body of the compiler.
 
] 
[added support for compiling literal characters
Kragen Javier Sitaker <kragen@pobox.com>**20080220041222] 
[updated comments on plans
Kragen Javier Sitaker <kragen@pobox.com>**20080220042413] 
[implemented list->string
Kragen Javier Sitaker <kragen@pobox.com>**20080220042425] 
[rearranged some comments in compiler.scm
Kragen Javier Sitaker <kragen@pobox.com>**20080220045137] 
[added "reverse" function
Kragen Javier Sitaker <kragen@pobox.com>**20080220045222] 
[increased heap size to 128MB --- almost 10 seconds' worth of furious consing!
Kragen Javier Sitaker <kragen@pobox.com>**20080220052230
 
 Since there's no garbage collector yet, this extends the usefulness of
 the program :)
 
] 
[added (read-char) and (current-input-port)
Kragen Javier Sitaker <kragen@pobox.com>**20080220052545] 
[handled EOF properly inside of parse-list.
Kragen Javier Sitaker <kragen@pobox.com>**20080220074645] 
[fixed parser to support \n and \t in strings; added char-whitespace?
Kragen Javier Sitaker <kragen@pobox.com>**20080220081007] 
[began boxing symbols
Kragen Javier Sitaker <kragen@pobox.com>**20080220084929] 
[simplified global variable stuff very slightly
Kragen Javier Sitaker <kragen@pobox.com>**20080220085008] 
[changed symbols to be pointers into memory; boxing is complete.
Kragen Javier Sitaker <kragen@pobox.com>**20080220085748] 
[added symbol->string
Kragen Javier Sitaker <kragen@pobox.com>**20080220091254] 
[added string->symbol
Kragen Javier Sitaker <kragen@pobox.com>**20080220100111] 
[added char? predicate
Kragen Javier Sitaker <kragen@pobox.com>**20080220101156] 
[added "and" macro and simplified things accordingly
Kragen Javier Sitaker <kragen@pobox.com>**20080220102149] 
[added char->integer and integer->char
Kragen Javier Sitaker <kragen@pobox.com>**20080220103939] 
[added char-alphabetic?
Kragen Javier Sitaker <kragen@pobox.com>**20080220104932] 
[some comment updates
Kragen Javier Sitaker <kragen@pobox.com>**20080220104951] [cleaned up error handling and added user-callable "error" procedure
Kragen Javier Sitaker <kragen@pobox.com>**20080220105754] 
[some overdue comment updates, oops
Kragen Javier Sitaker <kragen@pobox.com>**20080220105805] 
[added the first interpreter from The Art Of The Interpreter
Kragen Javier Sitaker <kragen@pobox.com>**20080220225414] 
[moved number->string into standard library
Kragen Javier Sitaker <kragen@pobox.com>**20080220225431] 
[added string->number
Kragen Javier Sitaker <kragen@pobox.com>**20080220232324] 
[some comment updates, and changed heapvars to 0x1ce11ed
Kragen Javier Sitaker <kragen@pobox.com>**20080220233622] 
[changes to make the Art Of The Interpreter interpreter run
Kragen Javier Sitaker <kragen@pobox.com>**20080220233700] 
[added support for set! on global variables
Kragen Javier Sitaker <kragen@pobox.com>**20080221001326] 
[removed tail? parameter from compile-var
Kragen Javier Sitaker <kragen@pobox.com>**20080221001505] 
[simplified interface to fetch and set global variables
Kragen Javier Sitaker <kragen@pobox.com>**20080221001755] 
[adding test for setting global variable setting. oops!
Kragen Javier Sitaker <kragen@pobox.com>**20080221001848] 
[added set! for local variables
Kragen Javier Sitaker <kragen@pobox.com>**20080221002340] 
[added set! for heap variables
Kragen Javier Sitaker <kragen@pobox.com>**20080221002831] 
[wrote (error ...) in Scheme instead of assembly
Kragen Javier Sitaker <kragen@pobox.com>**20080221061249] 
[improved tests for set! slightly
Kragen Javier Sitaker <kragen@pobox.com>**20080221061319] 
[refactored string backslashing slightly
Kragen Javier Sitaker <kragen@pobox.com>**20080221062253] 
[fixed bug in representing the #\\ character literal
Kragen Javier Sitaker <kragen@pobox.com>**20080221064055] 
[added "write" procedure
Kragen Javier Sitaker <kragen@pobox.com>**20080221064126] 
[changed code to permit duplicate top-level defines.  now the compiler seems to work when self-compiled.
Kragen Javier Sitaker <kragen@pobox.com>**20080221073745] 
[added rule to compile compiler to Makefile
Kragen Javier Sitaker <kragen@pobox.com>**20080221074610] 
[removed dependencies on argument evaluation order, and now Ur-Scheme compiler produces same output when run under itself
Kragen Javier Sitaker <kragen@pobox.com>**20080221075949] 
[hacked up compile machinery to support a stage2-test and be less error-prone
Kragen Javier Sitaker <kragen@pobox.com>**20080221081413] 
[added two test files I forgot to check in a while back
Kragen Javier Sitaker <kragen@pobox.com>**20080221081523] 
[expanded support for bootstrap compilers; now we support Chicken by renaming define-macro to define-ur-macro
Kragen Javier Sitaker <kragen@pobox.com>**20080221083827] 
[some comment updates
Kragen Javier Sitaker <kragen@pobox.com>**20080221083911] 
[updated some comments in compiler.scm
Kragen Javier Sitaker <kragen@pobox.com>**20080221102442] 
[added some basic web pages
Kragen Javier Sitaker <kragen@pobox.com>**20080221102453] 
[updated web page quite a bit
Kragen Javier Sitaker <kragen@pobox.com>**20080221120459] 
