diff options
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 15 |
1 files changed, 15 insertions, 0 deletions
@@ -1775,6 +1775,17 @@ static val op_defsymacro(val form, val env) static val op_defmacro(val form, val env); +void trace_check(val name) +{ + if (trace_loaded) { + val trcheck = lookup_fun(nil, + intern(lit("trace-redefine-check"), + system_package)); + if (trcheck) + funcall1(cdr(trcheck), name); + } +} + static val op_defun(val form, val env) { val args = rest(form); @@ -1782,6 +1793,8 @@ static val op_defun(val form, val env) val params = second(args); val body = rest(rest(args)); + trace_check(name); + if (!consp(name)) { val block = cons(block_s, cons(name, body)); val fun = cons(name, cons(params, cons(block, nil))); @@ -1858,6 +1871,8 @@ static val op_defmacro(val form, val env) if (gethash(op_table, name)) eval_error(form, lit("defmacro: ~s is a special operator"), name, nao); + trace_check(name); + /* defmacro captures lexical environment, so env is passed */ sethash(top_mb, name, rlcp_tree(cons(name, func_f2(cons(env, cons(params, cons(block, nil))), |