summaryrefslogtreecommitdiffstats
path: root/debug.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2011-11-13 22:07:32 -0800
committerKaz Kylheku <kaz@kylheku.com>2011-11-13 22:07:32 -0800
commita8be305b735b4d5c96cdcc4fbbfd5825a4b2194b (patch)
treef4b51ac42fb7b4bd9e658bcb086855837d40173c /debug.c
parent1232f5dbf8e68f9c3a7fe77360c0b950ecff3eac (diff)
downloadtxr-a8be305b735b4d5c96cdcc4fbbfd5825a4b2194b.tar.gz
txr-a8be305b735b4d5c96cdcc4fbbfd5825a4b2194b.tar.bz2
txr-a8be305b735b4d5c96cdcc4fbbfd5825a4b2194b.zip
* debug.c (debug): Eliminated duplicate code.
Implemented better way of printing character context.
Diffstat (limited to 'debug.c')
-rw-r--r--debug.c33
1 files changed, 21 insertions, 12 deletions
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);