diff options
Diffstat (limited to 'module/system/vm/debug.scm')
-rw-r--r-- | module/system/vm/debug.scm | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/module/system/vm/debug.scm b/module/system/vm/debug.scm index d5a4ac78f..6291e40cf 100644 --- a/module/system/vm/debug.scm +++ b/module/system/vm/debug.scm @@ -21,6 +21,7 @@ (define-module (system vm debug) #:use-module (system base pmatch) #:use-module (system base syntax) + #:use-module (system base language) #:use-module (system vm vm) #:use-module (system vm frame) #:use-module (ice-9 rdelim) @@ -139,6 +140,15 @@ #:per-line-prefix " ")) (lp (+ i inc) (or file last-file))))))) +(define (frame->module frame) + (let ((proc (frame-procedure frame))) + (if (program? proc) + (let* ((mod (or (program-module proc) (current-module ))) + (mod* (make-module))) + (module-use! mod* mod) + mod*) + (current-module)))) + ;;; ;;; Debugger @@ -289,6 +299,13 @@ With an argument, select a frame by index, then show it." (format #t "No such frame.~%")))) (else (show-frame)))) + (define-command ((commands repl r)) + "Run a new REPL in the context of the current frame." + (save-module-excursion + (lambda () + (set-current-module (frame->module cur)) + ((@ (system repl repl) start-repl))))) + (define-command ((commands procedure proc)) "Print the procedure for the selected frame." (print* (frame-procedure cur))) |