diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | debug.c | 33 |
2 files changed, 26 insertions, 12 deletions
@@ -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. @@ -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); |