aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob L. Kreuze2023-05-24 14:19:35 -0400
committerJakob L. Kreuze2023-05-24 14:19:35 -0400
commit19266ae3946c76aec08bf7a1026c4a4bf54f041d (patch)
treed722cacceb63c7d92462b5a083ac73b5728623c5
parent8e646640f2f6400777dddf2721ea1d1bf7a5a834 (diff)
Update `lift-implicit-anonymous' to new scope interface
-rw-r--r--compiler/main.scm2
-rw-r--r--compiler/passes/lift-implicit-anonymous.scm4
-rw-r--r--compiler/types.scm8
3 files changed, 13 insertions, 1 deletions
diff --git a/compiler/main.scm b/compiler/main.scm
index fbdffae..1b07096 100644
--- a/compiler/main.scm
+++ b/compiler/main.scm
@@ -50,10 +50,10 @@ of `(program-arguments)'."
(policy (parse-policy ast))
(policy (compile-comprehensions policy))
(policy (compile-exists-some policy))
+ (policy (lift-implicit-anonymous policy))
(policy (compile-for-all policy))
(policy (compile-object-literal policy))
;; (policy (extract-identifiers policy))
- ;; (policy (lift-implicit-anonymous policy))
;; (policy (compile-constraints policy))
;; (policy (compile-funcall policy))
;; (policy (compile-reference policy))
diff --git a/compiler/passes/lift-implicit-anonymous.scm b/compiler/passes/lift-implicit-anonymous.scm
index 5e0c0fa..99b8409 100644
--- a/compiler/passes/lift-implicit-anonymous.scm
+++ b/compiler/passes/lift-implicit-anonymous.scm
@@ -48,6 +48,10 @@
(match form
(($ <body> clauses)
(let-values (((new-identifiers new-clauses) (extract-anonymous-references scope breadcrumb clauses)))
+ ;; Add new identifiers to the scope.
+ (for-each (lambda (identifier)
+ (add-to-scope scope breadcrumb (variable-ref->local identifier)))
+ new-identifiers)
(if (positive? (length new-identifiers))
(make <body>
#:conjunction
diff --git a/compiler/types.scm b/compiler/types.scm
index a563543..a9d7bc8 100644
--- a/compiler/types.scm
+++ b/compiler/types.scm
@@ -49,6 +49,7 @@
constraints
lean-name
resolved?
+ variable-ref->local
<rule>
default-rule?
@@ -179,6 +180,13 @@
#:init-keyword #:resolved
#:accessor resolved?))
+(define (variable-ref->local ref)
+ ;; TODO: Document me!
+ ;;
+ ;; This produces a dumb "it's just a name, haha" local with no constraints
+ ;; attached.
+ (make <local> #:identifier ref #:lean-name ref))
+
(define-syntax with-anonymous-identifiers
(lambda (stx)
(syntax-case stx ()

© 2015 - 2026 Jakob L. Kreuze