From a8be305b735b4d5c96cdcc4fbbfd5825a4b2194b Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Sun, 13 Nov 2011 22:07:32 -0800 Subject: * debug.c (debug): Eliminated duplicate code. Implemented better way of printing character context. --- ChangeLog | 5 +++++ debug.c | 33 +++++++++++++++++++++------------ 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1a0f3910..81cdaa59 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2011-11-13 Kaz Kylheku + + * debug.c (debug): Eliminated duplicate code. + Implemented better way of printing character context. + 2011-11-13 Kaz Kylheku Adding a debugger. This is an experimental prototype. diff --git a/debug.c b/debug.c index f5c74188..35e1e831 100644 --- a/debug.c +++ b/debug.c @@ -30,15 +30,29 @@ val debug(val form, val bindings, val data, val line, val chr) if (!step_mode && !memqual(lineno, breakpoints)) { return nil; } else { - format(std_output, lit("stopped at line ~a\n"), lineno, nao); - format(std_output, lit("form: ~s\n"), form, nao); - format(std_output, lit("data (~s):\n~s\n"), line, data, nao); - if (chr) - format(std_output, lit("(character ~s)\n"), chr, nao); + val print_form = t; + val print_data = t; for (;;) { val input, command; + if (print_form) { + format(std_output, lit("stopped at line ~a\n"), lineno, nao); + format(std_output, lit("form: ~s\n"), form, nao); + } + + if (print_data) { + if (data && chr) { + val prefix = sub_str(data, zero, chr); + val suffix = sub_str(data, chr, nil); + + format(std_output, lit("data (~s:~s):\n~s . ~s\n"), + line, chr, prefix, suffix, nao); + } else { + format(std_output, lit("data (~s):\n~s\n"), line, data, nao); + } + } + format(std_output, lit("txr> "), nao); flush_stream(std_output); @@ -58,14 +72,9 @@ val debug(val form, val bindings, val data, val line, val chr) } else if (equal(command, lit("v"))) { format(std_output, lit("bindings: ~s\n"), bindings, nao); } else if (equal(command, lit("f"))) { - format(std_output, lit("stopped at line ~a\n"), lineno, nao); - format(std_output, lit("form: ~s\n"), form, nao); + print_form = t; } else if (equal(command, lit("d"))) { - if (data) { - format(std_output, lit("data (~s):\n~s\n"), line, data, nao); - if (chr) - format(std_output, lit("(character ~s)\n"), chr, nao); - } + print_data = t; } else if (equal(command, lit("b")) || equal(command, lit("d"))) { if (!rest(input)) { format(std_output, lit("b needs argument\n"), nao); -- cgit v1.2.3