diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2011-12-07 08:04:54 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2011-12-07 08:04:54 -0800 |
commit | 7c413d6aa3ab8e0ba59c5ab243effeb6cd9b68d1 (patch) | |
tree | a548c3b4bc99fd71ead2c33c7ecf2f6e479b0938 /eval.c | |
parent | 7bf14da873daab72ade5de8235ceee4cdedf5a16 (diff) | |
download | txr-7c413d6aa3ab8e0ba59c5ab243effeb6cd9b68d1.tar.gz txr-7c413d6aa3ab8e0ba59c5ab243effeb6cd9b68d1.tar.bz2 txr-7c413d6aa3ab8e0ba59c5ab243effeb6cd9b68d1.zip |
* eval.c (progn_s): New symbol variable.
(op_progn): New static function.
(eval_init): Initialize new variable, register progn operator.
* txr.1: progn documented.
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 9 |
1 files changed, 8 insertions, 1 deletions
@@ -50,7 +50,7 @@ val top_vb, top_fb; val op_table; val eval_error_s; -val let_s, let_star_s, lambda_s, call_s; +val progn_s, let_s, let_star_s, lambda_s, call_s; val cond_s, if_s, and_s, or_s, defvar_s, defun_s; val inc_s, dec_s, push_s, pop_s, gethash_s, car_s, cdr_s; val for_s, for_star_s, dohash_s, uw_protect_s, return_s, return_from_s; @@ -400,6 +400,11 @@ static val bindings_helper(val vars, val env, val sequential, val ctx_form) return new_bindings; } +static val op_progn(val form, val env) +{ + return eval_progn(rest(form), env, form); +} + static val op_let(val form, val env) { val let = first(form); @@ -992,6 +997,7 @@ void eval_init(void) top_vb = make_hash(t, nil, nil); op_table = make_hash(nil, nil, nil); + progn_s = intern(lit("progn"), user_package); let_s = intern(lit("let"), user_package); let_star_s = intern(lit("let*"), user_package); lambda_s = intern(lit("lambda"), user_package); @@ -1025,6 +1031,7 @@ void eval_init(void) sethash(op_table, qquote_s, cptr((mem_t *) op_qquote_error)); sethash(op_table, unquote_s, cptr((mem_t *) op_unquote_error)); sethash(op_table, splice_s, cptr((mem_t *) op_unquote_error)); + sethash(op_table, progn_s, cptr((mem_t *) op_progn)); sethash(op_table, let_s, cptr((mem_t *) op_let)); sethash(op_table, let_star_s, cptr((mem_t *) op_let)); sethash(op_table, lambda_s, cptr((mem_t *) op_lambda)); |