Fix ecl_print, and new GDB function ecl_eval.
authorPhilipp Marek <philipp@marek.priv.at>
Thu, 27 Feb 2014 15:35:22 +0000 (16:35 +0100)
committerPhilipp Marek <philipp@marek.priv.at>
Thu, 27 Feb 2014 15:35:22 +0000 (16:35 +0100)
Used like this:
    (gdb) ecl_eval cl::*package*

src/util/gdbinit

index 25ea8cf..58e259d 100644 (file)
@@ -20,19 +20,33 @@ macro define NIL (cl_symbols)
 macro define T (cl_symbols+1)
 
 define ecl_print
+       set $cl_debug_arg = (long)($arg0)
+       print $cl_debug_arg
        set $cl_debug_stream = ecl_make_string_output_stream(4096, 0)
 
-       #set $cl_debug_void = ecl_princ( $arg0, $cl_debug_stream)
-       #print $cl_debug_stream->stream.object0->base_string.self
-       #set $cl_debug_stream->stream.object0->base_string.fillp = 0
-
-       set $cl_debug_imm = 3 & (long)$arg0
-       set $cl_debug_type = ($cl_debug_imm ? $cl_debug_imm : $arg0->d.t)
+       set $cl_debug_imm = 3 & $cl_debug_arg
+       set $cl_debug_type = ($cl_debug_imm ? $cl_debug_imm : ((cl_object)$cl_debug_arg)->d.t)
        print (cl_type) $cl_debug_type
 
        # not safe for printing
        if $cl_debug_type > 0
-           set $cl_debug_void = si_write_ugly_object( $arg0, $cl_debug_stream)
+           set $cl_debug_void = si_write_ugly_object( $cl_debug_arg, $cl_debug_stream)
+           print $cl_debug_stream->stream.object0->base_string.self
+
+           set $cl_debug_stream->stream.object0->base_string.fillp = 0
+           set $cl_debug_void = ecl_princ( $cl_debug_arg, $cl_debug_stream)
+           # ensure string is terminated
+           set $cl_debug_stream->stream.object0->base_string.self[$cl_debug_stream->stream.object0->base_string.fillp] = 0
            print $cl_debug_stream->stream.object0->base_string.self
        end
 end
+
+
+define ecl_eval
+       set $cl_debug_str = ecl_make_simple_base_string( "$arg0", -1)
+       set $cl_debug_stream = ecl_make_string_input_stream( $cl_debug_str, 0, ((struct ecl_base_string*)$cl_debug_str)->fillp)
+       set $cl_debug_form = cl_read(1, $cl_debug_stream)
+       disable breakpoints
+       ecl_print cl_eval($cl_debug_form)
+       enable breakpoints
+end