altos/telegps-v2.0: git ignore make results
[fw/altos] / src / lisp / ao_lisp_make_const.c
index 60bb80f01e8059b01c534b7a306d933f59d3579d..49f989e6198244e34cf26181bcde6fe1afe1bb53 100644 (file)
@@ -71,6 +71,8 @@ struct builtin_func funcs[] = {
        { .name = "led",        .args = AO_LISP_FUNC_F_LEXPR,   .func = builtin_led },
        { .name = "save",       .args = AO_LISP_FUNC_F_LAMBDA,  .func = builtin_save },
        { .name = "restore",    .args = AO_LISP_FUNC_F_LAMBDA,  .func = builtin_restore },
+       { .name = "call/cc",    .args = AO_LISP_FUNC_F_LAMBDA,  .func = builtin_call_cc },
+       { .name = "collect",    .args = AO_LISP_FUNC_F_LAMBDA,  .func = builtin_collect },
 };
 
 #define N_FUNC (sizeof funcs / sizeof funcs[0])
@@ -136,6 +138,7 @@ ao_lisp_macro_push(ao_poly p)
        m->p = p;
        m->next = macro_stack;
        macro_stack = m;
+       return 0;
 }
 
 void
@@ -305,8 +308,8 @@ main(int argc, char **argv)
        ao_poly val;
        struct ao_lisp_atom     *a;
        struct ao_lisp_builtin  *b;
-       int     in_atom;
-       char    *out_name;
+       int     in_atom = 0;
+       char    *out_name = NULL;
        int     c;
 
        in = stdin;
@@ -357,7 +360,7 @@ main(int argc, char **argv)
        /* Reduce to referenced values */
        ao_lisp_collect(AO_LISP_COLLECT_FULL);
 
-       for (f = 0; f < ao_lisp_frame_num(ao_lisp_frame_global); f++) {
+       for (f = 0; f < ao_lisp_frame_global->num; f++) {
                val = ao_has_macro(ao_lisp_frame_global->vals[f].val);
                if (val != AO_LISP_NIL) {
                        printf("error: function %s contains unresolved macro: ",
@@ -397,7 +400,7 @@ main(int argc, char **argv)
                fprintf(out, "  0x%04x\n", ao_lisp_atom_poly(a));
        }
        fprintf(out, "#ifdef AO_LISP_CONST_BITS\n");
-       fprintf(out, "const uint8_t ao_lisp_const[] = {");
+       fprintf(out, "const uint8_t ao_lisp_const[AO_LISP_POOL_CONST] __attribute((aligned(4))) = {");
        for (o = 0; o < ao_lisp_top; o++) {
                uint8_t c;
                if ((o & 0xf) == 0)