diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2011-11-13 21:19:43 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2011-11-13 21:19:43 -0800 |
commit | 1232f5dbf8e68f9c3a7fe77360c0b950ecff3eac (patch) | |
tree | 18cb4ab7caf1d2b42139f98c80691e641a76efdd /unwind.h | |
parent | cc0f30f375914382e9e94e5bba26b14b2a734499 (diff) | |
download | txr-1232f5dbf8e68f9c3a7fe77360c0b950ecff3eac.tar.gz txr-1232f5dbf8e68f9c3a7fe77360c0b950ecff3eac.tar.bz2 txr-1232f5dbf8e68f9c3a7fe77360c0b950ecff3eac.zip |
Adding a debugger. This is an experimental prototype.
* Makefile (OBJS): New object file debug.o.
* dep.mk: Updated.
* match.c (h_fun): Use debug_begin and debug_end macros
to set up a debug frame for backtracing.
(match_line, match_files): Call debug_check to give debugger a chance
to instrument call.
(v_fun): Use debug_begin and debug_end macros to set up a debug frame
for backtracing. Call debug_check to give debugger a chance to
instrument call.
* stream.c (struct strm_ops): New function pointer, flush.
(stdio_maybe_write_error): Wrong word in error message corrected.
(stdio_flush): New static function.
(stdio_ops, pipe_ops): New function entered into tables.
(flush_stream): New function.
* stream.h (flush_stream): Declared.
* txr.c (help): New options documented.
(main): call to debug_init added. New debug options parsed and
opt_debugger set accordingly.
* unwind.c (uw_push_debug, uw_current_frame): New function.
* unwind.h (uw_frtype): New enumeration member UW_DBG.
(struct uw_debug): New frame variant.
(union uw_frame): New member, db.
(uw_push_debug, uw_current_frame): Declared,
* debug.c: New file.
* debug.h: New file.
Diffstat (limited to 'unwind.h')
-rw-r--r-- | unwind.h | 19 |
1 files changed, 18 insertions, 1 deletions
@@ -31,7 +31,7 @@ #endif typedef union uw_frame uw_frame_t; -typedef enum uw_frtype { UW_BLOCK, UW_ENV, UW_CATCH } uw_frtype_t; +typedef enum uw_frtype { UW_BLOCK, UW_ENV, UW_CATCH, UW_DBG } uw_frtype_t; struct uw_common { uw_frame_t *up; @@ -65,11 +65,24 @@ struct uw_catch { jmp_buf jb; }; +struct uw_debug { + uw_frame_t *up; + uw_frtype_t type; + val func; + val args; + val ub_p_a_pairs; + val bindings; + val data; + val line; + val chr; +}; + union uw_frame { struct uw_common uw; struct uw_block bl; struct uw_dynamic_env ev; struct uw_catch ca; + struct uw_debug db; }; void uw_push_block(uw_frame_t *, val tag); @@ -86,7 +99,11 @@ noreturn val uw_errorf(val fmt, ...); 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 line, val chr); void uw_pop_frame(uw_frame_t *); +uw_frame_t *uw_current_frame(void); void uw_init(void); noreturn val type_mismatch(val, ...); |