import type { VariableDeclarationKind } from "../parse.js";
import type { InterpreterSnapshot, InterpreterValue } from "./interpreter.js";
type ScopeLookupResult = {
    found: true;
    kind: VariableDeclarationKind;
    value: InterpreterValue;
} | {
    found: false;
};
type ScopeOptions = {
    functionBoundary?: boolean;
    chargeData?: boolean;
};
export declare class Scope {
    #private;
    private readonly parent?;
    private readonly importMeta?;
    private readonly options;
    constructor(bindings?: Record<string, InterpreterValue>, parent?: Scope | undefined, importMeta?: InterpreterValue, options?: ScopeOptions, restoredBindings?: Record<string, InterpreterValue>);
    child(bindings?: Record<string, InterpreterValue>, options?: ScopeOptions): Scope;
    consumeRestoredBinding(name: string): {
        found: true;
        value: InterpreterValue;
    } | {
        found: false;
    };
    hasOwnBinding(name: string): boolean;
    getOwnBindingKind(name: string): VariableDeclarationKind | undefined;
    isFunctionBoundary(): boolean;
    iterationChild(names: readonly string[]): Scope;
    lookupImportMeta(): InterpreterValue;
    retainedValues(): InterpreterValue[];
    declare(name: string, kind: VariableDeclarationKind, value: InterpreterValue): void;
    declareVar(name: string): void;
    predeclare(name: string, kind: VariableDeclarationKind): void;
    assign(name: string, value: InterpreterValue): void;
    lookup(name: string): ScopeLookupResult;
    snapshot(): InterpreterSnapshot;
    copyInitializedBindingsFrom(source: Scope, names: readonly string[]): void;
    private resolveScope;
    private requireInitializedBinding;
}
export {};
