diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2021-09-03 07:01:03 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2021-09-03 07:01:03 -0700 |
commit | c8d5fd566e7acc5ed3f42d210d4f494efde0772b (patch) | |
tree | 51d85fd5cce309b9ca7fe14eb75a5a45821c4ede /eval.c | |
parent | 6cf10bb9919aa27735f7d13539aaa871400777e4 (diff) | |
download | txr-c8d5fd566e7acc5ed3f42d210d4f494efde0772b.tar.gz txr-c8d5fd566e7acc5ed3f42d210d4f494efde0772b.tar.bz2 txr-c8d5fd566e7acc5ed3f42d210d4f494efde0772b.zip |
load: new macros push-after-load and pop-after-load.
* eval.c (me_push_after_load, me_pop_after_load): New static
functions.
(eval_init): Register push-after-load and pop-after-load
intrinsic macros.
* tests/019/load-hook.tl: Tests for correct expansion.
* txr.1: Documented.
* stdlib/doc-syms.tl: Updated.
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 23 |
1 files changed, 23 insertions, 0 deletions
@@ -4579,6 +4579,25 @@ static val me_load_for(val form, val menv) return cons(rt_load_for_s, out); } +static val me_push_after_load(val form, val menv) +{ + (void) menv; + return list(set_s, + load_hooks_s, + list(cons_s, + cons(lambda_s, cons(nil, cdr(form))), + load_hooks_s, + nao), nao); +} + +static val me_pop_after_load(val form, val menv) +{ + (void) menv; + if (cdr(form)) + expand_error(form, lit("~s: no arguments required"), car(form), nao); + return list(set_s, load_hooks_s, list(cdr_s, load_hooks_s, nao), nao); +} + void run_load_hooks(val load_dyn_env) { val hooks_binding = lookup_var(load_dyn_env, load_hooks_s); @@ -6808,6 +6827,10 @@ void eval_init(void) reg_mac(intern(lit("mlet"), user_package), func_n2(me_mlet)); reg_mac(load_time_s, func_n2(me_load_time)); reg_mac(intern(lit("load-for"), user_package), func_n2(me_load_for)); + reg_mac(intern(lit("push-after-load"), user_package), + func_n2(me_push_after_load)); + reg_mac(intern(lit("pop-after-load"), user_package), + func_n2(me_pop_after_load)); reg_mac(intern(lit("assert"), user_package), func_n2(me_assert)); reg_fun(cons_s, func_n2(cons)); |