From a3335800f615b0866ebd685263802c781c569351 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Thu, 24 Nov 2016 10:36:38 +1300 Subject: [PATCH] Make immediate-query able to yield multiple values --- racket/syndicate/actor.rkt | 12 ++++++++---- racket/syndicate/drivers/config.rkt | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/racket/syndicate/actor.rkt b/racket/syndicate/actor.rkt index 040e807..a869e83 100644 --- a/racket/syndicate/actor.rkt +++ b/racket/syndicate/actor.rkt @@ -645,10 +645,14 @@ (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 ...))) -(define-syntax-rule (immediate-query op args ...) - (react/suspend (k) - (define query-result (op query-result args ...)) - (on-start (flush!) (k (query-result))))) +(define-syntax (immediate-query stx) + (syntax-case stx () + [(_ [op args ...] ...) + (with-syntax [((query-result ...) (generate-temporaries #'(op ...)))] + (syntax/loc stx + (react/suspend (k) + (define query-result (op query-result args ...)) ... + (on-start (flush!) (k (query-result) ...)))))])) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/racket/syndicate/drivers/config.rkt b/racket/syndicate/drivers/config.rkt index ff4d983..670dbe9 100644 --- a/racket/syndicate/drivers/config.rkt +++ b/racket/syndicate/drivers/config.rkt @@ -34,4 +34,4 @@ (define/query-value id default (config scope (list 'key $val)) val)])) (define (config-ref #:scope [scope ?] key default) - (immediate-query query-value default (config scope (list key $val)) val)) + (immediate-query (query-value default (config scope (list key $val)) val)))