diff options
| author | Jakob L. Kreuze | 2023-04-14 18:23:50 -0400 |
|---|---|---|
| committer | Jakob L. Kreuze | 2023-04-14 18:23:50 -0400 |
| commit | a0cfb6238ace4ccea7a0f563aaed92141602b621 (patch) | |
| tree | fe318f78e72fb0618e5a70166d5a8ac49b174ccb | |
| parent | 4d21afe9162365b31782136c9ae60249c7b74b8e (diff) | |
Proof-of-concept for identifier rewriting via walk API
| -rw-r--r-- | compiler/types.scm | 1 | ||||
| -rw-r--r-- | compiler/walk.scm | 41 |
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))) |