The machine now owns the scheduler: job queue, inbox, parked awaits, unhandled
rejections, and promise operations. An await cuts the stack at the innermost
async boundary (the program's frame or an async function's call frame) and
parks the frames on the promise as data. Host calls are HostCall records the
machine hands to the driver at its stops; blocking host work is a blocking
HostCall. The generator evaluator, runner.ts, and CODEMODE_EVALUATOR are gone.
Program code can now run as explicit frames on a stack stepped by a loop (src/machine)
instead of host generators. Each frame is a kind, a node, a phase, slots and a scope chain;
expressions that cannot run program code still finish inline within one step. Abrupt
completions unwind frame by frame through try, for...of and array-pattern handlers.
Async bodies, generator bodies and calls the runner starts are machine tasks the runner
drives as activation bodies; built-ins that call program code run as opaque native frames
whose program calls become frames. CODEMODE_EVALUATOR=machine selects it; the generator
evaluator stays the default.
Move the operators, property references, hoisting and iterator checks that never run
program code out of the generator evaluator into operations.ts, and the driver's signal
and activation types out of runner.ts into signals.ts, which needs no Effect at run time.
The machine evaluator builds on both.