#+TITLE: Lisp Notes
#+AUTHOR: swissChili

* Compiler

  The compiler will using DynASM to generate code at runtime. It won’t
  be a JIT (no interpreter), strictly a dynamic compiler.

  For now I won’t even have a register allocator, all variables and
  temporaries will be stored on the stack. This makes more or less
  sense considering they will need to be put on the stack anyway when
  a function is called.

  An example assembly is in =scratch.s=.

** First Pass

   The first pass will involve finding all the local variables
   (i.e. anything defined with =let=) and all the temporary values
   necessary. Once a variable is out of scope, its stack space becomes
   usable by other variables. Similarly, once a temporary is used, its
   space becomes available. Variables are addressable by name but
   temporaries are not.

** Second Pass

   The second pass will actually generate assembly. First enough space
   will be reserved on the stack for the variables and temporaries,
   then the AST will be walked as before to generate all the
   appropriate function calls.

   When a function call is generated, first temporaries are allocated
   for all its arguments. Then the sub-expressions are compiled left to
   right given these temporary locations as the outputs. For now we
   will assume that everything is either a variable or a function
   call, there will be no literals yet.
