diff options
author | Jose Antonio Ortega Ruiz <jao@gnu.org> | 2010-09-07 00:22:52 +0200 |
---|---|---|
committer | Jose Antonio Ortega Ruiz <jao@gnu.org> | 2010-09-07 00:22:52 +0200 |
commit | 3a80209b93ef0b7f9bad0fbce2d976c6b5b89e5f (patch) | |
tree | 2f74c05b4ab65b15d9b1e5bd130d1da8dab557b5 | |
parent | 7ecebbc06fdedf20bcad07e0740214feb197a4d1 (diff) | |
download | geiser-guile-3a80209b93ef0b7f9bad0fbce2d976c6b5b89e5f.tar.gz geiser-guile-3a80209b93ef0b7f9bad0fbce2d976c6b5b89e5f.tar.bz2 |
Guile: evaluation warnings
-rw-r--r-- | geiser/evaluation.scm | 49 |
1 files changed, 31 insertions, 18 deletions
diff --git a/geiser/evaluation.scm b/geiser/evaluation.scm index a0007c4..aba0cfe 100644 --- a/geiser/evaluation.scm +++ b/geiser/evaluation.scm @@ -19,6 +19,7 @@ #:use-module (srfi srfi-1) #:use-module (language tree-il) #:use-module (system base compile) + #:use-module (system base message) #:use-module (system base pmatch) #:use-module (system vm program) #:use-module (ice-9 pretty-print)) @@ -38,31 +39,43 @@ (write (list (cons 'result result) (cons 'output output))) (newline)) +(define compile-opts '(#:warnings (arity-mismatch unbound-variable))) + +(define (call-with-result thunk) + (letrec* ((result #f) + (output + (with-output-to-string + (lambda () + (with-fluids ((*current-warning-port* (current-output-port))) + (set! result (thunk))))))) + (write-result result output))) + (define (ge:compile form module-name) (let* ((module (or (find-module module-name) (current-module))) - (result #f) (ev (lambda () - (set! result - (call-with-values - (lambda () - (let* ((o (compile form - #:to 'objcode #:env module)) - (thunk (make-program o))) - (start-stack 'geiser-evaluation-stack - (eval `(,thunk) module)))) - (lambda vs (map object->string vs))))))) - (let ((output (with-output-to-string ev))) - (write-result result output)))) + (call-with-values + (lambda () + (let* ((o (compile form + #:to 'objcode + #:env module + #:opts compile-opts)) + (thunk (make-program o))) + (start-stack 'geiser-evaluation-stack + (eval `(,thunk) module)))) + (lambda vs (map object->string vs)))))) + (call-with-result ev))) (define ge:eval ge:compile) (define (ge:compile-file path) - (write-result - (let ((cr (compile-file path #:canonicalization 'absolute))) - (and cr - (list (object->string (save-module-excursion - (lambda () (load-compiled cr))))))) - "")) + (call-with-result + (lambda () + (let ((cr (compile-file path + #:canonicalization 'absolute + #:opts compile-opts))) + (and cr + (list (object->string (save-module-excursion + (lambda () (load-compiled cr)))))))))) (define ge:load-file ge:compile-file) |