X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=src%2Flisp%2Fao_lisp_make_builtin;h=b7b17cf48009c80673bc6ba3d4b5c7c4eec6ecb9;hp=5e98516c7c2b69247c5e4c411580d61c999a54a2;hb=2e58b6c380bc6440490c47650fbf11d45b3f2e72;hpb=0ced351c8f4449f7086b04e42c822d649f040d1f diff --git a/src/lisp/ao_lisp_make_builtin b/src/lisp/ao_lisp_make_builtin index 5e98516c..b7b17cf4 100644 --- a/src/lisp/ao_lisp_make_builtin +++ b/src/lisp/ao_lisp_make_builtin @@ -3,7 +3,7 @@ typedef struct { string type; string c_name; - string lisp_name; + string[*] lisp_names; } builtin_t; string[string] type_map = { @@ -13,6 +13,16 @@ string[string] type_map = { "macro" => "MACRO", }; +string[*] +make_lisp(string[*] tokens) +{ + string[...] lisp = {}; + + if (dim(tokens) < 3) + return (string[1]) { tokens[dim(tokens) - 1] }; + return (string[dim(tokens)-2]) { [i] = tokens[i+2] }; +} + builtin_t read_builtin(file f) { string line = File::fgets(f); @@ -21,7 +31,7 @@ read_builtin(file f) { return (builtin_t) { .type = dim(tokens) > 0 ? type_map[tokens[0]] : "#", .c_name = dim(tokens) > 1 ? tokens[1] : "#", - .lisp_name = dim(tokens) > 2 ? tokens[2] : tokens[1] + .lisp_names = make_lisp(tokens), }; } @@ -84,7 +94,7 @@ dump_arrayname(builtin_t[*] builtins) { for (int i = 0; i < dim(builtins); i++) { printf("\t[builtin_%s] = _ao_lisp_atom_", builtins[i].c_name); - cify_lisp(builtins[i].lisp_name); + cify_lisp(builtins[i].lisp_names[0]); printf(",\n"); } printf("};\n"); @@ -123,8 +133,10 @@ 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++) { - printf ("\t{ .name = \"%s\", .args = AO_LISP_FUNC_%s, .func = builtin_%s },\n", - builtins[i].lisp_name, builtins[i].type, builtins[i].c_name); + 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"); printf("#endif /* AO_LISP_BUILTIN_CONSTS */\n");