remove repl-vm; repl evaluation does not cause recursive vm invocation
authorAndy Wingo <wingo@pobox.com>
Fri, 12 Mar 2010 11:10:23 +0000 (12:10 +0100)
committerAndy Wingo <wingo@pobox.com>
Fri, 12 Mar 2010 11:10:23 +0000 (12:10 +0100)
* 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.

module/system/repl/command.scm
module/system/repl/common.scm

index ae8568a..67feeb1 100644 (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))
 
 
 \f
@@ -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"))
 
 \f
 ;;;
index e3dc0c4..c760c89 100644 (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)))
     (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*))