Refactored chat client.
[sam.git] / sam-macros.scm
1 ;; Macro definitions used for SAM behaviour definition
2 ;;
3
4 (module sam-macros
5     (make-beh define-beh)
6
7   (import scheme
8           (chicken base)
9           matchable)
10
11   (define-syntax make-beh
12     (syntax-rules (: => finally)
13       ((make-beh : parent (self) (pat => body ...) ... (finally after ...))
14        (cons (lambda (self . message)
15                (match message
16                  (pat body ...)
17                  ...
18                  (else 'pass))
19                after ...)
20              parent))
21       ((make-beh (self) (pat => body ...) ... (finally after ...))
22        (make-beh : root-beh (self) (pat => body ...) ... (finally after ...)))
23       ((make-beh : parent (self) (pat => body ...) ...)
24        (make-beh : parent (self) (pat => body ...) ... (finally)))
25       ((make-beh (self) (pat => body ...) ...)
26        (make-beh : root-beh (self) (pat => body ...) ... (finally)))))
27
28   (define-syntax define-beh
29     (syntax-rules ()
30       ((_ name rest ...)
31        (define name (make-beh rest ...))))))
32