+#ifdef AO_LISP_MAKE_CONST
+char *ao_lisp_builtin_name(enum ao_lisp_builtin_id b) {
+ (void) b;
+ return "???";
+}
+char *ao_lisp_args_name(uint8_t args) {
+ (void) args;
+ return "???";
+}
+#else
+static const ao_poly builtin_names[] = {
+ [builtin_eval] = _ao_lisp_atom_eval,
+ [builtin_read] = _ao_lisp_atom_read,
+ [builtin_lambda] = _ao_lisp_atom_lambda,
+ [builtin_lexpr] = _ao_lisp_atom_lexpr,
+ [builtin_nlambda] = _ao_lisp_atom_nlambda,
+ [builtin_macro] = _ao_lisp_atom_macro,
+ [builtin_car] = _ao_lisp_atom_car,
+ [builtin_cdr] = _ao_lisp_atom_cdr,
+ [builtin_cons] = _ao_lisp_atom_cons,
+ [builtin_last] = _ao_lisp_atom_last,
+ [builtin_length] = _ao_lisp_atom_length,
+ [builtin_quote] = _ao_lisp_atom_quote,
+ [builtin_set] = _ao_lisp_atom_set,
+ [builtin_setq] = _ao_lisp_atom_setq,
+ [builtin_cond] = _ao_lisp_atom_cond,
+ [builtin_progn] = _ao_lisp_atom_progn,
+ [builtin_while] = _ao_lisp_atom_while,
+ [builtin_print] = _ao_lisp_atom_print,
+ [builtin_patom] = _ao_lisp_atom_patom,
+ [builtin_plus] = _ao_lisp_atom_2b,
+ [builtin_minus] = _ao_lisp_atom_2d,
+ [builtin_times] = _ao_lisp_atom_2a,
+ [builtin_divide] = _ao_lisp_atom_2f,
+ [builtin_mod] = _ao_lisp_atom_25,
+ [builtin_equal] = _ao_lisp_atom_3d,
+ [builtin_less] = _ao_lisp_atom_3c,
+ [builtin_greater] = _ao_lisp_atom_3e,
+ [builtin_less_equal] = _ao_lisp_atom_3c3d,
+ [builtin_greater_equal] = _ao_lisp_atom_3e3d,
+ [builtin_pack] = _ao_lisp_atom_pack,
+ [builtin_unpack] = _ao_lisp_atom_unpack,
+ [builtin_flush] = _ao_lisp_atom_flush,
+ [builtin_delay] = _ao_lisp_atom_delay,
+ [builtin_led] = _ao_lisp_atom_led,
+ [builtin_save] = _ao_lisp_atom_save,
+ [builtin_restore] = _ao_lisp_atom_restore,
+ [builtin_call_cc] = _ao_lisp_atom_call2fcc,
+ [builtin_collect] = _ao_lisp_atom_collect,
+
+};
+
+static char *
+ao_lisp_builtin_name(enum ao_lisp_builtin_id b) {
+ if (b < _builtin_last)
+ return ao_lisp_poly_atom(builtin_names[b])->name;
+ return "???";
+}
+
+static const ao_poly ao_lisp_args_atoms[] = {
+ [AO_LISP_FUNC_LAMBDA] = _ao_lisp_atom_lambda,
+ [AO_LISP_FUNC_LEXPR] = _ao_lisp_atom_lexpr,
+ [AO_LISP_FUNC_NLAMBDA] = _ao_lisp_atom_nlambda,
+ [AO_LISP_FUNC_MACRO] = _ao_lisp_atom_macro,
+};
+
+char *
+ao_lisp_args_name(uint8_t args)
+{
+ args &= AO_LISP_FUNC_MASK;
+ if (args < sizeof ao_lisp_args_atoms / sizeof ao_lisp_args_atoms[0])
+ return ao_lisp_poly_atom(ao_lisp_args_atoms[args])->name;
+ return "(unknown)";
+}
+#endif
+