summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJose Antonio Ortega Ruiz <jao@gnu.org>2010-11-12 01:33:09 +0100
committerJose Antonio Ortega Ruiz <jao@gnu.org>2010-11-12 01:33:09 +0100
commitfa4e0bc54a0c6cf21efd7d74bf82dca97fb96b6c (patch)
treeb25c6e5da21dab09175a4b7559a8b2eff5f90519
parent57e300954933f7b1b0672d8ebc9049202d3948b0 (diff)
downloadgeiser-guile-fa4e0bc54a0c6cf21efd7d74bf82dca97fb96b6c.tar.gz
geiser-guile-fa4e0bc54a0c6cf21efd7d74bf82dca97fb96b6c.tar.bz2
Guile reconnected (but not debuggable (yet))
Or the importance of EOL. Switching to a transaction queue for communication with the Scheme process means that i had to care about sending eols in the queries... Guile was waiting for ever reading a metacommand taking a variable number of arguments. Argh: this has taken me a few hours -- i'm getting old.
-rw-r--r--geiser/emacs.scm23
-rw-r--r--geiser/evaluation.scm18
2 files changed, 21 insertions, 20 deletions
diff --git a/geiser/emacs.scm b/geiser/emacs.scm
index 54e5d34..9e3d410 100644
--- a/geiser/emacs.scm
+++ b/geiser/emacs.scm
@@ -13,6 +13,7 @@
#:use-module (ice-9 match)
#:use-module (system repl command)
#:use-module (system repl error-handling)
+ #:use-module (system repl server)
#:use-module (geiser evaluation)
#:use-module ((geiser modules) :renamer (symbol-prefix-proc 'ge:))
#:use-module ((geiser completion) :renamer (symbol-prefix-proc 'ge:))
@@ -26,8 +27,13 @@
No-op command used internally by Geiser."
(values))
+(define-meta-command ((geiser-newline geiser) repl)
+ "geiser-newline
+Meta-command used by Geiser to emit a new line."
+ (newline))
+
(define-meta-command ((geiser-eval geiser) repl (mod form args) . rest)
- "geiser-eval
+ "geiser-eval module form args ()
Meta-command used by Geiser to evaluate and compile code."
(if (null? args)
(call-with-error-handling
@@ -36,12 +42,17 @@ Meta-command used by Geiser to evaluate and compile code."
(ge:eval `(,proc ,@args) mod))))
(define-meta-command ((geiser-load-file geiser) repl file)
- "geiser-load-file
+ "geiser-load-file file
Meta-command used by Geiser to load and compile files."
(call-with-error-handling
(lambda () (ge:compile-file file))))
-(define-meta-command ((geiser-newline geiser) repl)
- "geiser-newline
-Meta-command used by Geiser to emit a new line."
- (newline))
+
+(define-meta-command ((geiser-start-server geiser) repl)
+ "geiser-start-server
+Meta-command used by Geiser to start a REPL server."
+ (let* ((sock (make-tcp-server-socket #:port 0))
+ (port (sockaddr:port (getsockname sock))))
+ (spawn-server sock)
+ (write (list 'port port))
+ (newline)))
diff --git a/geiser/evaluation.scm b/geiser/evaluation.scm
index ef082db..305ccfd 100644
--- a/geiser/evaluation.scm
+++ b/geiser/evaluation.scm
@@ -25,20 +25,6 @@
#:use-module (system vm program)
#:use-module (ice-9 pretty-print))
-(define (handle-error stack . args)
- (pmatch args
- ((,key ,subr ,msg ,args . ,rest)
- (display "Backtrace:\n")
- (if (stack? stack)
- (display-backtrace stack (current-output-port)))
- (newline)
- (display-error stack (current-output-port) subr msg args rest))
- (else (display (format "ERROR: ~a, args: ~a" (car args) (cdr args)))))
- `(error (key . ,(car args))))
-
-(define (write-result result output)
- (write (list (cons 'result result) (cons 'output output)))
- (newline))
(define compile-opts '())
(define compile-file-opts '())
@@ -62,6 +48,10 @@
(ge:set-warnings 'none)
+(define (write-result result output)
+ (write (list (cons 'result result) (cons 'output output)))
+ (newline))
+
(define (call-with-result thunk)
(letrec* ((result #f)
(output