From e2118a041353a9d85e1c56051335f8ac0df101fd Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Sat, 21 Jan 2012 17:26:53 -0800 Subject: * debug.c (help): Added missing help for w command. (debug): In backtrace, show the renaming pairs for unbound variables (up_p_a_pairs) if they are present. * debug.h (debug_begin): Renamed to debug_frame. * eval.c (eval): Wrap debug_begin/debug_end around function dispatch, so TXR Lisp functions are included in backtraces. * match.c (h_fun): Follow rename of debug_begin to debug_frame. Pass in evaluated args, not the original ones. (v_fun): Likewise. * unwind.c (uw_push_debug): bindings argument renamed to env. Bugfix: args argument was being assigned to ub_p_a_pairs. * unwind.h (struct uw_debug): Member bindings renamed to env. (uw_push_debug): Declaration updated. --- ChangeLog | 21 +++++++++++++++++++++ debug.c | 10 ++++++++-- debug.h | 6 +++--- eval.c | 7 ++++--- match.c | 4 ++-- unwind.c | 6 +++--- unwind.h | 4 ++-- 7 files changed, 43 insertions(+), 15 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3d950fa0..7d308930 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,24 @@ +2012-01-21 Kaz Kylheku + + * debug.c (help): Added missing help for w command. + (debug): In backtrace, show the renaming pairs for unbound + variables (up_p_a_pairs) if they are present. + + * debug.h (debug_begin): Renamed to debug_frame. + + * eval.c (eval): Wrap debug_begin/debug_end around function dispatch, + so TXR Lisp functions are included in backtraces. + + * match.c (h_fun): Follow rename of debug_begin to debug_frame. + Pass in evaluated args, not the original ones. + (v_fun): Likewise. + + * unwind.c (uw_push_debug): bindings argument renamed to env. + Bugfix: args argument was being assigned to ub_p_a_pairs. + + * unwind.h (struct uw_debug): Member bindings renamed to env. + (uw_push_debug): Declaration updated. + 2012-01-21 Kaz Kylheku * debug.c (last_command): Do not initialize with lit(); diff --git a/debug.c b/debug.c index bad1c1d5..f7b74642 100644 --- a/debug.c +++ b/debug.c @@ -31,7 +31,8 @@ static void help(val stream) "c - continue f - finish form\n" "v - show variable binding environment s - show current form\n" "b - set breakpoint by line number i - show current data\n" - "d - delete breakpoint l - list breakpoints\n")); + "d - delete breakpoint w - backtrace\n" + "l - list breakpoints\n")); } static void show_bindings(val env, val stream) @@ -143,7 +144,12 @@ val debug(val form, val bindings, val data, val line, val chr) for (iter = uw_current_frame(); iter != 0; iter = iter->uw.up) { if (iter->uw.type == UW_DBG) { - format(std_output, lit("(~s ~s)\n"), iter->db.func, iter->db.args, nao); + if (iter->db.ub_p_a_pairs) + format(std_output, lit("(~s ~s ~s)\n"), iter->db.func, + iter->db.args, iter->db.ub_p_a_pairs, nao); + else + format(std_output, lit("(~s ~s)\n"), iter->db.func, + iter->db.args, nao); } } } diff --git a/debug.h b/debug.h index 935746da..cfa3c3ce 100644 --- a/debug.h +++ b/debug.h @@ -30,7 +30,7 @@ extern val debug_block_s; val debug(val form, val bindings, val data, val line, val chr); -#ifdef CONFIG_DEBUG_SUPPORT +#if CONFIG_DEBUG_SUPPORT #define debug_enter \ { \ @@ -58,7 +58,7 @@ INLINE val debug_check(val form, val bindings, val data, val line, val chr) void debug_init(void); -#define debug_begin(FUNC, ARGS, UBP, \ +#define debug_frame(FUNC, ARGS, UBP, \ BINDINGS, DATA, \ LINE, CHR) \ do { \ @@ -89,7 +89,7 @@ INLINE val debug_check(val form, val bindings, val data, val line, val chr) return nil; } -#define debug_begin(FUNC, ARGS, UBP, \ +#define debug_frame(FUNC, ARGS, UBP, \ BINDINGS, DATA, \ LINE, CHR) \ do { \ diff --git a/eval.c b/eval.c index 06a8d0f2..f2bc2b47 100644 --- a/eval.c +++ b/eval.c @@ -353,9 +353,10 @@ val eval(val form, val env, val ctx_form) val fbinding = lookup_fun(env, oper); if (fbinding) { - debug_return (apply(cdr(fbinding), - eval_args(rest(form), env, form), - form)); + val args = eval_args(rest(form), env, form); + debug_frame(oper, args, nil, env, nil, nil, nil); + debug_return (apply(cdr(fbinding), args, form)); + debug_end; } else { val entry = gethash(op_table, oper); diff --git a/match.c b/match.c index 47591669..66236781 100644 --- a/match.c +++ b/match.c @@ -1021,7 +1021,7 @@ static val h_fun(match_line_ctx c, match_line_ctx *cout) { uw_block_begin(nil, result); uw_env_begin; - debug_begin(sym, args, ub_p_a_pairs, c.bindings, c.dataline, c.data_lineno, c.pos); + debug_frame(sym, bindings_cp, ub_p_a_pairs, c.bindings, c.dataline, c.data_lineno, c.pos); result = match_line(ml_bindings_specline(c, bindings_cp, body)); @@ -3268,7 +3268,7 @@ static val v_fun(match_files_ctx *c) { uw_block_begin(nil, result); uw_env_begin; - debug_begin(sym, args, ub_p_a_pairs, c->bindings, if2(consp(c->data), car(c->data)), + debug_frame(sym, bindings_cp, ub_p_a_pairs, c->bindings, if2(consp(c->data), car(c->data)), c->data_lineno, nil); result = match_files(mf_spec_bindings(*c, body, bindings_cp)); debug_end; diff --git a/unwind.c b/unwind.c index 03ae0104..bb081994 100644 --- a/unwind.c +++ b/unwind.c @@ -158,14 +158,14 @@ val uw_set_match_context(val context) } void uw_push_debug(uw_frame_t *fr, val func, val args, - val ub_p_a_pairs, val bindings, val data, + val ub_p_a_pairs, val env, val data, val line, val chr) { fr->db.type = UW_DBG; fr->db.func = func; fr->db.args = args; - fr->db.ub_p_a_pairs = args; - fr->db.bindings = bindings; + fr->db.ub_p_a_pairs = ub_p_a_pairs; + fr->db.env = env; fr->db.data = data; fr->db.line = line; fr->db.chr = chr; diff --git a/unwind.h b/unwind.h index 03e43982..f9c69ad0 100644 --- a/unwind.h +++ b/unwind.h @@ -71,7 +71,7 @@ struct uw_debug { val func; val args; val ub_p_a_pairs; - val bindings; + val env; val data; val line; val chr; @@ -100,7 +100,7 @@ val uw_register_subtype(val sub, val super); val uw_exception_subtype_p(val sub, val sup); void uw_continue(uw_frame_t *curr, uw_frame_t *target); void uw_push_debug(uw_frame_t *, val func, val args, - val ub_p_a_pairs, val bindings, val data, + val ub_p_a_pairs, val env, val data, val line, val chr); void uw_pop_frame(uw_frame_t *); uw_frame_t *uw_current_frame(void); -- cgit v1.2.3