diff --git a/syndicate/async.rkt b/syndicate/async.rkt index 34ca244..d8baba7 100644 --- a/syndicate/async.rkt +++ b/syndicate/async.rkt @@ -1,13 +1,15 @@ -#lang syndicate +#lang racket/base ;;; SPDX-License-Identifier: LGPL-3.0-or-later ;;; SPDX-FileCopyrightText: Copyright © 2022 Tony Garnock-Jones (provide async async? suspend - await) + await + define/await) (require (only-in (submod "actor.rkt" internals) with-active-facet)) +(require "syntax.rkt") (define prompt-tag (make-continuation-prompt-tag 'syndicate)) @@ -45,6 +47,12 @@ (let ((k (lambda results (stop-facet facet (apply k results))))) body ...))))) +(define-syntax-rule (define/await [name (op args ...)] ...) + (define-values (name ...) + (await k + (define name (op query-result args ...)) ... + (sync! this-target (k name ...))))) + (module+ test (require "dataspace.rkt") (actor-system/dataspace (ds) diff --git a/syndicate/main.rkt b/syndicate/main.rkt index f8446fc..9b45746 100644 --- a/syndicate/main.rkt +++ b/syndicate/main.rkt @@ -9,6 +9,7 @@ (all-from-out "query.rkt") (all-from-out "service.rkt") (all-from-out "event-expander.rkt") + (all-from-out "async.rkt") (all-from-out preserves) (all-from-out preserves-schema) @@ -23,6 +24,7 @@ (require "query.rkt") (require "service.rkt") (require "event-expander.rkt") +(require "async.rkt") (require preserves) (require preserves-schema) diff --git a/syndicate/syntax.rkt b/syndicate/syntax.rkt index 12e021f..c5edc8d 100644 --- a/syndicate/syntax.rkt +++ b/syndicate/syntax.rkt @@ -42,6 +42,7 @@ during*) (require racket/match) +(require racket/splicing) (require racket/stxparam) (require (for-syntax racket/base)) (require (for-syntax racket/syntax)) @@ -304,8 +305,9 @@ (define-syntax (at stx) (syntax-case stx () [(_ target-expr items ...) - #`(let ((target target-expr)) - (syntax-parameterize ([this-target (make-rename-transformer #'target)]) + #`(begin + (define target target-expr) + (splicing-syntax-parameterize ([this-target (make-rename-transformer #'target)]) items ...))])) (define-syntax assert