;; Macro definitions used for SAM behaviour definition ;; (module sam-macros * (import scheme (chicken base) matchable) (define-syntax make-beh (syntax-rules (: => finally) ((make-beh : parent (self) (pat => body ...) ... (finally after ...)) (list 'beh (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 ...))))) (define-syntax make-actor-with-beh (syntax-rules () ((_ rest ...) (make-actor (make-beh rest ...))))) (define-syntax define-actor-with-beh (syntax-rules () ((_ name rest ...) (define name (make-actor-with-beh rest ...))))))