aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob L. Kreuze2023-04-14 18:23:50 -0400
committerJakob L. Kreuze2023-04-14 18:23:50 -0400
commita0cfb6238ace4ccea7a0f563aaed92141602b621 (patch)
treefe318f78e72fb0618e5a70166d5a8ac49b174ccb
parent4d21afe9162365b31782136c9ae60249c7b74b8e (diff)
Proof-of-concept for identifier rewriting via walk API
-rw-r--r--compiler/types.scm1
-rw-r--r--compiler/walk.scm41
2 files changed, 34 insertions, 8 deletions
diff --git a/compiler/types.scm b/compiler/types.scm
index 07ac912..e73e932 100644
--- a/compiler/types.scm
+++ b/compiler/types.scm
@@ -47,6 +47,7 @@
ι-body-conjunction
make-reference
+ <reference>
reference?
reference-parts
diff --git a/compiler/walk.scm b/compiler/walk.scm
index f1d567c..dabd438 100644
--- a/compiler/walk.scm
+++ b/compiler/walk.scm
@@ -106,11 +106,36 @@
(define (mutate-tree policy f)
(define (recur form)
- (cond ((list? form) _)
- ((constant? form) _)
- ((set-literal? form) _)
- ((object-literal? form) _)
- ((reference? form) _)
- ((variable-ref? form) _)
- (else _)))
- (map recur (policy-rules policy)))
+ (match form
+ ((x xs ...)
+ (map (lambda (x) (f (recur x))) (cons x xs)))
+
+ ;; TODO: Should this include the `head' of a rule too?
+ (($ <rule> default head body)
+ (f (make-rule default head (recur body))))
+ (($ <body> conjunction)
+ (f (make-body (recur conjunction))))
+ (($ <for-all> domain key value body)
+ (f (make-for-all domain key value (recur body))))
+ (($ <comprehension> kind key value body)
+ (f (make-comprehension kind key value (recur body))))
+
+ (($ <reference> parts)
+ (f (make-reference (recur parts))))
+ (anything-else (f anything-else))))
+ (make-policy
+ (policy-package policy)
+ (policy-imports policy)
+ (zip (map car (policy-rules policy))
+ (map (compose recur cadr) (policy-rules policy)))
+ (policy-comments policy)))
+
+(define (my-rewrite-anonymous form)
+ (match form
+ (($ <variable-ref> name)
+ (make-variable-ref
+ (if (string= name "$0")
+ "anony_0"
+ name)))
+ (anything-else
+ anything-else)))

© 2015 - 2026 Jakob L. Kreuze