diff options
| -rw-r--r-- | entity.scm | 48 |
1 files changed, 11 insertions, 37 deletions
@@ -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 - |
