--- /dev/null
+;; Macro definitions used for SAM behaviour definition
+;;
+
+(module sam-macros
+ (make-beh define-beh)
+
+ (import scheme
+ (chicken base)
+ matchable)
+
+ (define-syntax make-beh
+ (syntax-rules (: => finally)
+ ((make-beh : parent (self) (pat => body ...) ... (finally after ...))
+ (cons (lambda (self . message)
+ (match message
+ (pat body ...)
+ ...
+ (else 'pass))
+ after ...)
+ parent))
+ ((make-beh (self) (pat => body ...) ... (finally after ...))
+ (make-beh : root-beh (self) (pat => body ...) ... (finally after ...)))
+ ((make-beh : parent (self) (pat => body ...) ...)
+ (make-beh : parent (self) (pat => body ...) ... (finally)))
+ ((make-beh (self) (pat => body ...) ...)
+ (make-beh : root-beh (self) (pat => body ...) ... (finally)))))
+
+ (define-syntax define-beh
+ (syntax-rules ()
+ ((_ name rest ...)
+ (define name (make-beh rest ...))))))
+