Behaviours are now tagged lists.
[sam.git] / sam-macros.scm
1 ;; Macro definitions used for SAM behaviour definition
2 ;;
3
4 (module sam-macros *
5
6   (import scheme
7           (chicken base)
8           matchable)
9
10   (define-syntax make-beh
11     (syntax-rules (: => finally)
12       ((make-beh : parent (self) (pat => body ...) ... (finally after ...))
13        (list 'beh
14              (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
33   (define-syntax make-actor-with-beh
34     (syntax-rules ()
35       ((_ rest ...)
36        (make-actor
37         (make-beh rest ...)))))
38
39   (define-syntax define-actor-with-beh
40     (syntax-rules ()
41       ((_ name rest ...)
42        (define name
43          (make-actor-with-beh rest ...))))))
44                   
45