Implemented beh hierarchy and behaviour macros.
[sam.git] / sam-macros.scm
diff --git a/sam-macros.scm b/sam-macros.scm
new file mode 100644 (file)
index 0000000..16faba3
--- /dev/null
@@ -0,0 +1,32 @@
+;; 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 ...))))))
+