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/plat/linux.c b/src/lisp/plat/linux.c
index 23f7f82..bd9af10 100644
--- a/src/lisp/plat/linux.c
+++ b/src/lisp/plat/linux.c
@@ -1,6 +1,7 @@
#include "plat.h"
#include <stdlib.h>
#include <string.h>
+#include <sys/mman.h>
void *malloc_aligned (size_t size)
{
@@ -27,3 +28,16 @@
void **ptr = (void **)addr;
free (ptr[ -1 ]);
}
+
+void *link (dasm_State **Dst)
+{
+ size_t size;
+ void *buf;
+
+ dasm_link (Dst, &size);
+ buf = mmap (0, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+ dasm_encode (Dst, buf);
+
+ mprotect (buf, size, PROT_READ | PROT_EXEC);
+ return buf;
+}