import { Variable } from "../variable";
import { Reference, ImplicitGlobal } from "../reference";
import { ScopeManager } from "../scopeManager";
import { Definition } from "../definition";
import * as ESTree from "estree";
export declare type ScopeType = "TDZ" | "module" | "block" | "switch" | "function" | "catch" | "with" | "function" | "class" | "global" | "function-expression-name" | "for";
export declare class Scope<BlockType extends ESTree.Node = ESTree.Node> {
    readonly type: ScopeType;
    readonly upper: Scope | null;
    readonly block: BlockType;
    dynamic: boolean;
    variableScope: Scope;
    functionExpressionScope: boolean;
    directCallToEvalScope: boolean;
    thisFound: boolean;
    __left: Reference[] | null;
    isStrict: boolean;
    readonly set: Map<string, Variable>;
    readonly taints: Map<string, boolean>;
    readonly through: Reference[];
    readonly variables: Variable[];
    readonly references: Reference[];
    readonly childScopes: Scope[];
    readonly __declaredVariables: WeakMap<any, Variable[]>;
    constructor(scopeManager: ScopeManager, type: ScopeType, upper: Scope | null, block: BlockType, isMethodDefinition: boolean);
    __shouldStaticallyClose(scopeManager: ScopeManager): any;
    __shouldStaticallyCloseForGlobal(ref: Reference): boolean;
    __staticCloseRef(ref: Reference): void;
    __dynamicCloseRef(ref: Reference): void;
    __globalCloseRef(ref: Reference): void;
    __close(scopeManager: ScopeManager): Scope<ESTree.Node> | null;
    __isValidResolution(ref: Reference, variable: Variable): boolean;
    __resolve(ref: Reference): boolean;
    __delegateToUpperScope(ref: Reference): void;
    __addDeclaredVariablesOfNode(variable: Variable, node: ESTree.Node | undefined): void;
    protected __defineGeneric(name: string, set: Map<string, Variable>, variables: Variable[], node: any, def?: Definition): Variable;
    __define(node: ESTree.Node, def: Definition): Variable | null;
    __referencing(node: ESTree.Node, assign?: number, writeExpr?: ESTree.Expression, maybeImplicitGlobal?: ImplicitGlobal, partial?: boolean, init?: boolean, isExportingFromLocal?: boolean): Reference | undefined;
    __detectEval(): void;
    __detectThis(): void;
    __isClosed(): boolean;
    resolve(ident: ESTree.Identifier): Reference | null;
    isStatic(): boolean;
    isArgumentsMaterialized(): boolean;
    isThisMaterialized(): boolean;
    isUsedName(name: string): boolean;
}