diff options
| -rw-r--r-- | geiser/emacs.scm | 38 | 
1 files changed, 21 insertions, 17 deletions
diff --git a/geiser/emacs.scm b/geiser/emacs.scm index d5e245b..147af7c 100644 --- a/geiser/emacs.scm +++ b/geiser/emacs.scm @@ -40,14 +40,12 @@    #:use-module (system base compile)    #:use-module ((geiser introspection) :renamer (symbol-prefix-proc 'ge:))) -(define (write-result result output) -  (write (list (cons 'result result) (cons 'output output))) -  (newline)) +(define (make-result result output) +  (list (cons 'result result) (cons 'output output))) -(define (write-error key args stack) -  (write (list (cons 'error (apply parse-error (cons key args))) -               (cons 'stack (parse-stack stack)))) -  (newline)) +(define (make-error key args stack) +  (list (cons 'error (apply parse-error (cons key args))) +        (cons 'stack (parse-stack stack))))  (define (parse-stack stack)    (if stack @@ -71,16 +69,22 @@    (let ((module (or (and (list? module-name)                           (resolve-module module-name))                      (current-module))) -        (captured-stack #f)) -    (catch #t -      (lambda () -        (let ((result #f)) -          (let ((output (with-output-to-string -                          (lambda () -                            (set! result (evaluator form module)))))) -            (write-result result output)))) -      (lambda (key . args) (write-error key args captured-stack)) -      (lambda (key . args) (set! captured-stack (make-stack #t)))))) +        (result #f) +        (captured-stack #f) +        (error #f)) +    (let ((output +           (with-output-to-string +             (lambda () +               (set! result +                     (catch #t +                       (lambda () +                         (start-stack 'id (evaluator form module))) +                       (lambda (key . args) +                         (set! error (make-error key args captured-stack))) +                       (lambda (key . args) +                         (set! captured-stack (make-stack #t 2 2))))))))) +      (write (or error (make-result result output))) +      (newline))))  (define (eval-compile form module)    (save-module-excursion  | 
