diff options
| author | Jakob L. Kreuze | 2023-05-24 14:19:35 -0400 |
|---|---|---|
| committer | Jakob L. Kreuze | 2023-05-24 14:19:35 -0400 |
| commit | 19266ae3946c76aec08bf7a1026c4a4bf54f041d (patch) | |
| tree | d722cacceb63c7d92462b5a083ac73b5728623c5 | |
| parent | 8e646640f2f6400777dddf2721ea1d1bf7a5a834 (diff) | |
Update `lift-implicit-anonymous' to new scope interface
| -rw-r--r-- | compiler/main.scm | 2 | ||||
| -rw-r--r-- | compiler/passes/lift-implicit-anonymous.scm | 4 | ||||
| -rw-r--r-- | compiler/types.scm | 8 |
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 () |