guile-commits
[Top][All Lists]
Advanced

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

[Guile-commits] 03/04: Top-level lookups raise exceptions in run-time


From: Andy Wingo
Subject: [Guile-commits] 03/04: Top-level lookups raise exceptions in run-time
Date: Mon, 11 May 2020 04:36:33 -0400 (EDT)

wingo pushed a commit to branch master
in repository guile.

commit 85124b0d690ca2f4e1e73e32ff8ec65803b756de
Author: Andy Wingo <address@hidden>
AuthorDate: Mon May 11 10:22:56 2020 +0200

    Top-level lookups raise exceptions in run-time
    
    * module/language/cps/reify-primitives.scm (reify-lookup):
    * module/language/tree-il/compile-cps.scm (toplevel-box): Instead of
      checking that the result of module-variable is a variable, and
      possibly checking that it's bound, we just call intrinsics that throw
      exceptions if the variable isn't bound.  This reduces useless inlining
      that can't inform CPS optimizations, as they are tangled in diamond
      control flow.
---
 module/language/cps/reify-primitives.scm | 32 ++++++--------------------------
 module/language/tree-il/compile-cps.scm  | 28 ++++------------------------
 2 files changed, 10 insertions(+), 50 deletions(-)

diff --git a/module/language/cps/reify-primitives.scm 
b/module/language/cps/reify-primitives.scm
index 98cf85d..5fc86cc 100644
--- a/module/language/cps/reify-primitives.scm
+++ b/module/language/cps/reify-primitives.scm
@@ -201,34 +201,14 @@
   (wrap-unary cps k src 's64->u64 'u64->s64 'ulsh/immediate param a))
 
 (define (reify-lookup cps src mod-var name assert-bound? have-var)
-  (define (%lookup cps kbad k src mod-var name-var var assert-bound?)
-    (if assert-bound?
-        (with-cps cps
-          (letv val)
-          (letk kcheck
-                ($kargs ('val) (val)
-                  ($branch k kbad src 'undefined? #f (val))))
-          (letk kref
-                ($kargs () ()
-                  ($continue kcheck src
-                    ($primcall 'scm-ref/immediate '(box . 1) (var)))))
-          ($ (%lookup kbad kref src mod-var name-var var #f)))
-        (with-cps cps
-          (letk kres
-                ($kargs ('var) (var)
-                  ($branch kbad k src 'heap-object? #f (var))))
-          (build-term
-            ($continue kres src
-              ($primcall 'module-variable #f (mod-var name-var)))))))
-  (define %unbound
-    #(unbound-variable #f "Unbound variable: ~S"))
   (with-cps cps
     (letv name-var var)
-    (let$ good (have-var var))
-    (letk kgood ($kargs () () ,good))
-    (letk kbad ($kargs () () ($throw src 'throw/value %unbound (name-var))))
-    (let$ body (%lookup kbad kgood src mod-var name-var var assert-bound?))
-    (letk klookup ($kargs ('name) (name-var) ,body))
+    (let$ body (have-var var))
+    (letk kres ($kargs ('var) (var) ,body))
+    (letk klookup ($kargs ('name) (name-var)
+                    ($continue kres src
+                      ($primcall (if assert-bound? 'lookup-bound 'lookup) #f
+                                 (mod-var name-var)))))
     (build-term ($continue klookup src ($const name)))))
 
 (define (reify-resolve-module cps k src module public?)
diff --git a/module/language/tree-il/compile-cps.scm 
b/module/language/tree-il/compile-cps.scm
index d75807d..703e9fd 100644
--- a/module/language/tree-il/compile-cps.scm
+++ b/module/language/tree-il/compile-cps.scm
@@ -1401,36 +1401,16 @@
     scope-id))
 
 (define (toplevel-box cps src name bound? have-var)
-  (define %unbound
-    #(unbound-variable #f "Unbound variable: ~S"))
   (match (current-topbox-scope)
     (#f
      (with-cps cps
        (letv mod name-var box)
-       (letk kbad ($kargs () () ($throw src 'throw/value %unbound (name-var))))
-       (let$ body
-             ((if bound?
-                  (lambda (cps)
-                    (with-cps cps
-                      (letv val)
-                      (let$ body (have-var box))
-                      (letk kdef ($kargs () () ,body))
-                      (letk ktest ($kargs ('val) (val)
-                                    ($branch kdef kbad src
-                                      'undefined? #f (val))))
-                      (build-term
-                        ($continue ktest src
-                          ($primcall 'scm-ref/immediate
-                                     '(box . 1) (box))))))
-                  (lambda (cps)
-                    (with-cps cps
-                      ($ (have-var box)))))))
-       (letk ktest ($kargs () () ,body))
-       (letk kbox ($kargs ('box) (box)
-                    ($branch kbad ktest src 'heap-object? #f (box))))
+       (let$ body (have-var box))
+       (letk kbox ($kargs ('box) (box) ,body))
        (letk kname ($kargs ('name) (name-var)
                      ($continue kbox src
-                       ($primcall 'module-variable #f (mod name-var)))))
+                       ($primcall (if bound? 'lookup-bound 'lookup) #f
+                                  (mod name-var)))))
        (letk kmod ($kargs ('mod) (mod)
                     ($continue kname src ($const name))))
        (build-term



reply via email to

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