settingset Events, EntryBreakpoint, 0
varnew $outer, 0
varnew $inner, 0
varnew $after_outer, 0
varnew $plugin_direct_mode, 1
init tests/scriptcmd_call.exe
bp scriptcmd_call:OuterHit
SetBreakpointSilent scriptcmd_call:OuterHit, 1
bp scriptcmd_call:InnerHit
SetBreakpointSilent scriptcmd_call:InnerHit, 1
run
testassert $outer == 1, "plugin-direct outer callback ran exactly once"
testassert $inner == 1, "plugin-direct inner callback ran exactly once"
testassert $after_outer == 1, "plugin-direct outer callback resumed after nested inner callback"
plugindirectassert
ret

onouter:
testassert $outer == 0, "plugin-direct outer callback entered once"
mov $outer, 1
run
testassert $inner == 1, "plugin-direct inner callback finished before outer resumed"
mov $after_outer, 1
run
ret

oninner:
testassert $outer == 1, "plugin-direct outer callback frame is active during nested inner callback"
testassert $inner == 0, "plugin-direct inner callback entered once"
mov $inner, 1
ret
