aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--entity.scm48
1 files changed, 11 insertions, 37 deletions
diff --git a/entity.scm b/entity.scm
index a655169..7c29bf7 100644
--- a/entity.scm
+++ b/entity.scm
@@ -45,43 +45,17 @@
(let ((skips (entity-ref entity #:skip-pipelines '())))
(and (pair? skips) (memq step skips))))
-;; er-macro-transformer so (rename 'entity-skips-pipeline?) captures the
-;; binding from THIS module — works across compiled unit boundaries.
-;;
-;; Syntax:
-;; (define-pipeline (name skip-sym) (entity-formal ...)
-;; guard: guard-expr ;; optional — entity returned unchanged when #f
-;; body ...)
(define-syntax define-pipeline
- (er-macro-transformer
- (lambda (form rename _compare)
- (let* ((name-skip (cadr form))
- (name (car name-skip))
- (skip (cadr name-skip))
- (formals (caddr form))
- (f1 (cadr formals))
- (rest (cdddr form))
- (has-guard? (and (pair? rest) (pair? (cdr rest))
- (eq? (car rest) guard:)))
- (guard-expr (and has-guard? (cadr rest)))
- (body (if has-guard? (cddr rest) rest))
- (%define (rename 'define))
- (%if (rename 'if))
- (%let (rename 'let))
- (%not (rename 'not))
- (%quote (rename 'quote))
- (%skip? (rename 'entity-skips-pipeline?)))
- (if has-guard?
- `(,%define (,name ,@formals)
- (,%if (,%skip? ,f1 (,%quote ,skip))
- ,f1
- (,%if (,%not ,guard-expr)
- ,f1
- (,%let () ,@body))))
- `(,%define (,name ,@formals)
- (,%if (,%skip? ,f1 (,%quote ,skip))
- ,f1
- (,%let () ,@body))))))))
+ (syntax-rules ()
+ ((define-pipeline (identifier name) (scene entity dt) :guard guard (body ...))
+ (define (identifier scene entity dt)
+ (if (or (not guard) (entity-skips-pipeline? entity (quote name)))
+ entity
+ (body ...))))
+ ((define-pipeline (identifier name) (scene entity dt) (body ...))
+ (define (identifier scene entity dt)
+ (if (entity-skips-pipeline? entity (quote name))
+ entity
+ (body ...))))))
) ;; End of entity
-