Type Alias AspectTyping<atom, runtime>
AspectTyping<atom, runtime>: {     apply@around: {         advice: ((state: runtime["State"], 
callee: runtime["StackValue"], 
this_: runtime["StackValue"], 
arguments_: runtime["StackValue"][], 
tag: atom["Tag"]) => runtime["StackValue"]);         pointcut: ((tag: atom["Tag"]) => boolean);     };     await@after: {         advice: ((state: runtime["State"], 
value: runtime["OtherValue"], 
tag: atom["Tag"]) => runtime["StackValue"]);         pointcut: ((tag: atom["Tag"]) => boolean);     };     await@before: {         advice: ((state: runtime["State"], 
value: runtime["StackValue"], 
tag: atom["Tag"]) => runtime["OtherValue"]);         pointcut: ((tag: atom["Tag"]) => boolean);     };     block@declaration: {         advice: ((state: runtime["State"], 
kind: ControlKind, 
frame: Frame<atom["Variable"], runtime["ScopeValue"]>, 
tag: atom["Tag"]) => void);         pointcut: ((kind: ControlKind, 
tag: atom["Tag"]) => boolean);     };     block@declaration-overwrite: {         advice: (<kind>(state: runtime["State"], 
kind: kind, 
frame: Frame<atom["Variable"], runtime["ScopeValue"]>, 
tag: atom["Tag"]) => Frame<atom["Variable"], runtime["ScopeValue"]>);         pointcut: ((kind: ControlKind, 
tag: atom["Tag"]) => boolean);     };     block@setup: {         advice: ((state: runtime["State"], 
kind: ControlKind, 
tag: atom["Tag"]) => runtime["State"]);         pointcut: ((kind: ControlKind, 
tag: atom["Tag"]) => boolean);     };     block@teardown: {         advice: ((state: runtime["State"], 
kind: ControlKind, 
tag: atom["Tag"]) => void);         pointcut: ((kind: ControlKind, 
tag: atom["Tag"]) => boolean);     };     block@throwing: {         advice: ((state: runtime["State"], 
kind: ControlKind, 
value: runtime["OtherValue"], 
tag: atom["Tag"]) => void);         pointcut: ((kind: ControlKind, 
tag: atom["Tag"]) => boolean);     };     break@before: {         advice: ((state: runtime["State"], 
label: atom["Label"], 
tag: atom["Tag"]) => void);         pointcut: ((label: atom["Label"], 
tag: atom["Tag"]) => boolean);     };     closure-block@after: {         advice: ((state: runtime["State"], 
kind: ClosureKind, 
value: runtime["StackValue"], 
tag: atom["Tag"]) => runtime["OtherValue"]);         pointcut: ((kind: ClosureKind, 
tag: atom["Tag"]) => boolean);     };     closure-block@before: {         advice: ((state: runtime["State"], 
kind: ClosureKind, 
tag: atom["Tag"]) => void);         pointcut: ((kind: ClosureKind, 
tag: atom["Tag"]) => boolean);     };     closure@after: {         advice: ((state: runtime["State"], 
kind: ClosureKind, 
closure: runtime["OtherValue"] & Function, 
tag: atom["Tag"]) => runtime["StackValue"]);         pointcut: ((kind: ClosureKind, 
tag: atom["Tag"]) => boolean);     };     construct@around: {         advice: ((state: runtime["State"], 
callee: runtime["StackValue"], 
arguments_: runtime["StackValue"][], 
tag: atom["Tag"]) => runtime["StackValue"]);         pointcut: ((tag: atom["Tag"]) => boolean);     };     drop@before: {         advice: ((state: runtime["State"], 
value: runtime["StackValue"], 
tag: atom["Tag"]) => runtime["OtherValue"]);         pointcut: ((tag: atom["Tag"]) => boolean);     };     eval@after: {         advice: ((state: runtime["State"], 
value: runtime["OtherValue"], 
tag: atom["Tag"]) => runtime["StackValue"]);         pointcut: ((tag: atom["Tag"]) => boolean);     };     eval@before: {         advice: ((state: runtime["State"], 
value: runtime["StackValue"], 
tag: atom["Tag"]) => runtime["OtherValue"]);         pointcut: ((tag: atom["Tag"]) => boolean);     };     export@before: {         advice: ((state: runtime["State"], 
specifier: atom["Specifier"], 
value: runtime["StackValue"], 
tag: atom["Tag"]) => runtime["OtherValue"]);         pointcut: ((specifier: atom["Specifier"], 
tag: atom["Tag"]) => boolean);     };     generator-block@resumption: {         advice: ((state: runtime["State"], 
kind: GeneratorKind, 
tag: atom["Tag"]) => void);         pointcut: ((kind: GeneratorKind, 
tag: atom["Tag"]) => boolean);     };     generator-block@suspension: {         advice: ((state: runtime["State"], 
kind: GeneratorKind, 
tag: atom["Tag"]) => void);         pointcut: ((kind: GeneratorKind, 
tag: atom["Tag"]) => boolean);     };     import@after: {         advice: ((state: runtime["State"], 
source: atom["Source"], 
specifier: atom["Specifier"] | null, 
value: runtime["OtherValue"], 
tag: atom["Tag"]) => runtime["StackValue"]);         pointcut: ((source: atom["Source"], 
specifier: atom["Specifier"] | null, 
tag: atom["Tag"]) => boolean);     };     intrinsic@after: {         advice: ((state: runtime["State"], 
name: Intrinsic, 
value: runtime["OtherValue"], 
tag: atom["Tag"]) => runtime["StackValue"]);         pointcut: ((name: Intrinsic, 
tag: atom["Tag"]) => boolean);     };     primitive@after: {         advice: ((state: runtime["State"], 
value: RuntimePrimitive & runtime["OtherValue"], 
tag: atom["Tag"]) => runtime["StackValue"]);         pointcut: ((primitive: RuntimePrimitive, 
tag: atom["Tag"]) => boolean);     };     program-block@after: {         advice: ((state: runtime["State"], 
kind: ProgramKind, 
value: runtime["StackValue"], 
tag: atom["Tag"]) => runtime["OtherValue"]);         pointcut: ((kind: ProgramKind, 
tag: atom["Tag"]) => boolean);     };     program-block@before: {         advice: ((state: runtime["State"], 
kind: ProgramKind, 
head: Header[], 
tag: atom["Tag"]) => void);         pointcut: ((kind: ProgramKind, 
tag: atom["Tag"]) => boolean);     };     read@after: {         advice: ((state: runtime["State"], 
identifier: Parameter | atom["Variable"], 
value: runtime["ScopeValue"], 
tag: atom["Tag"]) => runtime["StackValue"]);         pointcut: ((identifier: Parameter | atom["Variable"], 
tag: atom["Tag"]) => boolean);     };     segment-block@after: {         advice: ((state: runtime["State"], 
kind: SegmentKind, 
tag: atom["Tag"]) => void);         pointcut: ((kind: SegmentKind, 
tag: atom["Tag"]) => boolean);     };     segment-block@before: {         advice: ((state: runtime["State"], 
kind: SegmentKind, 
labels: atom["Label"][], 
tag: atom["Tag"]) => void);         pointcut: ((kind: SegmentKind, 
tag: atom["Tag"]) => boolean);     };     test@before: {         advice: ((state: runtime["State"], 
kind: TestKind, 
value: runtime["StackValue"], 
tag: atom["Tag"]) => runtime["OtherValue"]);         pointcut: ((kind: TestKind, 
tag: atom["Tag"]) => boolean);     };     write@before: {         advice: ((state: runtime["State"], 
identifier: Parameter | atom["Variable"], 
value: runtime["StackValue"], 
tag: atom["Tag"]) => runtime["ScopeValue"]);         pointcut: ((identifier: Parameter | atom["Variable"], 
tag: atom["Tag"]) => boolean);     };     yield@after: {         advice: ((state: runtime["State"], 
delegate: boolean, 
value: runtime["OtherValue"], 
tag: atom["Tag"]) => runtime["StackValue"]);         pointcut: ((delegate: boolean, 
tag: atom["Tag"]) => boolean);     };     yield@before: {         advice: ((state: runtime["State"], 
delegate: boolean, 
value: runtime["StackValue"], 
tag: atom["Tag"]) => runtime["OtherValue"]);         pointcut: ((delegate: boolean, 
tag: atom["Tag"]) => boolean);     }; } Type declaration
apply@around: { 
    advice: ((state: runtime["State"], callee: runtime["StackValue"], this_: runtime["StackValue"], arguments_: runtime["StackValue"][], tag: atom["Tag"]) => runtime["StackValue"]); 
    pointcut: ((tag: atom["Tag"]) => boolean); 
}
advice: ((state: runtime["State"], callee: runtime["StackValue"], this_: runtime["StackValue"], arguments_: runtime["StackValue"][], tag: atom["Tag"]) => runtime["StackValue"])
- (state, callee, this_, arguments_, tag): runtime["StackValue"]
 Returns runtime["StackValue"]
