Put during clauses in new facets

This commit is contained in:
Emery Hemingway 2024-03-15 10:19:43 +00:00
parent a3146f88a5
commit 81ce71d495
3 changed files with 15 additions and 3 deletions

View File

@ -173,7 +173,8 @@ macro during*(turn: untyped; ds: Cap; pattern: Pattern; publishBody, retractBody
if `argCount` != 0 and `pattern`.analyse.capturePaths.len != `argCount`:
raiseAssert($`pattern`.analyse.capturePaths.len & " values captured but handler has " & $`argCount` & " arguments - " & $`pattern`)
`callbackProc`
discard observe(`turn`, `ds`, `pattern`, during(`callbackSym`))
discard inFacet(`turn`) do (`turn`: var Turn):
discard observe(`turn`, `ds`, `pattern`, during(`callbackSym`))
macro during*(turn: untyped; ds: Cap; pattern: Pattern; publishBody: untyped) =
## Variant of `during` without a retract body.
@ -185,7 +186,8 @@ macro during*(turn: untyped; ds: Cap; pattern: Pattern; publishBody: untyped) =
if `argCount` != 0 and `pattern`.analyse.capturePaths.len != `argCount`:
raiseAssert($`pattern`.analyse.capturePaths.len & " values captured but handler has " & $`argCount` & " arguments - " & $`pattern`)
`callbackProc`
discard observe(`turn`, `ds`, `pattern`, during(`callbackSym`))
discard inFacet(`turn`) do (`turn`: var Turn):
discard observe(`turn`, `ds`, `pattern`, during(`callbackSym`))
proc runActor*(name: string; bootProc: TurnAction) =
## Boot an actor `Actor` and churn ioqueue once.

View File

@ -507,6 +507,16 @@ proc stopIfInertAfter(action: TurnAction): TurnAction =
proc newFacet(turn: var Turn): Facet = newFacet(turn.facet.actor, turn.facet)
proc inFacet*(turn: var Turn; bootProc: TurnAction): Facet =
result = newFacet(turn)
recallFacet turn:
turn.facet = result
when tracing:
var act = ActionDescription(orKind: ActionDescriptionKind.facetstart)
act.facetstart.path.add result.path
turn.desc.actions.add act
stopIfInertAfter(bootProc)(turn)
proc newActor(name: string; parent: Facet): Actor =
result = Actor(
name: name,

View File

@ -1,6 +1,6 @@
# Package
version = "20240314"
version = "20240315"
author = "Emery Hemingway"
description = "Syndicated actors for conversational concurrency"
license = "Unlicense"