From 893d1b17ef63b7e2e9d4f6c9dd70c07b61c7bc59 Mon Sep 17 00:00:00 2001 From: Gene Pasquet Date: Sun, 12 Apr 2026 22:38:44 +0100 Subject: Simplify define-pipeline macro --- entity.scm | 48 +++++++++++------------------------------------- 1 file 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 - -- cgit v1.2.3