pointcut: ((tag: atom["Tag"]) => boolean)
- (tag): boolean
 Returns boolean
await@after: { 
    advice: ((state: runtime["State"], value: runtime["OtherValue"], tag: atom["Tag"]) => runtime["StackValue"]); 
    pointcut: ((tag: atom["Tag"]) => boolean); 
}
advice: ((state: runtime["State"], value: runtime["OtherValue"], tag: atom["Tag"]) => runtime["StackValue"])
- (state, value, tag): runtime["StackValue"]
 Returns runtime["StackValue"]
pointcut: ((tag: atom["Tag"]) => boolean)
- (tag): boolean
 Returns boolean
await@before: { 
    advice: ((state: runtime["State"], value: runtime["StackValue"], tag: atom["Tag"]) => runtime["OtherValue"]); 
    pointcut: ((tag: atom["Tag"]) => boolean); 
}
advice: ((state: runtime["State"], value: runtime["StackValue"], tag: atom["Tag"]) => runtime["OtherValue"])
- (state, value, tag): runtime["OtherValue"]
 Returns runtime["OtherValue"]
pointcut: ((tag: atom["Tag"]) => boolean)
- (tag): boolean
 Returns boolean
block@declaration: { 
    advice: ((state: runtime["State"], kind: ControlKind, frame: Frame<atom["Variable"], runtime["ScopeValue"]>, tag: atom["Tag"]) => void); 
    pointcut: ((kind: ControlKind, tag: atom["Tag"]) => boolean); 
}
advice: ((state: runtime["State"], kind: ControlKind, frame: Frame<atom["Variable"], runtime["ScopeValue"]>, tag: atom["Tag"]) => void)
- (state, kind, frame, tag): void
 Returns void
