#+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=. Values will be encoded as double words, where the lowest few bits indicate the type. ** Closures and lambdas Closures will have to be done in two passes, one pass to find the free variables and one to generate the code. Free variables will be accessed as an offset to =edi=, which will point to the location of the lambda on the heap. =[edi]= will evaluate to the address of the lambda, =[edi + 1]= for the first free variable, etc.