diff options
-rw-r--r-- | eval.c | 28 | ||||
-rw-r--r-- | eval.h | 1 | ||||
-rw-r--r-- | unwind.c | 26 |
3 files changed, 28 insertions, 27 deletions
@@ -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)); @@ -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); @@ -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), |