summaryrefslogtreecommitdiff
path: root/module/system/vm/debug.scm
diff options
context:
space:
mode:
Diffstat (limited to 'module/system/vm/debug.scm')
-rw-r--r--module/system/vm/debug.scm17
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)))