summaryrefslogtreecommitdiff
path: root/flic/flic-walker.scm
diff options
context:
space:
mode:
Diffstat (limited to 'flic/flic-walker.scm')
-rw-r--r--flic/flic-walker.scm21
1 files changed, 21 insertions, 0 deletions
diff --git a/flic/flic-walker.scm b/flic/flic-walker.scm
new file mode 100644
index 0000000..846d89f
--- /dev/null
+++ b/flic/flic-walker.scm
@@ -0,0 +1,21 @@
+;;; flic-walker.scm -- macros for defining code walkers for flic
+;;;
+;;; author : Sandra Loosemore
+;;; date : 7 May 1992
+;;;
+
+
+;;; (define-flic-walker foo (object))
+;;; creates a macro (define-foo type (object) . body)
+;;; and a function (foo object) that dispatches on the type of object.
+
+(define-syntax (define-flic-walker name args)
+ (let ((accessor-name (symbol-append 'flic-td- name '-walker))
+ (definer-name (symbol-append 'define- name)))
+ `(begin
+ (define-walker ,name ,accessor-name)
+ (define-local-syntax (,definer-name type args . body)
+ `(define-walker-method ,',name ,type ,args ,@body))
+ (define (,name ,@args)
+ (call-walker ,name ,@args)))))
+