From 00bf2ca86b60e6501880011897cea073865c5a03 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sat, 25 Nov 2017 17:29:10 -0800 Subject: [PATCH] altos/lisp: Rename progn to begin Match scheme name. Signed-off-by: Keith Packard --- src/lisp/ao_lisp.h | 2 +- src/lisp/ao_lisp_builtin.c | 4 ++-- src/lisp/ao_lisp_builtin.txt | 2 +- src/lisp/ao_lisp_const.lisp | 22 +++++++++++++++++++++- src/lisp/ao_lisp_eval.c | 20 ++++++++++---------- src/lisp/ao_lisp_stack.c | 2 +- 6 files changed, 36 insertions(+), 16 deletions(-) diff --git a/src/lisp/ao_lisp.h b/src/lisp/ao_lisp.h index cbbbe9a4..858212dd 100644 --- a/src/lisp/ao_lisp.h +++ b/src/lisp/ao_lisp.h @@ -229,7 +229,7 @@ enum eval_state { eval_apply, /* Execute apply */ eval_cond, /* Start next cond clause */ eval_cond_test, /* Check cond condition */ - eval_progn, /* Start next progn entry */ + eval_begin, /* Start next begin entry */ eval_while, /* Start while condition */ eval_while_test, /* Check while condition */ eval_macro, /* Finished with macro generation */ diff --git a/src/lisp/ao_lisp_builtin.c b/src/lisp/ao_lisp_builtin.c index d4dc8a86..693cc3ca 100644 --- a/src/lisp/ao_lisp_builtin.c +++ b/src/lisp/ao_lisp_builtin.c @@ -232,9 +232,9 @@ ao_lisp_do_cond(struct ao_lisp_cons *cons) } ao_poly -ao_lisp_do_progn(struct ao_lisp_cons *cons) +ao_lisp_do_begin(struct ao_lisp_cons *cons) { - ao_lisp_stack->state = eval_progn; + ao_lisp_stack->state = eval_begin; ao_lisp_stack->sexprs = ao_lisp_cons_poly(cons); return AO_LISP_NIL; } diff --git a/src/lisp/ao_lisp_builtin.txt b/src/lisp/ao_lisp_builtin.txt index 2e11bdad..236cadb4 100644 --- a/src/lisp/ao_lisp_builtin.txt +++ b/src/lisp/ao_lisp_builtin.txt @@ -13,7 +13,7 @@ nlambda quote f_lambda set macro setq set! nlambda cond -nlambda progn +nlambda begin nlambda while f_lexpr write f_lexpr display diff --git a/src/lisp/ao_lisp_const.lisp b/src/lisp/ao_lisp_const.lisp index 9fb7634c..f8a70979 100644 --- a/src/lisp/ao_lisp_const.lisp +++ b/src/lisp/ao_lisp_const.lisp @@ -25,7 +25,7 @@ (set (quote define) (macro (name val rest) (list - 'progn + 'begin (list 'set (list 'quote name) @@ -520,6 +520,26 @@ '(54 0 37 -3 245 19)) #t)) +(define repeat (macro (count rest) + (list + let + (list + (list '__count__ count)) + (append + (list + while + (list + <= + 0 + (list + set! + '__count__ + (list + - + '__count__ + 1)))) + rest)))) + ;(define number->string (lexpr (arg opt) ; (let ((base (if (null? opt) 10 (car opt))) ; diff --git a/src/lisp/ao_lisp_eval.c b/src/lisp/ao_lisp_eval.c index cfa71fa7..1044aa48 100644 --- a/src/lisp/ao_lisp_eval.c +++ b/src/lisp/ao_lisp_eval.c @@ -283,7 +283,7 @@ ao_lisp_eval_exec(void) break; case AO_LISP_LAMBDA: DBGI(".. frame "); DBG_POLY(ao_lisp_frame_poly(ao_lisp_frame_current)); DBG("\n"); - ao_lisp_stack->state = eval_progn; + ao_lisp_stack->state = eval_begin; v = ao_lisp_lambda_eval(); ao_lisp_stack->sexprs = v; ao_lisp_stack->values = AO_LISP_NIL; @@ -388,7 +388,7 @@ ao_lisp_eval_cond_test(void) ao_poly c = car->cdr; if (c) { - ao_lisp_stack->state = eval_progn; + ao_lisp_stack->state = eval_begin; ao_lisp_stack->sexprs = c; } else ao_lisp_stack->state = eval_val; @@ -403,17 +403,17 @@ ao_lisp_eval_cond_test(void) /* * Evaluate a list of sexprs, returning the value from the last one. * - * ao_lisp_progn records the list in stack->sexprs, so we just need to + * ao_lisp_begin records the list in stack->sexprs, so we just need to * walk that list. Set ao_lisp_v to the car of the list and jump to * eval_sexpr. When that's done, it will land in eval_val. For all but - * the last, leave a stack frame with eval_progn set so that we come + * the last, leave a stack frame with eval_begin set so that we come * back here. For the last, don't add a stack frame so that we can * just continue on. */ static int -ao_lisp_eval_progn(void) +ao_lisp_eval_begin(void) { - DBGI("progn: "); DBG_POLY(ao_lisp_v); DBG(" sexprs "); DBG_POLY(ao_lisp_stack->sexprs); DBG("\n"); + DBGI("begin: "); DBG_POLY(ao_lisp_v); DBG(" sexprs "); DBG_POLY(ao_lisp_stack->sexprs); DBG("\n"); DBGI(".. frame "); DBG_POLY(ao_lisp_frame_poly(ao_lisp_frame_current)); DBG("\n"); DBGI(".. saved frame "); DBG_POLY(ao_lisp_stack->frame); DBG("\n"); @@ -428,7 +428,7 @@ ao_lisp_eval_progn(void) * return the value of the last one by just landing in eval_sexpr */ if (ao_lisp_stack->sexprs) { - ao_lisp_stack->state = eval_progn; + ao_lisp_stack->state = eval_begin; if (!ao_lisp_stack_push()) return 0; } @@ -476,7 +476,7 @@ ao_lisp_eval_while_test(void) ao_lisp_stack->state = eval_while; if (!ao_lisp_stack_push()) return 0; - ao_lisp_stack->state = eval_progn; + ao_lisp_stack->state = eval_begin; ao_lisp_stack->sexprs = ao_lisp_v; } else @@ -516,7 +516,7 @@ static int (*const evals[])(void) = { [eval_apply] = ao_lisp_eval_apply, [eval_cond] = ao_lisp_eval_cond, [eval_cond_test] = ao_lisp_eval_cond_test, - [eval_progn] = ao_lisp_eval_progn, + [eval_begin] = ao_lisp_eval_begin, [eval_while] = ao_lisp_eval_while, [eval_while_test] = ao_lisp_eval_while_test, [eval_macro] = ao_lisp_eval_macro, @@ -530,7 +530,7 @@ const char *ao_lisp_state_names[] = { [eval_apply] = "apply", [eval_cond] = "cond", [eval_cond_test] = "cond_test", - [eval_progn] = "progn", + [eval_begin] = "begin", [eval_while] = "while", [eval_while_test] = "while_test", [eval_macro] = "macro", diff --git a/src/lisp/ao_lisp_stack.c b/src/lisp/ao_lisp_stack.c index af68b656..9d6cccc4 100644 --- a/src/lisp/ao_lisp_stack.c +++ b/src/lisp/ao_lisp_stack.c @@ -273,6 +273,6 @@ ao_lisp_do_call_cc(struct ao_lisp_cons *cons) cons->cdr = AO_LISP_NIL; v = ao_lisp_lambda_eval(); ao_lisp_stack->sexprs = v; - ao_lisp_stack->state = eval_progn; + ao_lisp_stack->state = eval_begin; return AO_LISP_NIL; } -- 2.30.2