/**
 * 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_<n>` 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_<n>` name. */
    nextBlockName(): string;
}
