projects
/
fw
/
altos
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
altos/lisp: use regular read-eval-print loop for make const
[fw/altos]
/
src
/
lisp
/
ao_lisp.h
diff --git
a/src/lisp/ao_lisp.h
b/src/lisp/ao_lisp.h
index 82ba5a20e1ec20f1bad122c31fc408f3b818f413..d265ea7bb9db23daab33404eb4691b63d1e533bc 100644
(file)
--- a/
src/lisp/ao_lisp.h
+++ b/
src/lisp/ao_lisp.h
@@
-15,17
+15,10
@@
#ifndef _AO_LISP_H_
#define _AO_LISP_H_
#ifndef _AO_LISP_H_
#define _AO_LISP_H_
-#include <stdlib.h>
-
-#if !defined(AO_LISP_TEST) && !defined(AO_LISP_MAKE_CONST)
-#include <ao.h>
-#define AO_LISP_ALTOS 1
-#define abort() ao_panic(1)
-#endif
-
#include <stdint.h>
#include <string.h>
#include <stdint.h>
#include <string.h>
-#include <stdio.h>
+//#include <stdio.h>
+#include <ao_lisp_os.h>
#ifdef AO_LISP_MAKE_CONST
#define AO_LISP_POOL_CONST 16384
#ifdef AO_LISP_MAKE_CONST
#define AO_LISP_POOL_CONST 16384
@@
-45,6
+38,10
@@
extern uint8_t ao_lisp_const[AO_LISP_POOL_CONST];
#define _ao_lisp_atom_last _atom("last")
#define _ao_lisp_atom_cond _atom("cond")
#define _ao_lisp_atom_lambda _atom("lambda")
#define _ao_lisp_atom_last _atom("last")
#define _ao_lisp_atom_cond _atom("cond")
#define _ao_lisp_atom_lambda _atom("lambda")
+#define _ao_lisp_atom_led _atom("led")
+#define _ao_lisp_atom_delay _atom("delay")
+#define _ao_lisp_atom_eval _atom("eval")
+#define _ao_lisp_atom_read _atom("read")
#else
#include "ao_lisp_const.h"
#ifndef AO_LISP_POOL
#else
#include "ao_lisp_const.h"
#ifndef AO_LISP_POOL
@@
-99,7
+96,7
@@
ao_lisp_is_const(ao_poly poly) {
static inline void *
ao_lisp_ref(ao_poly poly) {
if (poly == 0xBEEF)
static inline void *
ao_lisp_ref(ao_poly poly) {
if (poly == 0xBEEF)
- abort();
+ a
o_lisp_a
bort();
if (poly == AO_LISP_NIL)
return NULL;
if (poly & AO_LISP_CONST)
if (poly == AO_LISP_NIL)
return NULL;
if (poly & AO_LISP_CONST)
@@
-163,7
+160,10
@@
enum eval_state {
eval_formal,
eval_exec,
eval_cond,
eval_formal,
eval_exec,
eval_cond,
- eval_cond_test
+ eval_cond_test,
+ eval_progn,
+ eval_while,
+ eval_while_test,
};
struct ao_lisp_stack {
};
struct ao_lisp_stack {
@@
-203,6
+203,8
@@
struct ao_lisp_builtin {
};
enum ao_lisp_builtin_id {
};
enum ao_lisp_builtin_id {
+ builtin_eval,
+ builtin_read,
builtin_lambda,
builtin_lexpr,
builtin_nlambda,
builtin_lambda,
builtin_lexpr,
builtin_nlambda,
@@
-215,6
+217,8
@@
enum ao_lisp_builtin_id {
builtin_set,
builtin_setq,
builtin_cond,
builtin_set,
builtin_setq,
builtin_cond,
+ builtin_progn,
+ builtin_while,
builtin_print,
builtin_patom,
builtin_plus,
builtin_print,
builtin_patom,
builtin_plus,
@@
-227,12
+231,14
@@
enum ao_lisp_builtin_id {
builtin_greater,
builtin_less_equal,
builtin_greater_equal,
builtin_greater,
builtin_less_equal,
builtin_greater_equal,
+ builtin_delay,
+ builtin_led,
_builtin_last
};
typedef ao_poly (*ao_lisp_func_t)(struct ao_lisp_cons *cons);
_builtin_last
};
typedef ao_poly (*ao_lisp_func_t)(struct ao_lisp_cons *cons);
-extern
ao_lisp_func_t
ao_lisp_builtins[];
+extern
const ao_lisp_func_t
ao_lisp_builtins[];
static inline ao_lisp_func_t
ao_lisp_func(struct ao_lisp_builtin *b)
static inline ao_lisp_func_t
ao_lisp_func(struct ao_lisp_builtin *b)