summaryrefslogtreecommitdiff
path: root/module/system/repl/common.scm
diff options
context:
space:
mode:
Diffstat (limited to 'module/system/repl/common.scm')
-rw-r--r--module/system/repl/common.scm86
1 files changed, 41 insertions, 45 deletions
diff --git a/module/system/repl/common.scm b/module/system/repl/common.scm
index 651bd5205..4bd8986a9 100644
--- a/module/system/repl/common.scm
+++ b/module/system/repl/common.scm
@@ -22,70 +22,66 @@
(define-module (system repl common)
:use-module (oop goops)
:use-syntax (system base syntax)
+ :use-module (system base compile)
:use-module (system base language)
:use-module (system vm core)
- :use-module (system vm trace)
- :export (make-repl repl-welcome repl-prompt repl-read repl-compile
- repl-eval repl-print repl-compile-file repl-load-file))
+ :use-module (system vm trace))
;;;
-;;; Repl
+;;; Repl type
;;;
-(define-vm-class <repl> ()
- vm language module value-count value-history tm-stats vm-stats gc-stats)
+(define-vm-class <repl> () env tm-stats vm-stats gc-stats)
-(define (make-repl lang)
- (let ((vm (the-vm)))
+(define-public (make-repl lang)
+ (let ((cenv (make-cenv :vm (the-vm)
+ :language (lookup-language lang)
+ :module (current-module))))
(make <repl>
- :vm vm
- :language (lookup-language lang)
- :module (current-module) ;; (global-ref 'user)
- :value-count 0
-; :value-history (make-vmodule)
+ :env cenv
:tm-stats (times)
- :vm-stats (vm-stats vm)
+ :vm-stats (vm-stats cenv.vm)
:gc-stats (gc-stats))))
-(define (repl-welcome repl)
+(define-public (repl-welcome repl)
(format #t "~A interpreter ~A on Guile ~A\n"
- repl.language.title repl.language.version (version))
+ repl.env.language.title repl.env.language.version (version))
(display "Copyright (C) 2001 Free Software Foundation, Inc.\n\n")
(display "Enter `,help' for help.\n"))
-(define (repl-prompt repl)
- (format #t "~A@~A> " repl.language.name 'guile)
- ;; (env-identifier repl.module))
- (force-output))
+(define-public (repl-prompt repl)
+ (let ((module-name (car (last-pair (module-name repl.env.module)))))
+ (format #t "~A@~A> " repl.env.language.name module-name)
+ (force-output)))
-(define (repl-read repl . args)
- (apply read-in repl.language args))
+(define-public (repl-read repl)
+ (repl.env.language.reader))
-(define (repl-compile repl form . opts)
- (apply compile-in form repl.module repl.language opts))
+(define-public (repl-compile repl form . opts)
+ (apply compile-in form repl.env.module repl.env.language opts))
-(define (repl-eval repl form)
- (let ((eval repl.language.evaluator))
+(define-public (repl-eval repl form)
+ (let ((eval repl.env.language.evaluator))
(if eval
- (eval form repl.module)
- (vm-load repl.vm (repl-compile repl form)))))
+ (eval form repl.env.module)
+ (vm-load repl.env.vm (repl-compile repl form)))))
-(define (repl-print repl val)
+(define-public (repl-print repl val)
(if (not (eq? val *unspecified*))
- (let* ((num (1+ repl.value-count))
- (sym (string->symbol (format #f "$~A" num))))
-; (vmodule-define repl.value-history sym val)
- (format #t "~A = " sym)
- (print-in val repl.language)
- (newline)
- (set! repl.value-count num))))
-
-(define (repl-compile-file repl file . opts)
- (apply compile-file-in file repl.language opts))
-
-(define (repl-load-file repl file . opts)
- (let ((bytes (apply repl-compile-file repl file opts)))
- (if (or (memq :b opts) (memq :r opts))
- (apply vm-trace repl.vm bytes opts)
- (vm-load repl.vm bytes))))
+ (begin
+ (repl.env.language.printer val)
+ (newline))))
+
+
+;;;
+;;; Utilities
+;;;
+
+(define-public (puts x) (display x) (newline))
+
+(define-public (->string x)
+ (object->string x display))
+
+(define-public (user-error msg . args)
+ (throw 'user-error #f msg args #f))