diff options
| -rw-r--r-- | geiser/emacs.scm | 16 | ||||
| -rw-r--r-- | geiser/evaluation.scm | 40 | 
2 files changed, 42 insertions, 14 deletions
| diff --git a/geiser/emacs.scm b/geiser/emacs.scm index 3b6f49c..af1a052 100644 --- a/geiser/emacs.scm +++ b/geiser/emacs.scm @@ -10,9 +10,7 @@  ;; Start date: Sun Feb 08, 2009 18:39  (define-module (geiser emacs) -  #:re-export (ge:eval -               ge:compile -               ge:macroexpand +  #:re-export (ge:macroexpand                 ge:compile-file                 ge:load-file                 ge:autodoc @@ -26,8 +24,10 @@                 ge:callers                 ge:callees                 ge:find-file) -  #:export (ge:no-values) -  #:export (ge:newline) +  #:export (ge:compile +            ge:no-values +            ge:newline) +  #:use-module (ice-9 match)    #:use-module (geiser evaluation)    #:use-module ((geiser modules) :renamer (symbol-prefix-proc 'ge:))    #:use-module ((geiser completion) :renamer (symbol-prefix-proc 'ge:)) @@ -37,4 +37,10 @@  (define (ge:no-values) (values))  (define ge:newline newline) +(define (ge:compile form mod) +  (match form +    (`((@ (geiser emacs) . ,_) . ,_) (compile/no-warns form mod)) +    (_ (compile/warns form mod)))) + +  ;;; emacs.scm ends here diff --git a/geiser/evaluation.scm b/geiser/evaluation.scm index aba0cfe..6b8df8f 100644 --- a/geiser/evaluation.scm +++ b/geiser/evaluation.scm @@ -10,11 +10,12 @@  ;; Start date: Mon Mar 02, 2009 02:46  (define-module (geiser evaluation) -  #:export (ge:eval -            ge:compile +  #:export (compile/warns +            compile/no-warns              ge:macroexpand              ge:compile-file -            ge:load-file) +            ge:load-file +            ge:set-warnings)    #:use-module (geiser modules)    #:use-module (srfi srfi-1)    #:use-module (language tree-il) @@ -39,7 +40,26 @@    (write (list (cons 'result result) (cons 'output output)))    (newline)) -(define compile-opts '(#:warnings (arity-mismatch unbound-variable))) +(define compile-opts (make-fluid)) +(define compile-file-opts (make-fluid)) + +(define default-warnings '(arity-mismatch unbound-variable)) +(define verbose-warnings `(unused-variable ,@default-warnings)) + +(define (ge:set-warnings wl) +  (let* ((warns (cond ((list? wl) wl) +                      ((symbol? wl) (case wl +                                      ((none nil null) '()) +                                      ((medium default) default-warnings) +                                      ((high verbose) verbose-warnings))) +                      (else '()))) +         (fwarns (if (memq 'unused-variable warns) +                     (cons 'unused-toplevel warns) +                     warns))) +    (fluid-set! compile-opts (list #:warnings warns)) +    (fluid-set! compile-file-opts (list #:warnings fwarns)))) + +(ge:set-warnings 'none)  (define (call-with-result thunk)    (letrec* ((result #f) @@ -50,7 +70,11 @@                     (set! result (thunk)))))))      (write-result result output))) -(define (ge:compile form module-name) +(define (compile/no-warns form module) +  (with-fluids ((compile-opts '())) +    (compile/warns form module))) + +(define (compile/warns form module-name)    (let* ((module (or (find-module module-name) (current-module)))           (ev (lambda ()                 (call-with-values @@ -58,21 +82,19 @@                       (let* ((o (compile form                                          #:to 'objcode                                          #:env module -                                        #:opts compile-opts)) +                                        #:opts (fluid-ref 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)    (call-with-result     (lambda ()       (let ((cr (compile-file path                               #:canonicalization 'absolute -                             #:opts compile-opts))) +                             #:opts (fluid-ref compile-file-opts))))         (and cr              (list (object->string (save-module-excursion                                     (lambda () (load-compiled cr)))))))))) | 
