import { AbstractModuleRecord } from '../modules.mts'; import { ReferenceRecord, UndefinedValue, ObjectValue, Value, BooleanValue, JSStringValue } from '../value.mts'; import { type GCMarker } from '../host-defined/engine.mts'; import { NormalCompletion, type ValueEvaluator } from '../completion.mts'; import { JSStringMap } from '../utils/container.mts'; import type { PlainEvaluator } from '../evaluator.mts'; import { type ECMAScriptFunctionObject, type FunctionObject } from '#self'; /** https://tc39.es/ecma262/#sec-environment-records */ export declare abstract class EnvironmentRecord { readonly OuterEnv: EnvironmentRecord | null; constructor(outerEnv: EnvironmentRecord | null); abstract HasBinding(N: JSStringValue): ValueEvaluator; abstract CreateMutableBinding(N: JSStringValue, D: BooleanValue): PlainEvaluator; abstract CreateImmutableBinding(N: JSStringValue, S: BooleanValue): void; abstract InitializeBinding(N: JSStringValue, V: Value): PlainEvaluator; abstract SetMutableBinding(N: JSStringValue, V: Value, S: BooleanValue): PlainEvaluator; abstract GetBindingValue(N: JSStringValue, S: BooleanValue): ValueEvaluator; abstract DeleteBinding(N: JSStringValue): ValueEvaluator; abstract HasThisBinding(): BooleanValue; abstract HasSuperBinding(): BooleanValue; abstract WithBaseObject(): ObjectValue | UndefinedValue; mark(m: GCMarker): void; } interface DeclarativeEnvironmentBinding { readonly indirect: boolean; initialized: boolean; readonly mutable?: boolean; readonly strict?: boolean; readonly deletable?: boolean; value?: Value | undefined; mark(m: GCMarker): void; } interface ModuleEnvironmentBinding extends DeclarativeEnvironmentBinding { readonly target: [AbstractModuleRecord, JSStringValue]; } /** https://tc39.es/ecma262/#sec-declarative-environment-records */ export declare class DeclarativeEnvironmentRecord extends EnvironmentRecord { readonly bindings: JSStringMap; /** https://tc39.es/ecma262/#sec-declarative-environment-records-hasbinding-n */ HasBinding(N: JSStringValue): Generator | BooleanValue, unknown>; /** https://tc39.es/ecma262/#sec-declarative-environment-records-createmutablebinding-n-d */ CreateMutableBinding(N: JSStringValue, D: BooleanValue): Generator, unknown>; /** https://tc39.es/ecma262/#sec-declarative-environment-records-createimmutablebinding-n-s */ CreateImmutableBinding(N: JSStringValue, S: BooleanValue): NormalCompletion; /** https://tc39.es/ecma262/#sec-declarative-environment-records-initializebinding-n-v */ InitializeBinding(N: JSStringValue, V: Value): Generator, unknown>; /** https://tc39.es/ecma262/#sec-declarative-environment-records-setmutablebinding-n-v-s */ SetMutableBinding(N: JSStringValue, V: Value, S: BooleanValue): PlainEvaluator; /** https://tc39.es/ecma262/#sec-declarative-environment-records-getbindingvalue-n-s */ GetBindingValue(N: JSStringValue, _S: BooleanValue): ValueEvaluator; /** https://tc39.es/ecma262/#sec-declarative-environment-records-deletebinding-n */ DeleteBinding(N: JSStringValue): Generator | BooleanValue, unknown>; /** https://tc39.es/ecma262/#sec-declarative-environment-records-hasthisbinding */ HasThisBinding(): BooleanValue; /** https://tc39.es/ecma262/#sec-declarative-environment-records-hassuperbinding */ HasSuperBinding(): BooleanValue; /** https://tc39.es/ecma262/#sec-declarative-environment-records-withbaseobject */ WithBaseObject(): UndefinedValue; mark(m: GCMarker): void; } /** https://tc39.es/ecma262/#sec-function-environment-records */ export declare class FunctionEnvironmentRecord extends DeclarativeEnvironmentRecord { /** https://tc39.es/ecma262/#sec-newfunctionenvironment */ constructor(F: ECMAScriptFunctionObject, newTarget: UndefinedValue | ObjectValue); protected ThisValue: Value; ThisBindingStatus: 'lexical' | 'uninitialized' | 'initialized'; readonly FunctionObject: ECMAScriptFunctionObject; readonly NewTarget: UndefinedValue | ObjectValue; /** https://tc39.es/ecma262/#sec-bindthisvalue */ BindThisValue(V: Value): import("#self").ThrowCompletion | Value; /** https://tc39.es/ecma262/#sec-function-environment-records-hasthisbinding */ HasThisBinding(): BooleanValue | BooleanValue; /** https://tc39.es/ecma262/#sec-function-environment-records-hassuperbinding */ HasSuperBinding(): BooleanValue | BooleanValue; /** https://tc39.es/ecma262/#sec-function-environment-records-getthisbinding */ GetThisBinding(): import("#self").ThrowCompletion | Value; /** https://tc39.es/ecma262/#sec-getsuperbase */ GetSuperBase(): import("#self").NullValue | ObjectValue | UndefinedValue; mark(m: GCMarker): void; } /** https://tc39.es/ecma262/#sec-module-environment-records */ export declare class ModuleEnvironmentRecord extends DeclarativeEnvironmentRecord { readonly bindings: JSStringMap; /** https://tc39.es/ecma262/#sec-module-environment-records-getbindingvalue-n-s */ GetBindingValue(N: JSStringValue, S: BooleanValue): ValueEvaluator; /** https://tc39.es/ecma262/#sec-module-environment-records-deletebinding-n */ DeleteBinding(): never; /** https://tc39.es/ecma262/#sec-module-environment-records-hasthisbinding */ HasThisBinding(): BooleanValue; /** https://tc39.es/ecma262/#sec-module-environment-records-getthisbinding */ GetThisBinding(): UndefinedValue; /** https://tc39.es/ecma262/#sec-createimportbinding */ CreateImportBinding(N: JSStringValue, M: AbstractModuleRecord, N2: JSStringValue): NormalCompletion; } /** https://tc39.es/ecma262/#sec-object-environment-records */ export declare class ObjectEnvironmentRecord extends EnvironmentRecord { BindingObject: ObjectValue; IsWithEnvironment: BooleanValue; /** https://tc39.es/ecma262/#sec-newobjectenvironment */ constructor(O: ObjectValue, W: BooleanValue, E: EnvironmentRecord | null); /** https://tc39.es/ecma262/#sec-object-environment-records-hasbinding-n */ HasBinding(N: JSStringValue): ValueEvaluator; /** https://tc39.es/ecma262/#sec-object-environment-records-createmutablebinding-n-d */ CreateMutableBinding(N: JSStringValue, D: BooleanValue): PlainEvaluator; /** https://tc39.es/ecma262/#sec-object-environment-records-createimmutablebinding-n-s */ CreateImmutableBinding(_N: JSStringValue, _S: BooleanValue): void; /** https://tc39.es/ecma262/#sec-object-environment-records-initializebinding-n-v */ InitializeBinding(N: JSStringValue, V: Value): PlainEvaluator; /** https://tc39.es/ecma262/#sec-object-environment-records-setmutablebinding-n-v-s */ SetMutableBinding(N: JSStringValue, V: Value, S: BooleanValue): PlainEvaluator; /** https://tc39.es/ecma262/#sec-object-environment-records-getbindingvalue-n-s */ GetBindingValue(N: JSStringValue, S: BooleanValue): ValueEvaluator; /** https://tc39.es/ecma262/#sec-object-environment-records-deletebinding-n */ DeleteBinding(N: JSStringValue): ValueEvaluator; /** https://tc39.es/ecma262/#sec-object-environment-records-hasthisbinding */ HasThisBinding(): BooleanValue; /** https://tc39.es/ecma262/#sec-object-environment-records-hassuperbinding */ HasSuperBinding(): BooleanValue; /** https://tc39.es/ecma262/#sec-object-environment-records-withbaseobject */ WithBaseObject(): ObjectValue | UndefinedValue; mark(m: GCMarker): void; } /** https://tc39.es/ecma262/#sec-global-environment-records */ export declare class GlobalEnvironmentRecord extends EnvironmentRecord { readonly ObjectRecord: ObjectEnvironmentRecord; readonly GlobalThisValue: ObjectValue; readonly DeclarativeRecord: DeclarativeEnvironmentRecord; /** https://tc39.es/ecma262/#sec-newglobalenvironment */ constructor(G: ObjectValue, thisValue: ObjectValue); /** https://tc39.es/ecma262/#sec-global-environment-records-hasbinding-n */ HasBinding(N: JSStringValue): Generator>, import("#self").EvaluatorNextType>; /** https://tc39.es/ecma262/#sec-global-environment-records-createmutablebinding-n-d */ CreateMutableBinding(N: JSStringValue, D: BooleanValue): Generator | import("#self").ThrowCompletion, unknown>; /** https://tc39.es/ecma262/#sec-global-environment-records-createimmutablebinding-n-s */ CreateImmutableBinding(N: JSStringValue, S: BooleanValue): NormalCompletion | import("#self").ThrowCompletion; /** https://tc39.es/ecma262/#sec-global-environment-records-initializebinding-n-v */ InitializeBinding(N: JSStringValue, V: Value): Generator, import("#self").EvaluatorNextType>; /** https://tc39.es/ecma262/#sec-global-environment-records-setmutablebinding-n-v-s */ SetMutableBinding(N: JSStringValue, V: Value, S: BooleanValue): PlainEvaluator; /** https://tc39.es/ecma262/#sec-global-environment-records-getbindingvalue-n-s */ GetBindingValue(N: JSStringValue, S: BooleanValue): ValueEvaluator; /** https://tc39.es/ecma262/#sec-global-environment-records-deletebinding-n */ DeleteBinding(N: JSStringValue): PlainEvaluator; /** https://tc39.es/ecma262/#sec-global-environment-records-hasthisbinding */ HasThisBinding(): BooleanValue; /** https://tc39.es/ecma262/#sec-global-environment-records-hassuperbinding */ HasSuperBinding(): BooleanValue; /** https://tc39.es/ecma262/#sec-global-environment-records-withbaseobject */ WithBaseObject(): UndefinedValue; /** https://tc39.es/ecma262/#sec-global-environment-records-getthisbinding */ GetThisBinding(): ObjectValue; /** https://tc39.es/ecma262/#sec-haslexicaldeclaration */ HasLexicalDeclaration(N: JSStringValue): Generator | BooleanValue, unknown>; /** https://tc39.es/ecma262/#sec-hasrestrictedglobalproperty */ HasRestrictedGlobalProperty(N: JSStringValue): ValueEvaluator; /** https://tc39.es/ecma262/#sec-candeclareglobalvar */ CanDeclareGlobalVar(N: JSStringValue): ValueEvaluator; /** https://tc39.es/ecma262/#sec-candeclareglobalfunction */ CanDeclareGlobalFunction(N: JSStringValue): ValueEvaluator; /** https://tc39.es/ecma262/#sec-createglobalvarbinding */ CreateGlobalVarBinding(N: JSStringValue, D: BooleanValue): PlainEvaluator; /** https://tc39.es/ecma262/#sec-createglobalfunctionbinding */ CreateGlobalFunctionBinding(N: JSStringValue, V: FunctionObject, D: BooleanValue): PlainEvaluator; mark(m: GCMarker): void; } export type EnvironmentRecordWithThisBinding = FunctionEnvironmentRecord | GlobalEnvironmentRecord | ModuleEnvironmentRecord; /** https://tc39.es/ecma262/#sec-getidentifierreference */ export declare function GetIdentifierReference(env: EnvironmentRecord | null, name: JSStringValue, strict: BooleanValue): PlainEvaluator; export {}; //# sourceMappingURL=Environment.d.mts.map