diff options
| -rw-r--r-- | geiser/emacs.scm | 46 | 
1 files changed, 20 insertions, 26 deletions
| diff --git a/geiser/emacs.scm b/geiser/emacs.scm index 3c66eb2..382958d 100644 --- a/geiser/emacs.scm +++ b/geiser/emacs.scm @@ -58,26 +58,34 @@            (cons 'msg (if msg (apply format (cons #f (cons msg margs))) '()))            (cons 'rest (or rest '()))))) -(define (ge:eval form module-name) -  "Evals @var{form} in the module designated by @var{module-name}. -If @var{module-name} is @var{#f} or resolution fails, the current module is used instead. -The result is a list of the form ((RESULT . <form-value>) (OUTPUT . <string>)) -if no evaluation error happens, or ((ERROR (KEY . <error-key>) <error-arg>...)) -in case of errors. Each error arg is a cons (NAME . VALUE), where NAME includes -SUBR, MSG and REST." +(define (evaluate form module evaluator)    (let ((module (or (and (list? module-name)                           (resolve-module module-name))                      (current-module))))      (catch #t        (lambda ()          (let ((result #f)) -          (let ((output -                 (with-output-to-string -                   (lambda () -                     (set! result (eval form module)))))) +          (let ((output (with-output-to-string +                          (lambda () +                            (set! result (evaluator form module))))))              (write-result result output))))        write-error))) +(define (eval-compile form module) +  (save-module-excursion +   (lambda () +     (set-current-module module) +     (compile form)))) + +(define (ge:eval form module-name) +  "Evals @var{form} in the module designated by @var{module-name}. +If @var{module-name} is @var{#f} or resolution fails, the current module is used instead. +The result is a list of the form ((RESULT . <form-value>) (OUTPUT . <string>)) +if no evaluation error happens, or ((ERROR (KEY . <error-key>) <error-arg>...)) +in case of errors. Each error arg is a cons (NAME . VALUE), where NAME includes +SUBR, MSG and REST." +  (evaluate form module-name eval)) +  (define (ge:compile form module-name)    "Compiles @var{form} in the module designated by @var{module-name}.  If @var{module-name} is @var{#f} or resolution fails, the current module is used instead. @@ -85,21 +93,7 @@ The result is a list of the form ((RESULT . <form-value>) (OUTPUT . <string>))  if no evaluation error happens, or ((ERROR (KEY . <error-key>) <error-arg>...))  in case of errors. Each error arg is a cons (NAME . VALUE), where NAME includes  SUBR, MSG and REST." -  (let ((module (or (and (list? module-name) -                         (resolve-module module-name)) -                    (current-module)))) -    (catch #t -      (lambda () -        (let ((result #f)) -          (let ((output -                 (with-output-to-string -                   (lambda () -                     (save-module-excursion -                      (lambda () -                        (set-current-module module) -                        (set! result (compile form)))))))) -            (write-result result output)))) -      write-error))) +  (evaluate form module-name eval-compile))  (define (ge:compile-file path)    "Compile and load file, given its full @var{path}." | 
