summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--debug.c33
2 files changed, 26 insertions, 12 deletions
diff --git a/ChangeLog b/ChangeLog
index 1a0f3910..81cdaa59 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2011-11-13 Kaz Kylheku <kaz@kylheku.com>
+ * debug.c (debug): Eliminated duplicate code.
+ Implemented better way of printing character context.
+
+2011-11-13 Kaz Kylheku <kaz@kylheku.com>
+
Adding a debugger. This is an experimental prototype.
* Makefile (OBJS): New object file debug.o.
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);