cf4f9ac598b0fafce7d34920af43a89a111ac4c6
[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        (cons (lambda (self . message)
14                (match message
15                  (pat body ...)
16                  ...
17                  (else 'pass))
18                after ...)
19              parent))
20       ((make-beh (self) (pat => body ...) ... (finally after ...))
21        (make-beh : root-beh (self) (pat => body ...) ... (finally after ...)))
22       ((make-beh : parent (self) (pat => body ...) ...)
23        (make-beh : parent (self) (pat => body ...) ... (finally)))
24       ((make-beh (self) (pat => body ...) ...)
25        (make-beh : root-beh (self) (pat => body ...) ... (finally)))))
26
27   (define-syntax define-beh
28     (syntax-rules ()
29       ((_ name rest ...)
30        (define name (make-beh rest ...)))))
31
32   (define-syntax make-actor-with-beh
33     (syntax-rules ()
34       ((_ rest ...)
35        (make-actor
36         (make-beh rest ...)))))
37
38   (define-syntax define-actor-with-beh
39     (syntax-rules ()
40       ((_ name rest ...)
41        (define name
42          (make-actor-with-beh rest ...))))))
43                   
44