1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-20 11:40:18 +02:00

remove repl-vm; repl evaluation does not cause recursive vm invocation

* module/system/repl/common.scm (<repl>): Remove "vm" field and repl-vm
  accessor. I think the correct model is to just use the-vm. This change
  was prompted by the need to have the REPL itself not cause a recursive
  VM invocation, so that captured prompts at the REPL are rewindable.
  (make-repl): Remove treatment of #:vm.
  (repl-eval): Load a compiled expression as a simple thunk, avoiding a
  recursive VM call.

* module/system/repl/command.scm (profile, trace): Remove repl-vm
  treatment.
  (backtrace, debugger, step): Remove, as they were not implemented.
This commit is contained in:
Andy Wingo 2010-03-12 12:10:23 +01:00
parent 32ce4058db
commit 01c0082fae
2 changed files with 17 additions and 33 deletions

View file

@ -28,7 +28,6 @@
#:use-module (system vm program)
#:use-module (system vm vm)
#:autoload (system base language) (lookup-language language-reader)
#:autoload (system vm debug) (vm-debugger vm-backtrace)
#:autoload (system vm trace) (vm-trace)
#:autoload (system vm profile) (vm-profile)
#:use-module (ice-9 format)
@ -51,7 +50,7 @@
(compile (compile c) (compile-file cc)
(disassemble x) (disassemble-file xx))
(profile (time t) (profile pr))
(debug (backtrace bt) (debugger db) (trace tr) (step st))
(debug (trace tr))
(system (gc) (statistics stat))))
(define (group-name g) (car g))
@ -358,9 +357,9 @@ Time execution."
"profile FORM
Profile execution."
;; FIXME opts
(let ((vm (repl-vm repl))
(proc (make-program (repl-compile repl (repl-parse repl form)))))
(apply statprof (lambda () (vm-apply vm proc '())) opts)))
(apply statprof
(make-program (repl-compile repl (repl-parse repl form)))
opts))
@ -368,29 +367,15 @@ Profile execution."
;;; Debug commands
;;;
(define-meta-command (backtrace repl)
"backtrace
Display backtrace."
(vm-backtrace (repl-vm repl)))
(define-meta-command (debugger repl)
"debugger
Start debugger."
(vm-debugger (repl-vm repl)))
(define-meta-command (trace repl form . opts)
(define-meta-command (trace repl (form) . opts)
"trace FORM
Trace execution."
;; FIXME: doc options, or somehow deal with them better
(apply vm-trace
(repl-vm repl)
(the-vm)
(make-program (repl-compile repl (repl-parse repl form)))
opts))
(define-meta-command (step repl)
"step FORM
Step execution."
(display "Not implemented yet\n"))
;;;

View file

@ -22,9 +22,9 @@
#:use-module (system base syntax)
#:use-module (system base compile)
#:use-module (system base language)
#:use-module (system vm vm)
#:use-module (system vm program)
#:use-module (ice-9 control)
#:export (<repl> make-repl repl-vm repl-language repl-options
#:export (<repl> make-repl repl-language repl-options
repl-tm-stats repl-gc-stats
repl-welcome repl-prompt repl-read repl-compile repl-eval
repl-parse repl-print repl-option-ref repl-option-set!
@ -35,7 +35,7 @@
;;; Repl type
;;;
(define-record/keywords <repl> vm language options tm-stats gc-stats)
(define-record/keywords <repl> language options tm-stats gc-stats)
(define repl-default-options
'((trace . #f)
@ -43,8 +43,7 @@
(define %make-repl make-repl)
(define (make-repl lang)
(%make-repl #:vm (the-vm)
#:language (lookup-language lang)
(%make-repl #:language (lookup-language lang)
#:options repl-default-options
#:tm-stats (times)
#:gc-stats (gc-stats)))
@ -77,13 +76,13 @@
(if parser (parser form) form)))
(define (repl-eval repl form)
(let ((eval (language-evaluator (repl-language repl))))
(if (and eval
(or (null? (language-compilers (repl-language repl)))
(assq-ref (repl-options repl) 'interp)))
(% (eval form (current-module)))
(let ((compiled (repl-compile repl form '())))
(% (vm-load (repl-vm repl) compiled))))))
(let* ((eval (language-evaluator (repl-language repl)))
(thunk (if (and eval
(or (null? (language-compilers (repl-language repl)))
(assq-ref (repl-options repl) 'interp)))
(lambda () (eval form (current-module)))
(make-program (repl-compile repl form '())))))
(% (thunk))))
(define (repl-print repl val)
(if (not (eq? val *unspecified*))