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;
}