pointcut: ((kind: ControlKind, tag: atom["Tag"]) => boolean)
- (kind, tag): boolean
 Returns boolean
block@declaration-overwrite: { 
    advice: (<kind>(state: runtime["State"], kind: kind, frame: Frame<atom["Variable"], runtime["ScopeValue"]>, tag: atom["Tag"]) => Frame<atom["Variable"], runtime["ScopeValue"]>); 
    pointcut: ((kind: ControlKind, tag: atom["Tag"]) => boolean); 
}
block@setup: { 
    advice: ((state: runtime["State"], kind: ControlKind, tag: atom["Tag"]) => runtime["State"]); 
    pointcut: ((kind: ControlKind, tag: atom["Tag"]) => boolean); 
}
block@teardown: { 
    advice: ((state: runtime["State"], kind: ControlKind, tag: atom["Tag"]) => void); 
    pointcut: ((kind: ControlKind, tag: atom["Tag"]) => boolean); 
}
advice: ((state: runtime["State"], kind: ControlKind, tag: atom["Tag"]) => void)
- (state, kind, tag): void
 Returns void
pointcut: ((kind: ControlKind, tag: atom["Tag"]) => boolean)
- (kind, tag): boolean
 Returns boolean
block@throwing: { 
    advice: ((state: runtime["State"], kind: ControlKind, value: runtime["OtherValue"], tag: atom["Tag"]) => void); 
    pointcut: ((kind: ControlKind, tag: atom["Tag"]) => boolean); 
}
advice: ((state: runtime["State"], kind: ControlKind, value: runtime["OtherValue"], tag: atom["Tag"]) => void)
- (state, kind, value, tag): void
 Returns void
pointcut: ((kind: ControlKind, tag: atom["Tag"]) => boolean)
- (kind, tag): boolean
 Returns boolean
