improve source loc info in nonlocal exits and backtraces
authorAndy Wingo <wingo@pobox.com>
Fri, 8 Aug 2008 10:55:57 +0000 (12:55 +0200)
committerAndy Wingo <wingo@pobox.com>
Fri, 8 Aug 2008 10:55:57 +0000 (12:55 +0200)
commitd0168f3da8b77e24ea8eafd9c74da35419a96668
treec959b37ddaa239270f81deb9f39eaa5f37a04cd5
parent81aae20202b46e58b315dbea6b12f277b222f035
improve source loc info in nonlocal exits and backtraces

* module/system/il/compile.scm (codegen): The currently-executing
  instruction is actually the one right before the instruction pointer;
  so for purposes of assv to find a source location for an ip, put the
  source after the code, as it was before.

* module/system/vm/debug.scm (vm-backtrace): Move more code to frame.scm.

* module/system/vm/frame.scm (make-frame-chain): Include all frames, even
  the bootstrap one. For a reentrant backtrace we'll have boostrap
  programs anyway. Probably should check for objcode[2] == scm_op_halt,
  to not show those frames in the trace.
  (frame-line-number, frame-file): New helpers.
  (print-frame): Print out the line number too.
  (frame-call-representation): Code from print-frame-call moved here.
  (print-frame-chain-as-backtrace): A backtrace printer, yays.
  (program-name): Check link validity before calling frame-address on it.

* module/system/vm/program.scm (source:addr, source:line, source:column)
  (source:file): New accessors for the elements of program-sources.

* module/system/vm/vm.scm (vm:last-ip): New export.
  (vm-last-frame-chain): Use vm:last-ip in making the frame chain.

* src/vm.h (struct scm_vm):
* src/vm.c (make_vm, scm_vm_last_ip, scm_vm_save_stack): Save the last
  instruction pointer when saving the stack. Really though, we should be
  saving all of the stack data on a spaghetti stack.

* src/vm_system.c (late-variable-ref): Pointless s/REGISTER/BEFORE_GC/.
module/system/il/compile.scm
module/system/vm/debug.scm
module/system/vm/frame.scm
module/system/vm/program.scm
module/system/vm/vm.scm
src/vm.c
src/vm.h
src/vm_system.c