Expose bindings values in during, onPublish, and onMessage
This commit is contained in:
parent
9c5e26e8f1
commit
ba2ea5d08b
|
@ -20,7 +20,7 @@ export patterns
|
|||
export Actor, Assertion, Facet, Handle, Cap, Ref, Symbol, Turn, TurnAction,
|
||||
`$`, addCallback, analyse, asyncCheck, bootDataspace,
|
||||
facet, future, inFacet, message, newDataspace, onStop, publish,
|
||||
retract, replace, run, spawn, stop, unembed, unpackLiterals
|
||||
retract, replace, run, spawn, stop, stopActor, unembed, unpackLiterals
|
||||
|
||||
proc `!`*(typ: static typedesc): Pattern {.inline.} =
|
||||
patterns.dropType(typ)
|
||||
|
@ -99,8 +99,9 @@ proc wrapPublishHandler(turn, handler: NimNode): NimNode =
|
|||
generateHandlerNodes(handler)
|
||||
handleSym = ident"handle"
|
||||
handlerSym = genSym(nskProc, "publish")
|
||||
bindingsSym = ident"bindings"
|
||||
quote do:
|
||||
proc `handlerSym`(`turn`: var Turn; bindings: Assertion; `handleSym`: Handle) =
|
||||
proc `handlerSym`(`turn`: var Turn; `bindingsSym`: Assertion; `handleSym`: Handle) =
|
||||
`varSection`
|
||||
if fromPreserve(`valuesSym`, bindings):
|
||||
`publishBody`
|
||||
|
@ -110,8 +111,9 @@ proc wrapMessageHandler(turn, handler: NimNode): NimNode =
|
|||
(valuesSym, varSection, body) =
|
||||
generateHandlerNodes(handler)
|
||||
handlerSym = genSym(nskProc, "message")
|
||||
bindingsSym = ident"bindings"
|
||||
quote do:
|
||||
proc `handlerSym`(`turn`: var Turn; bindings: Assertion) =
|
||||
proc `handlerSym`(`turn`: var Turn; `bindingsSym`: Assertion) =
|
||||
`varSection`
|
||||
if fromPreserve(`valuesSym`, bindings):
|
||||
`body`
|
||||
|
@ -146,7 +148,7 @@ macro onPublish*(turn: untyped; ds: Cap; pattern: Pattern; handler: untyped) =
|
|||
handlerProc = wrapPublishHandler(turn, handler)
|
||||
handlerSym = handlerProc[0]
|
||||
result = quote do:
|
||||
if `pattern`.analyse.capturePaths.len != `argCount`:
|
||||
if `argCount` != 0 and `pattern`.analyse.capturePaths.len != `argCount`:
|
||||
raiseAssert($`pattern`.analyse.capturePaths.len & " values captured but handler has " & $`argCount` & " arguments")
|
||||
`handlerProc`
|
||||
discard observe(`turn`, `ds`, `pattern`, ClosureEntity(publishImpl: `handlerSym`))
|
||||
|
@ -158,7 +160,7 @@ macro onMessage*(turn: untyped; ds: Cap; pattern: Pattern; handler: untyped) =
|
|||
handlerProc = wrapMessageHandler(turn, handler)
|
||||
handlerSym = handlerProc[0]
|
||||
result = quote do:
|
||||
if `pattern`.analyse.capturePaths.len != `argCount`:
|
||||
if `argCount` != 0 and `pattern`.analyse.capturePaths.len != `argCount`:
|
||||
raiseAssert($`pattern`.analyse.capturePaths.len & " values captured but handler has " & $`argCount` & " arguments")
|
||||
`handlerProc`
|
||||
discard observe(`turn`, `ds`, `pattern`, ClosureEntity(messageImpl: `handlerSym`))
|
||||
|
@ -176,7 +178,7 @@ macro during*(turn: untyped; ds: Cap; pattern: Pattern; publishBody, retractBody
|
|||
callbackProc = wrapDuringHandler(turn, publishBody, retractBody)
|
||||
callbackSym = callbackProc[0]
|
||||
result = quote do:
|
||||
if `pattern`.analyse.capturePaths.len != `argCount`:
|
||||
if `argCount` != 0 and `pattern`.analyse.capturePaths.len != `argCount`:
|
||||
raiseAssert($`pattern`.analyse.capturePaths.len & " values captured but handler has " & $`argCount` & " arguments")
|
||||
`callbackProc`
|
||||
discard observe(`turn`, `ds`, `pattern`, during(`callbackSym`))
|
||||
|
@ -184,11 +186,11 @@ macro during*(turn: untyped; ds: Cap; pattern: Pattern; publishBody, retractBody
|
|||
macro during*(turn: untyped; ds: Cap; pattern: Pattern; publishBody: untyped) =
|
||||
## Variant of `during` without a retract body.
|
||||
let
|
||||
argCount = argumentCount(publishBody)
|
||||
`argCount` = argumentCount(publishBody)
|
||||
callbackProc = wrapDuringHandler(turn, publishBody, nil)
|
||||
callbackSym = callbackProc[0]
|
||||
result = quote do:
|
||||
if `pattern`.analyse.capturePaths.len != `argCount`:
|
||||
if `argCount` != 0 and `pattern`.analyse.capturePaths.len != `argCount`:
|
||||
raiseAssert($`pattern`.analyse.capturePaths.len & " values captured but handler has " & $`argCount` & " arguments")
|
||||
`callbackProc`
|
||||
discard observe(`turn`, `ds`, `pattern`, during(`callbackSym`))
|
||||
|
|
|
@ -75,7 +75,7 @@ type
|
|||
Turn* = object # an object that should remain on the stack
|
||||
facet: Facet
|
||||
queues: Queues # a ref object that can outlive Turn
|
||||
when defined(traceSyndicate):
|
||||
when tracing:
|
||||
desc: TurnDescription[void]
|
||||
|
||||
Facet* = ref FacetObj
|
||||
|
@ -587,7 +587,7 @@ proc onStop*(facet: Facet; act: TurnAction) =
|
|||
|
||||
proc stopActor*(turn: var Turn) =
|
||||
let actor = turn.facet.actor
|
||||
enqueue(turn, turn.facet.actor.root) do (turn: var Turn):
|
||||
enqueue(turn, actor.root) do (turn: var Turn):
|
||||
terminate(actor, turn, nil)
|
||||
|
||||
proc freshen*(turn: var Turn, act: TurnAction) =
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Package
|
||||
|
||||
version = "20230726"
|
||||
version = "20230801"
|
||||
author = "Emery Hemingway"
|
||||
description = "Syndicated actors for conversational concurrency"
|
||||
license = "Unlicense"
|
||||
|
|
Loading…
Reference in New Issue