summaryrefslogtreecommitdiff
path: root/flic/flic-walker.scm
blob: 846d89f7570a5f795c773aa0c44b8241b22b14a7 (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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)))))