summaryrefslogtreecommitdiff
path: root/src/lisp/ao_lisp_make_const.c
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2016-11-03 21:49:50 -0700
committerKeith Packard <keithp@keithp.com>2017-02-20 11:16:49 -0800
commit77db0e8162cd01c2b42737b3d71b38cea942484f (patch)
tree6345771cd69cdc646fd38f02e84056e0a8ff21d9 /src/lisp/ao_lisp_make_const.c
parent11cb03b1d336ee90c422be27588f57be573a9546 (diff)
altos: Add lambda support to lisp
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src/lisp/ao_lisp_make_const.c')
-rw-r--r--src/lisp/ao_lisp_make_const.c29
1 files changed, 26 insertions, 3 deletions
diff --git a/src/lisp/ao_lisp_make_const.c b/src/lisp/ao_lisp_make_const.c
index 6b603979..9c2ea74c 100644
--- a/src/lisp/ao_lisp_make_const.c
+++ b/src/lisp/ao_lisp_make_const.c
@@ -39,6 +39,7 @@ struct builtin_func funcs[] = {
"quote", AO_LISP_NLAMBDA,builtin_quote,
"set", AO_LISP_LEXPR, builtin_set,
"setq", AO_LISP_MACRO, builtin_setq,
+ "cond", AO_LISP_NLAMBDA,builtin_cond,
"print", AO_LISP_LEXPR, builtin_print,
"+", AO_LISP_LEXPR, builtin_plus,
"-", AO_LISP_LEXPR, builtin_minus,
@@ -47,8 +48,25 @@ struct builtin_func funcs[] = {
"%", AO_LISP_LEXPR, builtin_mod
};
+ao_poly
+ao_lisp_set_cond(struct ao_lisp_cons *c)
+{
+ (void) c;
+ return AO_LISP_NIL;
+}
+
#define N_FUNC (sizeof funcs / sizeof funcs[0])
+/* Syntactic atoms */
+char *atoms[] = {
+ "lambda",
+ "nlambda",
+ "lexpr",
+ "macro"
+};
+
+#define N_ATOM (sizeof atoms / sizeof atoms[0])
+
struct ao_lisp_frame *globals;
static int
@@ -65,9 +83,10 @@ is_atom(int offset)
int
main(int argc, char **argv)
{
- int f, o;
+ int f, o, i;
ao_poly atom, val;
struct ao_lisp_atom *a;
+ struct ao_lisp_builtin *b;
int in_atom;
printf("/*\n");
@@ -75,11 +94,15 @@ main(int argc, char **argv)
ao_lisp_root_add(&ao_lisp_frame_type, &globals);
globals = ao_lisp_frame_new(0, 0);
for (f = 0; f < N_FUNC; f++) {
- struct ao_lisp_builtin *b = ao_lisp_make_builtin(funcs[f].func, funcs[f].args);
- struct ao_lisp_atom *a = ao_lisp_atom_intern(funcs[f].name);
+ b = ao_lisp_make_builtin(funcs[f].func, funcs[f].args);
+ a = ao_lisp_atom_intern(funcs[f].name);
globals = ao_lisp_frame_add(globals, ao_lisp_atom_poly(a), ao_lisp_builtin_poly(b));
}
+ /* atoms for syntax */
+ for (i = 0; i < N_ATOM; i++)
+ (void) ao_lisp_atom_intern(atoms[i]);
+
/* boolean constants */
a = ao_lisp_atom_intern("nil");
globals = ao_lisp_frame_add(globals, ao_lisp_atom_poly(a), AO_LISP_NIL);