altos/lisp: Generate built-in lambda atoms for const creation
authorKeith Packard <keithp@keithp.com>
Fri, 17 Nov 2017 16:04:28 +0000 (08:04 -0800)
committerKeith Packard <keithp@keithp.com>
Fri, 17 Nov 2017 16:04:28 +0000 (08:04 -0800)
Signed-off-by: Keith Packard <keithp@keithp.com>
src/lisp/ao_lisp.h
src/lisp/ao_lisp_make_builtin

index 341996c0c2e6d1acaa99a905fc5a22a6d7cd38a0..77a94cf14eda714b55f60ca36f412a29b9cd4739 100644 (file)
@@ -59,33 +59,13 @@ extern uint8_t ao_lisp_const[AO_LISP_POOL_CONST] __attribute__((aligned(4)));
 
 #define _ao_lisp_bool_true     _bool(1)
 #define _ao_lisp_bool_false    _bool(0)
-#define _ao_lisp_atom_quote    _atom(quote)
-#define _ao_lisp_atom_set      _atom(set)
-#define _ao_lisp_atom_setq     _atom(setq)
-#define _ao_lisp_atom_car      _atom(car)
-#define _ao_lisp_atom_cdr      _atom(cdr)
-#define _ao_lisp_atom_cons     _atom(cons)
-#define _ao_lisp_atom_last     _atom(last)
-#define _ao_lisp_atom_length   _atom(length)
-#define _ao_lisp_atom_cond     _atom(cond)
-#define _ao_lisp_atom_else     _atom(else)
-#define _ao_lisp_atom_lambda   _atom(lambda)
-#define _ao_lisp_atom_led      _atom(led)
-#define _ao_lisp_atom_delay    _atom(delay)
-#define _ao_lisp_atom_pack     _atom(pack)
-#define _ao_lisp_atom_unpack   _atom(unpack)
-#define _ao_lisp_atom_flush    _atom(flush)
-#define _ao_lisp_atom_eval     _atom(eval)
-#define _ao_lisp_atom_read     _atom(read)
+
 #define _ao_lisp_atom_eof      _atom(eof)
-#define _ao_lisp_atom_save     _atom(save)
-#define _ao_lisp_atom_restore  _atom(restore)
-#define _ao_lisp_atom_call2fcc _atom(call/cc)
-#define _ao_lisp_atom_collect  _atom(collect)
-#define _ao_lisp_atom_symbolp   _atom(symbol?)
-#define _ao_lisp_atom_builtin   _atom(builtin?)
-#define _ao_lisp_atom_symbolp   _atom(symbol?)
-#define _ao_lisp_atom_symbolp   _atom(symbol?)
+#define _ao_lisp_atom_else     _atom(else)
+
+#define AO_LISP_BUILTIN_ATOMS
+#include "ao_lisp_builtin.h"
+
 #else
 #include "ao_lisp_const.h"
 #ifndef AO_LISP_POOL
index b7b17cf48009c80673bc6ba3d4b5c7c4eec6ecb9..ddc9a0b37ec4210abbab150d0509656206dea56d 100644 (file)
@@ -142,6 +142,22 @@ dump_consts(builtin_t[*] builtins) {
        printf("#endif /* AO_LISP_BUILTIN_CONSTS */\n");
 }
 
+void
+dump_atoms(builtin_t[*] builtins) {
+       printf("#ifdef AO_LISP_BUILTIN_ATOMS\n");
+       printf("#undef AO_LISP_BUILTIN_ATOMS\n");
+       for (int i = 0; i < dim(builtins); i++) {
+               for (int j = 0; j < dim(builtins[i].lisp_names); j++) {
+                       printf("#define _ao_lisp_atom_");
+                       cify_lisp(builtins[i].lisp_names[j]);
+                       printf(" _atom(");
+                       cify_lisp(builtins[i].lisp_names[j]);
+                       printf(")\n");
+               }
+       }
+       printf("#endif /* AO_LISP_BUILTIN_ATOMS */\n");
+}
+
 void main() {
        if (dim(argv) < 2) {
                File::fprintf(stderr, "usage: %s <file>\n", argv[0]);
@@ -155,6 +171,7 @@ void main() {
                dump_funcs(builtins);
                dump_decls(builtins);
                dump_consts(builtins);
+               dump_atoms(builtins);
        }
 }