emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/geiser-guile 3a80209 164/284: Guile: evaluation warnings


From: Philip Kaludercic
Subject: [nongnu] elpa/geiser-guile 3a80209 164/284: Guile: evaluation warnings
Date: Sun, 1 Aug 2021 18:29:37 -0400 (EDT)

branch: elpa/geiser-guile
commit 3a80209b93ef0b7f9bad0fbce2d976c6b5b89e5f
Author: Jose Antonio Ortega Ruiz <jao@gnu.org>
Commit: Jose Antonio Ortega Ruiz <jao@gnu.org>

    Guile: evaluation warnings
---
 geiser/evaluation.scm | 49 +++++++++++++++++++++++++++++++------------------
 1 file 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)
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]