/** * Tracks the per-statement bookkeeping that the TypeScriptBuilder needs to * generate stepped function bodies, loop break/continue cleanup, and * uniquely-named block helpers. * * Four distinct concerns live here because they are all driven by the same * `processBodyAsParts` traversal and need to be threaded through the same * call chain: * * - **subStepPath**: integer path identifying the current statement inside a * stepped body, e.g. `[3, 1]` means "statement 1 of the substep block * that is statement 3 of the enclosing body". Used to name `__substep_*` * helpers, build branch keys, and tag source-map / checkpoint records. * - **loopContextStack**: the substep key of every loop currently being * emitted, so break/continue inside a nested loop knows which loop to * target. * - **forkBlockDepth**: nesting level of fork/race block bodies. A non-zero * value means we are inside another fork's block body, which changes how * the inner block carries forward its `__bstack`. * - **blockCounter**: monotonically increasing counter used to mint unique * `__block_` names for emitted block helpers. */ export declare class StepPathTracker { private path; private loopStack; private forkDepth; private blockCounter; push(id: number): void; pop(): void; /** The last id in the path; throws if the path is empty. */ currentId(): number; /** Joined string form, e.g. `"3.1.0"`. Used for branch keys and interrupt ids. */ joined(separator?: string): string; /** Defensive copy of the current path, e.g. for source-map records. */ snapshot(): number[]; pushLoop(subKey: string): void; popLoop(): void; /** Sub-key of the innermost enclosing stepped loop, or undefined if none. */ currentLoopKey(): string | undefined; enterForkBlock(): void; exitForkBlock(): void; isNestedInForkBlock(): boolean; /** Returns the next unique `__block_` name. */ nextBlockName(): string; }