DSL: bind "turn" symbol in during retract handler
This commit is contained in:
parent
57e4bb6bad
commit
7f0277fe85
|
@ -327,17 +327,17 @@ proc wrapDuringHandler(entryBody, exitBody: NimNode): NimNode =
|
|||
`varSectionOuter`
|
||||
if fromPreserve(`valuesSym`, `bindingsSym`):
|
||||
`publishBody`
|
||||
proc action(turn: var Turn) =
|
||||
proc action(`turnSym`: var Turn) =
|
||||
`exitBody`
|
||||
result = action
|
||||
|
||||
macro during*(turn: Turn; ds: Ref; pattern: Pattern; publishBody, retractBody: untyped) =
|
||||
macro during*(turn: var Turn; ds: Ref; pattern: Pattern; publishBody, retractBody: untyped) =
|
||||
## Call `publishBody` when an assertion matching `pattern` is published to `ds` and
|
||||
## call `retractBody` on retraction. Assertions that match `pattern` but are not
|
||||
## convertable to the arguments of `publishBody` are silently discarded.
|
||||
##
|
||||
## The following symbols are injected into the scope of both bodies:
|
||||
## - `turn` - active turn at entry of `publishBody`
|
||||
## - `turn` - active turn at entry of `publishBody` and `retractBody`
|
||||
## - `bindings` - raw Preserves sequence that matched `pattern`
|
||||
## - `duringHandle` - dataspace handle of the assertion that triggered `publishBody`
|
||||
let
|
||||
|
@ -347,7 +347,7 @@ macro during*(turn: Turn; ds: Ref; pattern: Pattern; publishBody, retractBody: u
|
|||
`callbackProc`
|
||||
discard observe(`turn`, `ds`, `pattern`, during(`callbackSym`))
|
||||
|
||||
macro during*(turn: Turn; ds: Ref; pattern: Pattern; publishBody: untyped) =
|
||||
macro during*(turn: var Turn; ds: Ref; pattern: Pattern; publishBody: untyped) =
|
||||
## Variant of `during` without a retract body.
|
||||
let
|
||||
callbackProc = wrapDuringHandler(publishBody, nil)
|
||||
|
|
Loading…
Reference in New Issue