From b7bdc308cd6ce4dd4d3dd68c16eec792652f8c39 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Sat, 21 Jan 2012 00:59:38 -0800 Subject: Improved debugging. Debug nesting depth counter maintained and used for next/step/finish stepping. * Makefile (OBJS): debug.o moved to OBJS-y or OBJS-. (OBJS-y, OBJS-): New variables. $(PROG): Depends on OBJS-y also. clean: clean $(OBJS-y). depend: include $(OBJS-y) in dependency generation. * configure: Underscores and dashes are interchangeable in configure variables. (yaccname_given, yacc_given): Default value is y, not yes. (debug_support): New config variable. (CONFIG_DEBUG_SUPPORT): New config.h symbol. * debug.c (debug_depth): New global variable. (debug_block_s): New symbol variable. (next_depth): New static variable. (debug): Renamed some commands. Introduced separate next, step and finish. (debug_init): debug_block_s initialized. * debug.h (debug_depth, debug_block_s): Declared. (debug_enter, debug_leave, debug_return): New macros. (debug_check, debug_init): Conditionally defined based on if this is a debug build. * dep.mk: Regenerated. * eval.c (eval): Instrumented with debug_enter, debug_leave, debug_return. * match.c (match_line, v_fun, match_files): Likewise. * txr.c (txr_main): Bail if -d or --debug used in build that lacks debug support. --- eval.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) (limited to 'eval.c') diff --git a/eval.c b/eval.c index 0dbe952c..06a8d0f2 100644 --- a/eval.c +++ b/eval.c @@ -326,18 +326,20 @@ static val eval_intrinsic(val form, val env) val eval(val form, val env, val ctx_form) { + debug_enter; + type_check(env, ENV); debug_check(consp(form) ? form : ctx_form, env, nil, nil, nil); if (nullp(form)) { - return nil; + debug_return (nil); } else if (symbolp(form)) { if (!bindable(form)) { - return form; + debug_return (form); } else { val binding = lookup_var(env, form); if (binding) - return cdr(binding); + debug_return (cdr(binding)); eval_error(ctx_form, lit("unbound variable ~s"), form, nao); abort(); } @@ -345,15 +347,15 @@ val eval(val form, val env, val ctx_form) val oper = car(form); if (regexp(oper)) - return oper; + debug_return (oper); { val fbinding = lookup_fun(env, oper); if (fbinding) { - return apply(cdr(fbinding), - eval_args(rest(form), env, form), - form); + debug_return (apply(cdr(fbinding), + eval_args(rest(form), env, form), + form)); } else { val entry = gethash(op_table, oper); @@ -362,13 +364,15 @@ val eval(val form, val env, val ctx_form) abort(); } else { opfun_t fp = (opfun_t) cptr_get(entry); - return fp(form, env); + debug_return (fp(form, env)); } } } } else { - return form; + debug_return (form); } + + debug_leave; } val bindable(val obj) -- cgit v1.2.3