earlier I think I mentioned that I implemented generic keywords by automatically wrapping them in (quote) in the reader, but that's probably a bad solution if I ever implement macros. I just came up with another solution that is super simple and works with macros:
// in eval ()
if (symbolp(form)) {
+ if (nthchar(princtostring(form), 0) == ':') return form; // Keyword
symbol_t name = form->name;
object* pair = value(name, env);
if (pair != NULL) return cdr(pair);
pair = value(name, GlobalEnv);
if (pair != NULL) return cdr(pair);
else if (builtinp(name)) return form;
Context = NIL;
error(PSTR("undefined"), form);
}
earlier I think I mentioned that I implemented generic keywords by automatically wrapping them in
(quote)in the reader, but that's probably a bad solution if I ever implement macros. I just came up with another solution that is super simple and works with macros:// in eval () if (symbolp(form)) { + if (nthchar(princtostring(form), 0) == ':') return form; // Keyword symbol_t name = form->name; object* pair = value(name, env); if (pair != NULL) return cdr(pair); pair = value(name, GlobalEnv); if (pair != NULL) return cdr(pair); else if (builtinp(name)) return form; Context = NIL; error(PSTR("undefined"), form); }