diff --git a/syndicate/syntax.rkt b/syndicate/syntax.rkt index e5ef75c..a12af36 100644 --- a/syndicate/syntax.rkt +++ b/syndicate/syntax.rkt @@ -28,17 +28,17 @@ let-event - ;; query-value + query-value ;; query-set ;; query-hash ;; query-hash-set ;; query-count - ;; query-value* + query-value* ;; query-set* ;; query-hash* ;; query-hash-set* ;; query-count* - ;; define/query-value + define/query-value ;; define/query-set ;; define/query-hash ;; define/query-hash-set @@ -431,39 +431,39 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Queries -;; (begin-for-syntax -;; (define-splicing-syntax-class on-add -;; (pattern (~optional (~seq #:on-add expr) #:defaults ([expr #f])))) -;; (define-splicing-syntax-class on-remove -;; (pattern (~optional (~seq #:on-remove expr) #:defaults ([expr #f])))) +(begin-for-syntax + (define-splicing-syntax-class on-add + (pattern (~optional (~seq #:on-add expr) #:defaults ([expr #f])))) + (define-splicing-syntax-class on-remove + (pattern (~optional (~seq #:on-remove expr) #:defaults ([expr #f])))) -;; (define (schedule-query-handler-stxs maybe-expr-stx) -;; (if maybe-expr-stx -;; (quasisyntax/loc maybe-expr-stx -;; ((schedule-script! #:priority *query-handler-priority* -;; (lambda () #,maybe-expr-stx)))) -;; #'()))) + (define (schedule-query-handler-stxs maybe-expr-stx) + (if maybe-expr-stx + (quasisyntax/loc maybe-expr-stx + ((schedule-script! #:priority *query-handler-priority* + (lambda () #,maybe-expr-stx)))) + #'()))) -;; (define-syntax (query-value stx) -;; (syntax-parse stx -;; [(_ field-name absent-expr args ...) -;; (quasisyntax/loc stx -;; (let () -;; (field [field-name absent-expr]) -;; (query-value* field-name absent-expr args ...)))])) +(define-syntax (query-value stx) + (syntax-parse stx + [(_ field-name absent-expr args ...) + (quasisyntax/loc stx + (let () + (field [field-name absent-expr]) + (query-value* field-name absent-expr args ...)))])) -;; (define-syntax (query-value* stx) -;; (syntax-parse stx -;; [(_ field-name absent-expr P expr on-add:on-add on-remove:on-remove) -;; (quasisyntax/loc stx -;; (let ((F field-name)) -;; (on (asserted P) #:priority *query-priority* -;; #,@(schedule-query-handler-stxs (attribute on-add.expr)) -;; (F expr)) -;; (on (retracted P) #:priority *query-priority-high* -;; #,@(schedule-query-handler-stxs (attribute on-remove.expr)) -;; (F absent-expr)) -;; F))])) +(define-syntax (query-value* stx) + (syntax-parse stx + [(_ field-name absent-expr P expr on-add:on-add on-remove:on-remove) + (quasisyntax/loc stx + (let ((F field-name)) + (on (asserted P) #:priority *query-priority* + #,@(schedule-query-handler-stxs (attribute on-add.expr)) + (F expr)) + (on (retracted P) #:priority *query-priority-high* + #,@(schedule-query-handler-stxs (attribute on-remove.expr)) + (F absent-expr)) + F))])) ;; (define-syntax (query-set stx) ;; (syntax-parse stx @@ -569,7 +569,7 @@ ;; [n (hash-set F0 E (- n 1))]))))) ;; F))])) -;; (define-syntax-rule (define/query-value id ae P x ...) (define id (query-value id ae P x ...))) +(define-syntax-rule (define/query-value id ae P x ...) (define id (query-value id ae P x ...))) ;; (define-syntax-rule (define/query-set id P x ...) (define id (query-set id P x ...))) ;; (define-syntax-rule (define/query-hash id P x ...) (define id (query-hash id P x ...))) ;; (define-syntax-rule (define/query-hash-set id P x ...) (define id (query-hash-set id P x ...)))