Compiler can compile simple nested expressions and function calls.

The generated code can be called from C, and values can be passed between.
diff --git a/src/lisp/compiler.h b/src/lisp/compiler.h
index f7be765..37eaeba 100644
--- a/src/lisp/compiler.h
+++ b/src/lisp/compiler.h
@@ -1,9 +1,9 @@
 #pragma once
 
 #include "lisp.h"
+#include <dasm_proto.h>
 #include <stdbool.h>
 #include <stdint.h>
-#include <dasm_proto.h>
 
 struct function
 {
@@ -16,7 +16,7 @@
 		value_t (*def2) (value_t, value_t);
 		value_t (*def3) (value_t, value_t, value_t);
 		void *code_ptr;
-		uintrptr_t code_addr;
+		uintptr_t code_addr;
 	};
 
 	struct function *prev;
@@ -45,5 +45,7 @@
 
 void compile_expression (struct environment *env, struct local *local,
                          value_t val, dasm_State **Dst);
-void compile (struct istream *is);
+void compile_expr_to_func (struct environment *env, char *name, value_t val,
+                           dasm_State **Dst);
+void compile (value_t val);
 struct function *find_function (struct environment *env, char *name);