break@before: { 
    advice: ((state: runtime["State"], label: atom["Label"], tag: atom["Tag"]) => void); 
    pointcut: ((label: atom["Label"], tag: atom["Tag"]) => boolean); 
}
advice: ((state: runtime["State"], label: atom["Label"], tag: atom["Tag"]) => void)
- (state, label, tag): void
 Returns void
pointcut: ((label: atom["Label"], tag: atom["Tag"]) => boolean)
- (label, tag): boolean
 Returns boolean
closure-block@after: { 
    advice: ((state: runtime["State"], kind: ClosureKind, value: runtime["StackValue"], tag: atom["Tag"]) => runtime["OtherValue"]); 
    pointcut: ((kind: ClosureKind, tag: atom["Tag"]) => boolean); 
}
closure-block@before: { 
    advice: ((state: runtime["State"], kind: ClosureKind, tag: atom["Tag"]) => void); 
    pointcut: ((kind: ClosureKind, tag: atom["Tag"]) => boolean); 
}
advice: ((state: runtime["State"], kind: ClosureKind, tag: atom["Tag"]) => void)
- (state, kind, tag): void
 Returns void
pointcut: ((kind: ClosureKind, tag: atom["Tag"]) => boolean)
- (kind, tag): boolean
 Returns boolean
closure@after: { 
    advice: ((state: runtime["State"], kind: ClosureKind, closure: runtime["OtherValue"] & Function, tag: atom["Tag"]) => runtime["StackValue"]); 
    pointcut: ((kind: ClosureKind, tag: atom["Tag"]) => boolean); 
}
construct@around: { 
    advice: ((state: runtime["State"], callee: runtime["StackValue"], arguments_: runtime["StackValue"][], tag: atom["Tag"]) => runtime["StackValue"]); 
    pointcut: ((tag: atom["Tag"]) => boolean); 
}
advice: ((state: runtime["State"], callee: runtime["StackValue"], arguments_: runtime["StackValue"][], tag: atom["Tag"]) => runtime["StackValue"])
- (state, callee, arguments_, tag): runtime["StackValue"]
 Returns runtime["StackValue"]
pointcut: ((tag: atom["Tag"]) => boolean)
- (tag): boolean
 Returns boolean
drop@before: { 
    advice: ((state: runtime["State"], value: runtime["StackValue"], tag: atom["Tag"]) => runtime["OtherValue"]); 
    pointcut: ((tag: atom["Tag"]) => boolean); 
}
advice: ((state: runtime["State"], value: runtime["StackValue"], tag: atom["Tag"]) => runtime["OtherValue"])
- (state, value, tag): runtime["OtherValue"]
 Returns runtime["OtherValue"]
pointcut: ((tag: atom["Tag"]) => boolean)
- (tag): boolean
 Returns boolean
eval@after: { 
    advice: ((state: runtime["State"], value: runtime["OtherValue"], tag: atom["Tag"]) => runtime["StackValue"]); 
    pointcut: ((tag: atom["Tag"]) => boolean); 
}
advice: ((state: runtime["State"], value: runtime["OtherValue"], tag: atom["Tag"]) => runtime["StackValue"])
- (state, value, tag): runtime["StackValue"]
 Returns runtime["StackValue"]
pointcut: ((tag: atom["Tag"]) => boolean)
- (tag): boolean
 Returns boolean
eval@before: { 
    advice: ((state: runtime["State"], value: runtime["StackValue"], tag: atom["Tag"]) => runtime["OtherValue"]); 
    pointcut: ((tag: atom["Tag"]) => boolean); 
}
advice: ((state: runtime["State"], value: runtime["StackValue"], tag: atom["Tag"]) => runtime["OtherValue"])
- (state, value, tag): runtime["OtherValue"]
 Returns runtime["OtherValue"]
pointcut: ((tag: atom["Tag"]) => boolean)
- (tag): boolean
 Returns boolean
export@before: { 
    advice: ((state: runtime["State"], specifier: atom["Specifier"], value: runtime["StackValue"], tag: atom["Tag"]) => runtime["OtherValue"]); 
    pointcut: ((specifier: atom["Specifier"], tag: atom["Tag"]) => boolean); 
}
advice: ((state: runtime["State"], specifier: atom["Specifier"], value: runtime["StackValue"], tag: atom["Tag"]) => runtime["OtherValue"])
- (state, specifier, value, tag): runtime["OtherValue"]
 Returns runtime["OtherValue"]
