diff --git a/src/syndicate.nim b/src/syndicate.nim index b382835..8ca3787 100644 --- a/src/syndicate.nim +++ b/src/syndicate.nim @@ -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. diff --git a/src/syndicate/actors.nim b/src/syndicate/actors.nim index 5918cbe..79ca1c6 100644 --- a/src/syndicate/actors.nim +++ b/src/syndicate/actors.nim @@ -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, diff --git a/syndicate.nimble b/syndicate.nimble index 59744c8..6cb63e7 100644 --- a/syndicate.nimble +++ b/syndicate.nimble @@ -1,6 +1,6 @@ # Package -version = "20240314" +version = "20240315" author = "Emery Hemingway" description = "Syndicated actors for conversational concurrency" license = "Unlicense"