Move lisp to single-dword value type
diff --git a/src/lisp/lisp-notes.org b/src/lisp/lisp-notes.org
index 614ac8f..c4a7be2 100644
--- a/src/lisp/lisp-notes.org
+++ b/src/lisp/lisp-notes.org
@@ -13,24 +13,13 @@
An example assembly is in =scratch.s=.
-** First Pass
+ Values will be encoded as double words, where the lowest few bits
+ indicate the type.
- 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.
+** Closures and lambdas
-** 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.
+ 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.