pointcut: ((specifier: atom["Specifier"], tag: atom["Tag"]) => boolean)
- (specifier, tag): boolean
 Parameters
- specifier: atom["Specifier"]
 - tag: atom["Tag"]
 
Returns boolean
generator-block@resumption: { 
    advice: ((state: runtime["State"], kind: GeneratorKind, tag: atom["Tag"]) => void); 
    pointcut: ((kind: GeneratorKind, tag: atom["Tag"]) => boolean); 
}
advice: ((state: runtime["State"], kind: GeneratorKind, tag: atom["Tag"]) => void)
- (state, kind, tag): void
 Returns void
pointcut: ((kind: GeneratorKind, tag: atom["Tag"]) => boolean)
- (kind, tag): boolean
 Returns boolean
generator-block@suspension: { 
    advice: ((state: runtime["State"], kind: GeneratorKind, tag: atom["Tag"]) => void); 
    pointcut: ((kind: GeneratorKind, tag: atom["Tag"]) => boolean); 
}
advice: ((state: runtime["State"], kind: GeneratorKind, tag: atom["Tag"]) => void)
- (state, kind, tag): void
 Returns void
pointcut: ((kind: GeneratorKind, tag: atom["Tag"]) => boolean)
- (kind, tag): boolean
 Returns boolean
import@after: { 
    advice: ((state: runtime["State"], source: atom["Source"], specifier: atom["Specifier"] | null, value: runtime["OtherValue"], tag: atom["Tag"]) => runtime["StackValue"]); 
    pointcut: ((source: atom["Source"], specifier: atom["Specifier"] | null, tag: atom["Tag"]) => boolean); 
}
advice: ((state: runtime["State"], source: atom["Source"], specifier: atom["Specifier"] | null, value: runtime["OtherValue"], tag: atom["Tag"]) => runtime["StackValue"])
- (state, source, specifier, value, tag): runtime["StackValue"]
 Returns runtime["StackValue"]
pointcut: ((source: atom["Source"], specifier: atom["Specifier"] | null, tag: atom["Tag"]) => boolean)
- (source, specifier, tag): boolean
 Parameters
- source: atom["Source"]
 - specifier: atom["Specifier"] | null
 - tag: atom["Tag"]
 
Returns boolean
intrinsic@after: { 
    advice: ((state: runtime["State"], name: Intrinsic, value: runtime["OtherValue"], tag: atom["Tag"]) => runtime["StackValue"]); 
    pointcut: ((name: Intrinsic, tag: atom["Tag"]) => boolean); 
}
primitive@after: { 
    advice: ((state: runtime["State"], value: RuntimePrimitive & runtime["OtherValue"], tag: atom["Tag"]) => runtime["StackValue"]); 
    pointcut: ((primitive: RuntimePrimitive, tag: atom["Tag"]) => boolean); 
}
program-block@after: { 
    advice: ((state: runtime["State"], kind: ProgramKind, value: runtime["StackValue"], tag: atom["Tag"]) => runtime["OtherValue"]); 
    pointcut: ((kind: ProgramKind, tag: atom["Tag"]) => boolean); 
}
program-block@before: { 
    advice: ((state: runtime["State"], kind: ProgramKind, head: Header[], tag: atom["Tag"]) => void); 
    pointcut: ((kind: ProgramKind, tag: atom["Tag"]) => boolean); 
}
advice: ((state: runtime["State"], kind: ProgramKind, head: Header[], tag: atom["Tag"]) => void)
- (state, kind, head, tag): void
 Returns void
pointcut: ((kind: ProgramKind, tag: atom["Tag"]) => boolean)
- (kind, tag): boolean
 Returns boolean
