diff options
Diffstat (limited to 'src/lisp/ao_lisp_make_builtin')
-rw-r--r-- | src/lisp/ao_lisp_make_builtin | 48 |
1 files changed, 30 insertions, 18 deletions
diff --git a/src/lisp/ao_lisp_make_builtin b/src/lisp/ao_lisp_make_builtin index 531e388d..c4ba9d94 100644 --- a/src/lisp/ao_lisp_make_builtin +++ b/src/lisp/ao_lisp_make_builtin @@ -13,6 +13,7 @@ string[string] type_map = { "macro" => "MACRO", "f_lambda" => "F_LAMBDA", "f_lexpr" => "F_LEXPR", + "atom" => "atom", }; string[*] @@ -50,13 +51,16 @@ read_builtins(file f) { return builtins; } +bool is_atom(builtin_t b) = b.type == "atom"; + void dump_ids(builtin_t[*] builtins) { printf("#ifdef AO_LISP_BUILTIN_ID\n"); printf("#undef AO_LISP_BUILTIN_ID\n"); printf("enum ao_lisp_builtin_id {\n"); for (int i = 0; i < dim(builtins); i++) - printf("\tbuiltin_%s,\n", builtins[i].c_name); + if (!is_atom(builtins[i])) + printf("\tbuiltin_%s,\n", builtins[i].c_name); printf("\t_builtin_last\n"); printf("};\n"); printf("#endif /* AO_LISP_BUILTIN_ID */\n"); @@ -69,8 +73,9 @@ dump_casename(builtin_t[*] builtins) { printf("static char *ao_lisp_builtin_name(enum ao_lisp_builtin_id b) {\n"); printf("\tswitch(b) {\n"); for (int i = 0; i < dim(builtins); i++) - printf("\tcase builtin_%s: return ao_lisp_poly_atom(_atom(\"%s\"))->name;\n", - builtins[i].c_name, builtins[i].lisp_names[0]); + if (!is_atom(builtins[i])) + printf("\tcase builtin_%s: return ao_lisp_poly_atom(_atom(\"%s\"))->name;\n", + builtins[i].c_name, builtins[i].lisp_names[0]); printf("\tdefault: return \"???\";\n"); printf("\t}\n"); printf("}\n"); @@ -94,10 +99,12 @@ dump_arrayname(builtin_t[*] builtins) { printf("#undef AO_LISP_BUILTIN_ARRAYNAME\n"); printf("static const ao_poly builtin_names[] = {\n"); for (int i = 0; i < dim(builtins); i++) { - printf("\t[builtin_%s] = _ao_lisp_atom_", - builtins[i].c_name); - cify_lisp(builtins[i].lisp_names[0]); - printf(",\n"); + if (!is_atom(builtins[i])) { + printf("\t[builtin_%s] = _ao_lisp_atom_", + builtins[i].c_name); + cify_lisp(builtins[i].lisp_names[0]); + printf(",\n"); + } } printf("};\n"); printf("#endif /* AO_LISP_BUILTIN_ARRAYNAME */\n"); @@ -109,9 +116,10 @@ dump_funcs(builtin_t[*] builtins) { printf("#undef AO_LISP_BUILTIN_FUNCS\n"); printf("const ao_lisp_func_t ao_lisp_builtins[] = {\n"); for (int i = 0; i < dim(builtins); i++) { - printf("\t[builtin_%s] = ao_lisp_do_%s,\n", - builtins[i].c_name, - builtins[i].c_name); + if (!is_atom(builtins[i])) + printf("\t[builtin_%s] = ao_lisp_do_%s,\n", + builtins[i].c_name, + builtins[i].c_name); } printf("};\n"); printf("#endif /* AO_LISP_BUILTIN_FUNCS */\n"); @@ -122,9 +130,11 @@ dump_decls(builtin_t[*] builtins) { printf("#ifdef AO_LISP_BUILTIN_DECLS\n"); printf("#undef AO_LISP_BUILTIN_DECLS\n"); for (int i = 0; i < dim(builtins); i++) { - printf("ao_poly\n"); - printf("ao_lisp_do_%s(struct ao_lisp_cons *cons);\n", - builtins[i].c_name); + if (!is_atom(builtins[i])) { + printf("ao_poly\n"); + printf("ao_lisp_do_%s(struct ao_lisp_cons *cons);\n", + builtins[i].c_name); + } } printf("#endif /* AO_LISP_BUILTIN_DECLS */\n"); } @@ -135,11 +145,13 @@ dump_consts(builtin_t[*] builtins) { printf("#undef AO_LISP_BUILTIN_CONSTS\n"); printf("struct builtin_func funcs[] = {\n"); for (int i = 0; i < dim(builtins); i++) { - for (int j = 0; j < dim(builtins[i].lisp_names); j++) { - printf ("\t{ .name = \"%s\", .args = AO_LISP_FUNC_%s, .func = builtin_%s },\n", - builtins[i].lisp_names[j], - builtins[i].type, - builtins[i].c_name); + if (!is_atom(builtins[i])) { + for (int j = 0; j < dim(builtins[i].lisp_names); j++) { + printf ("\t{ .name = \"%s\", .args = AO_LISP_FUNC_%s, .func = builtin_%s },\n", + builtins[i].lisp_names[j], + builtins[i].type, + builtins[i].c_name); + } } } printf("};\n"); |