summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--eval.c28
-rw-r--r--eval.h1
-rw-r--r--unwind.c26
3 files changed, 28 insertions, 27 deletions
diff --git a/eval.c b/eval.c
index 1f3a22f3..ba6b99fc 100644
--- a/eval.c
+++ b/eval.c
@@ -3511,17 +3511,6 @@ val load(val target)
return nil;
}
-static val me_defex(val form, val menv)
-{
- val types = cdr(form);
-
- if (!all_satisfy(types, func_n1(symbolp), nil))
- eval_error(form, lit("defex: arguments must all be symbols"), nao);
-
- return cons(intern(lit("register-exception-subtypes"), user_package),
- mapcar(curry_12_2(list_f, quote_s), types));
-}
-
static val expand_catch_clause(val form, val menv)
{
val sym = first(form);
@@ -4612,13 +4601,6 @@ static val force(val promise)
}
}
-static val register_exception_subtypes(struct args *args)
-{
- val types = args_copy_to_list(args);
- reduce_left(func_n2(uw_register_subtype), types, nil, nil);
- return nil;
-}
-
static void reg_op(val sym, opfun_t fun)
{
assert (sym != 0);
@@ -4632,7 +4614,7 @@ void reg_fun(val sym, val fun)
sethash(builtin, sym, defun_s);
}
-static void reg_mac(val sym, val fun)
+void reg_mac(val sym, val fun)
{
assert (sym != 0);
sethash(top_mb, sym, cons(sym, fun));
@@ -5051,7 +5033,6 @@ void eval_init(void)
reg_mac(intern(lit("dotimes"), user_package), func_n2(me_dotimes));
reg_mac(intern(lit("lcons"), user_package), func_n2(me_lcons));
reg_mac(intern(lit("mlet"), user_package), func_n2(me_mlet));
- reg_mac(intern(lit("defex"), user_package), func_n2(me_defex));
reg_fun(cons_s, func_n2(cons));
reg_fun(intern(lit("make-lazy-cons"), user_package), func_n1(make_lazy_cons));
reg_fun(intern(lit("lcons-fun"), user_package), func_n1(lcons_fun));
@@ -5564,13 +5545,6 @@ void eval_init(void)
reg_fun(intern(lit("comb"), user_package), func_n2(comb));
reg_fun(intern(lit("rcomb"), user_package), func_n2(rcomb));
- reg_fun(throw_s, func_n1v(uw_throwv));
- reg_fun(intern(lit("throwf"), user_package), func_n2v(uw_throwfv));
- reg_fun(error_s, func_n1v(uw_errorfv));
- reg_fun(intern(lit("register-exception-subtypes"), user_package),
- func_n0v(register_exception_subtypes));
- reg_fun(intern(lit("exception-subtype-p"), user_package),
- func_n2(uw_exception_subtype_p));
reg_fun(intern(lit("return*"), user_package), func_n2o(return_star, 1));
reg_fun(intern(lit("abscond*"), system_package), func_n2o(abscond_star, 1));
diff --git a/eval.h b/eval.h
index ca532478..d03cb490 100644
--- a/eval.h
+++ b/eval.h
@@ -61,6 +61,7 @@ val func_get_name(val fun, val env);
void reg_varl(val sym, val val);
void reg_var(val sym, val val);
void reg_fun(val sym, val fun);
+void reg_mac(val sym, val fun);
val set_get_symacro(val sym, val form);
val apply(val fun, val arglist);
val apply_intrinsic(val fun, val args);
diff --git a/unwind.c b/unwind.c
index 9377fdd3..a79a69bd 100644
--- a/unwind.c
+++ b/unwind.c
@@ -693,6 +693,24 @@ val uw_register_subtype(val sub, val sup)
return sup;
}
+static val register_exception_subtypes(struct args *args)
+{
+ val types = args_copy_to_list(args);
+ reduce_left(func_n2(uw_register_subtype), types, nil, nil);
+ return nil;
+}
+
+static val me_defex(val form, val menv)
+{
+ val types = cdr(form);
+
+ if (!all_satisfy(types, func_n1(symbolp), nil))
+ eval_error(form, lit("defex: arguments must all be symbols"), nao);
+
+ return cons(intern(lit("register-exception-subtypes"), user_package),
+ mapcar(curry_12_2(list_f, quote_s), types));
+}
+
void uw_continue(uw_frame_t *cont)
{
uw_exit_point = cont;
@@ -941,8 +959,16 @@ void uw_late_init(void)
frame_type, nil,
list(types_s, fun_s, nao),
nil, nil, nil, nil);
+ reg_mac(intern(lit("defex"), user_package), func_n2(me_defex));
reg_var(unhandled_hook_s = intern(lit("*unhandled-hook*"),
user_package), nil);
+ reg_fun(throw_s, func_n1v(uw_throwv));
+ reg_fun(intern(lit("throwf"), user_package), func_n2v(uw_throwfv));
+ reg_fun(error_s, func_n1v(uw_errorfv));
+ reg_fun(intern(lit("register-exception-subtypes"), user_package),
+ func_n0v(register_exception_subtypes));
+ reg_fun(intern(lit("exception-subtype-p"), user_package),
+ func_n2(uw_exception_subtype_p));
reg_fun(intern(lit("get-frames"), user_package), func_n0(uw_get_frames));
reg_fun(intern(lit("find-frame"), user_package), func_n2o(uw_find_frame, 0));
reg_fun(intern(lit("invoke-catch"), user_package),