read@after: { 
    advice: ((state: runtime["State"], identifier: Parameter | atom["Variable"], value: runtime["ScopeValue"], tag: atom["Tag"]) => runtime["StackValue"]); 
    pointcut: ((identifier: Parameter | atom["Variable"], tag: atom["Tag"]) => boolean); 
}
advice: ((state: runtime["State"], identifier: Parameter | atom["Variable"], value: runtime["ScopeValue"], tag: atom["Tag"]) => runtime["StackValue"])
- (state, identifier, value, tag): runtime["StackValue"]
 Returns runtime["StackValue"]
pointcut: ((identifier: Parameter | atom["Variable"], tag: atom["Tag"]) => boolean)
- (identifier, tag): boolean
 Returns boolean
segment-block@after: { 
    advice: ((state: runtime["State"], kind: SegmentKind, tag: atom["Tag"]) => void); 
    pointcut: ((kind: SegmentKind, tag: atom["Tag"]) => boolean); 
}
advice: ((state: runtime["State"], kind: SegmentKind, tag: atom["Tag"]) => void)
- (state, kind, tag): void
 Returns void
pointcut: ((kind: SegmentKind, tag: atom["Tag"]) => boolean)
- (kind, tag): boolean
 Returns boolean
segment-block@before: { 
    advice: ((state: runtime["State"], kind: SegmentKind, labels: atom["Label"][], tag: atom["Tag"]) => void); 
    pointcut: ((kind: SegmentKind, tag: atom["Tag"]) => boolean); 
}
advice: ((state: runtime["State"], kind: SegmentKind, labels: atom["Label"][], tag: atom["Tag"]) => void)
- (state, kind, labels, tag): void
 Returns void
pointcut: ((kind: SegmentKind, tag: atom["Tag"]) => boolean)
- (kind, tag): boolean
 Returns boolean
test@before: { 
    advice: ((state: runtime["State"], kind: TestKind, value: runtime["StackValue"], tag: atom["Tag"]) => runtime["OtherValue"]); 
    pointcut: ((kind: TestKind, tag: atom["Tag"]) => boolean); 
}
write@before: { 
    advice: ((state: runtime["State"], identifier: Parameter | atom["Variable"], value: runtime["StackValue"], tag: atom["Tag"]) => runtime["ScopeValue"]); 
    pointcut: ((identifier: Parameter | atom["Variable"], tag: atom["Tag"]) => boolean); 
}
advice: ((state: runtime["State"], identifier: Parameter | atom["Variable"], value: runtime["StackValue"], tag: atom["Tag"]) => runtime["ScopeValue"])
- (state, identifier, value, tag): runtime["ScopeValue"]
 Returns runtime["ScopeValue"]
pointcut: ((identifier: Parameter | atom["Variable"], tag: atom["Tag"]) => boolean)
- (identifier, tag): boolean
 Returns boolean
yield@after: { 
    advice: ((state: runtime["State"], delegate: boolean, value: runtime["OtherValue"], tag: atom["Tag"]) => runtime["StackValue"]); 
    pointcut: ((delegate: boolean, tag: atom["Tag"]) => boolean); 
}
advice: ((state: runtime["State"], delegate: boolean, value: runtime["OtherValue"], tag: atom["Tag"]) => runtime["StackValue"])
- (state, delegate, value, tag): runtime["StackValue"]
 Returns runtime["StackValue"]
pointcut: ((delegate: boolean, tag: atom["Tag"]) => boolean)
- (delegate, tag): boolean
 Parameters
- delegate: boolean
 - tag: atom["Tag"]
 
Returns boolean
yield@before: { 
    advice: ((state: runtime["State"], delegate: boolean, value: runtime["StackValue"], tag: atom["Tag"]) => runtime["OtherValue"]); 
    pointcut: ((delegate: boolean, tag: atom["Tag"]) => boolean); 
}
advice: ((state: runtime["State"], delegate: boolean, value: runtime["StackValue"], tag: atom["Tag"]) => runtime["OtherValue"])
- (state, delegate, value, tag): runtime["OtherValue"]
 Returns runtime["OtherValue"]
pointcut: ((delegate: boolean, tag: atom["Tag"]) => boolean)
- (delegate, tag): boolean
 Parameters
- delegate: boolean
 - tag: atom["Tag"]
 
Returns boolean
The standard weaving API expects a global value at
config.advice_variablethat holds all the advice functions. It is simpler to use than the flexible weaving API but it does let the user define the static information provided to the advice functions.