guile-commits
[Top][All Lists]
Advanced

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

[Guile-commits] branch master updated: Fix , optimize to be independent


From: Andy Wingo
Subject: [Guile-commits] branch master updated: Fix , optimize to be independent of tree-il
Date: Thu, 14 May 2020 03:18:21 -0400

This is an automated email from the git hooks/post-receive script.

wingo pushed a commit to branch master
in repository guile.

The following commit(s) were added to refs/heads/master by this push:
     new 033a67d  Fix ,optimize to be independent of tree-il
033a67d is described below

commit 033a67d5750759aeae0a49b4ef8f7499cfdf5818
Author: Andy Wingo <address@hidden>
AuthorDate: Thu May 14 09:13:51 2020 +0200

    Fix ,optimize to be independent of tree-il
    
    * module/system/repl/common.scm (repl-default-options): Add
      optimization-level and warning-level REPL options.
      (repl-optimization-level, repl-warning-level): New accessors,
      defaulting to the default level parameters.
      (repl-expand): Take target language as keyword argument rather than
      hard-coding tree-il.
      (repl-optimize): Take target language as keyword argument.  Use REPL
      optimization and warning levels.  Use generic lowering interface.
---
 module/system/repl/common.scm | 44 +++++++++++++++++++++++++++++++++----------
 1 file changed, 34 insertions(+), 10 deletions(-)

diff --git a/module/system/repl/common.scm b/module/system/repl/common.scm
index 2106754..d487da8 100644
--- a/module/system/repl/common.scm
+++ b/module/system/repl/common.scm
@@ -25,7 +25,6 @@
   #:use-module (system base message)
   #:use-module (system vm program)
   #:use-module (system vm loader)
-  #:autoload (language tree-il optimize) (optimize)
   #:use-module (ice-9 control)
   #:use-module (ice-9 history)
   #:export (<repl> make-repl repl-language repl-options
@@ -111,6 +110,14 @@ See <http://www.gnu.org/licenses/lgpl.html>, for more 
details.")
 (define repl-default-options
   (copy-tree
    `((compile-options ,%auto-compilation-options #f)
+     (optimization-level #f (lambda (x)
+                              (unless (and (exact-integer? x) (<= 0 x 9))
+                                (error "Invalid optimization level" x))
+                              x))
+     (warning-level #f (lambda (x)
+                         (unless (and (exact-integer? x) (<= 0 x 9))
+                           (error "Invalid warning level" x))
+                         x))
      (trace #f #f)
      (interp #f #f)
      (prompt #f ,(lambda (prompt)
@@ -173,27 +180,44 @@ See <http://www.gnu.org/licenses/lgpl.html>, for more 
details.")
 (define (repl-compile-options repl)
   (repl-option-ref repl 'compile-options))
 
+(define (repl-optimization-level repl)
+  (or (repl-option-ref repl 'optimization-level)
+      (default-optimization-level)))
+
+(define (repl-warning-level repl)
+  (or (repl-option-ref repl 'warning-level)
+      (default-warning-level)))
+
 (define (repl-compile repl form)
   (let ((from (repl-language repl))
         (opts (repl-compile-options repl)))
     (compile form #:from from #:to 'bytecode #:opts opts
+             #:optimization-level (repl-optimization-level repl)
+             #:warning-level (repl-warning-level repl)
              #:env (current-module))))
 
-(define (repl-expand repl form)
+(define* (repl-expand repl form #:key (lang 'tree-il))
   (let ((from (repl-language repl))
         (opts (repl-compile-options repl)))
-    (decompile (compile form #:from from #:to 'tree-il #:opts opts
+    (decompile (compile form #:from from #:to lang #:opts opts
                         #:env (current-module))
-               #:from 'tree-il #:to from)))
+               #:from lang #:to from)))
 
-(define (repl-optimize repl form)
+(define* (repl-optimize repl form #:key (lang 'tree-il))
   (let ((from (repl-language repl))
+        (make-lower (language-lowerer (lookup-language lang)))
+        (optimization-level (repl-optimization-level repl))
+        (warning-level (repl-warning-level repl))
         (opts (repl-compile-options repl)))
-    (decompile (optimize (compile form #:from from #:to 'tree-il #:opts opts
-                                  #:env (current-module))
-                         (current-module)
-                         opts)
-               #:from 'tree-il #:to from)))
+    (unless make-lower
+      (error "language has no optimizer" lang))
+    (decompile ((make-lower optimization-level opts)
+                (compile form #:from from #:to lang #:opts opts
+                         #:optimization-level optimization-level
+                         #:warning-level warning-level
+                         #:env (current-module))
+                (current-module))
+               #:from lang #:to from)))
 
 (define (repl-parse repl form)
   (let ((parser (language-parser (repl-language repl))))



reply via email to

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