UNPKG

81.7 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../src/environment.js"],"names":["sourceMap","require","deriveGetBinding","realm","binding","types","TypesDomain","topVal","values","ValuesDomain","generator","undefined","deriveAbstract","havocBinding","environment","value","hasLeaked","recordModifiedBinding","realmGenerator","intrinsics","emitBindingAssignment","mutable","EnvironmentRecord","constructor","isReadOnly","id","nextId","HasBinding","N","CreateMutableBinding","D","isGlobal","CreateImmutableBinding","S","skipRecord","InitializeBinding","V","SetMutableBinding","GetBindingValue","DeleteBinding","HasThisBinding","GetThisBinding","HasSuperBinding","WithBaseObject","BindThisValue","DeclarativeEnvironmentRecord","bindings","Object","create","frozen","envRec","initialized","deletable","name","mightHaveBeenCaptured","strict","empty","_S","createErrorThrowCompletion","ReferenceError","Havoc","TypeError","ObjectEnvironmentRecord","obj","object","foundBinding","withEnvironment","unscopables","SymbolUnscopables","ObjectValue","AbstractObjectValue","blocked","To","ToBooleanPartial","throwIfNotConcrete","configValue","BooleanValue","Properties","DefinePropertyOrThrow","writable","enumerable","configurable","Set","$Delete","FunctionEnvironmentRecord","$ThisBindingStatus","$ThisValue","$HomeObject","GetSuperBase","home","$GetPrototypeOf","GlobalEnvironmentRecord","DclRec","$DeclarativeRecord","ObjRec","$ObjectRecord","globalObject","existingProp","status","varNames","$VarNames","indexOf","splice","$GlobalThisValue","HasVarDeclaration","varDeclaredNames","HasLexicalDeclaration","HasRestrictedGlobalProperty","$GetOwnProperty","ThrowIfMightHaveBeenDeleted","CanDeclareGlobalVar","hasProperty","CanDeclareGlobalFunction","CreateGlobalVarBinding","extensible","push","CreateGlobalFunctionBinding","desc","uid","LexicalEnvironment","destroyed","_uid","destroy","environmentRecord","assignToGlobal","globalAst","rvalue","globalValue","evaluate","PutValue","partiallyEvaluateCompletionDeref","ast","strictCode","metadata","result","partial_ast","partial_io","partiallyEvaluateCompletion","Reference","Environment","GetValue","partiallyEvaluate","err","Completion","Error","FatalError","evaluateCompletionDeref","evaluateCompletion","AbruptCompletion","evaluateAbstractCompletion","evaluateAbstract","concatenateAndParse","sources","sourceType","asts","code","directives","source","node","statistics","parsing","measure","fileContents","filePath","sourceMapContents","length","fixupSourceLocations","fixup_source_locations","fixupFilenames","fixup_filenames","concat","program","body","e","ThrowCompletion","error","message","_SafeGetDataPropertyValue","StringValue","location","start","line","column","end","diagnostic","CompilerDiagnostic","handleError","t","file","executeSources","onParse","context","ExecutionContext","lexicalEnvironment","variableEnvironment","pushContext","res","evaluation","popContext","onDestroyScope","activeLexicalEnvironments","size","executePartialEvaluator","options","defaultOptions","partialAST","type","fileAst","prog","sourceMaps","execute","filename","map","smc","SourceMapConsumer","loc","fixup","fixup_comments","leadingComments","innerComments","trailingComments","new_loc","new_pos","old_pos","originalPositionFor","comments","c","cloc","debuggerInstance","checkForActions","Value","currentLocation","testTimeout","evaluator","evaluators","evaluatedNodes","evaluateDeref","partialEvaluator","partialEvaluators","mightBecomeAnObject","base","getType","PrimitiveValue","SymbolValue","NumberValue","IntegralValue","refName","thisValue","referencedName","AbstractValue","mightNotBeString","mightNotBeNumber","isSimpleObject","$Realm","isInPureScope"],"mappings":"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","sourcesContent":["/**\n * Copyright (c) 2017-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n/* @flow */\n\nimport type {\n BabelNode,\n BabelNodeComment,\n BabelNodeFile,\n BabelNodeLVal,\n BabelNodePosition,\n BabelNodeStatement,\n BabelNodeSourceLocation,\n} from \"@babel/types\";\nimport type { Realm } from \"./realm.js\";\nimport type { SourceFile, SourceMap, SourceType } from \"./types.js\";\nimport * as t from \"@babel/types\";\n\nimport { AbruptCompletion, Completion, ThrowCompletion } from \"./completions.js\";\nimport { CompilerDiagnostic, FatalError } from \"./errors.js\";\nimport { defaultOptions } from \"./options.js\";\nimport type { PartialEvaluatorOptions } from \"./options\";\nimport { ExecutionContext } from \"./realm.js\";\nimport {\n AbstractValue,\n NullValue,\n SymbolValue,\n BooleanValue,\n FunctionValue,\n NumberValue,\n IntegralValue,\n ObjectValue,\n AbstractObjectValue,\n StringValue,\n UndefinedValue,\n Value,\n} from \"./values/index.js\";\nimport generate from \"@babel/generator\";\nimport parse from \"./utils/parse.js\";\nimport invariant from \"./invariant.js\";\nimport traverseFast from \"./utils/traverse-fast.js\";\nimport { HasProperty, Get, IsExtensible, HasOwnProperty, IsDataDescriptor } from \"./methods/index.js\";\nimport { Environment, Havoc, Properties, To } from \"./singletons.js\";\nimport { TypesDomain, ValuesDomain } from \"./domains/index.js\";\nimport PrimitiveValue from \"./values/PrimitiveValue.js\";\nimport { createOperationDescriptor } from \"./utils/generator.js\";\n\nconst sourceMap = require(\"source-map\");\n\nfunction deriveGetBinding(realm: Realm, binding: Binding) {\n let types = TypesDomain.topVal;\n let values = ValuesDomain.topVal;\n invariant(realm.generator !== undefined);\n return realm.generator.deriveAbstract(types, values, [], createOperationDescriptor(\"GET_BINDING\", { binding }));\n}\n\nexport function havocBinding(binding: Binding): void {\n let realm = binding.environment.realm;\n let value = binding.value;\n if (!binding.hasLeaked) {\n realm.recordModifiedBinding(binding).hasLeaked = true;\n if (value !== undefined) {\n let realmGenerator = realm.generator;\n if (realmGenerator !== undefined && value !== realm.intrinsics.undefined)\n realmGenerator.emitBindingAssignment(binding, value);\n if (binding.mutable === true) {\n // For mutable, i.e. non-const bindings, the actual value is no longer directly available.\n // Thus, we reset the value to undefined to prevent any use of the last known value.\n binding.value = undefined;\n }\n }\n }\n}\n\n// ECMA262 8.1.1\nexport class EnvironmentRecord {\n realm: Realm;\n isReadOnly: boolean;\n $NewTarget: void | ObjectValue;\n id: number;\n\n static nextId: number = 0;\n\n constructor(realm: Realm) {\n invariant(realm, \"expected realm\");\n this.realm = realm;\n this.isReadOnly = false;\n this.id = EnvironmentRecord.nextId++;\n }\n\n HasBinding(N: string): boolean {\n invariant(false, \"abstract method; please override\");\n }\n\n CreateMutableBinding(N: string, D: boolean, isGlobal?: boolean): Value {\n invariant(false, \"abstract method; please override\");\n }\n\n CreateImmutableBinding(N: string, S: boolean, isGlobal?: boolean, skipRecord?: boolean): Value {\n invariant(false, \"abstract method; please override\");\n }\n\n InitializeBinding(N: string, V: Value, skipRecord?: boolean): Value {\n invariant(false, \"abstract method; please override\");\n }\n\n SetMutableBinding(N: string, V: Value, S: boolean): Value {\n invariant(false, \"abstract method; please override\");\n }\n\n GetBindingValue(N: string, S: boolean): Value {\n invariant(false, \"abstract method; please override\");\n }\n\n DeleteBinding(N: string): boolean {\n invariant(false, \"abstract method; please override\");\n }\n\n HasThisBinding(): boolean {\n invariant(false, \"abstract method; please override\");\n }\n\n GetThisBinding(): NullValue | ObjectValue | AbstractObjectValue | UndefinedValue {\n invariant(false, \"abstract method; please override\");\n }\n\n HasSuperBinding(): boolean {\n invariant(false, \"abstract method; please override\");\n }\n\n WithBaseObject(): Value {\n invariant(false, \"abstract method; please override\");\n }\n\n BindThisValue(\n V: NullValue | ObjectValue | AbstractObjectValue | UndefinedValue\n ): NullValue | ObjectValue | AbstractObjectValue | UndefinedValue {\n invariant(false, \"abstract method; please override\");\n }\n}\n\nexport type Binding = {\n value?: Value,\n initialized?: boolean,\n mutable?: boolean,\n deletable?: boolean,\n strict?: boolean,\n // back-references to the environment containing the binding and the key\n // used to access this binding\n environment: EnvironmentRecord,\n name: string,\n isGlobal: boolean,\n mightHaveBeenCaptured: boolean,\n // bindings that are assigned to inside loops with abstract termination conditions need temporal locations\n phiNode?: AbstractValue,\n hasLeaked: boolean,\n};\n\n// ECMA262 8.1.1.1\nexport class DeclarativeEnvironmentRecord extends EnvironmentRecord {\n constructor(realm: Realm) {\n super(realm);\n this.bindings = (Object.create(null): any);\n this.frozen = false;\n }\n\n bindings: { [name: string]: Binding };\n // Frozen Records cannot have bindings created or deleted but can have bindings updated\n frozen: boolean;\n\n // ECMA262 8.1.1.1.1\n HasBinding(N: string): boolean {\n // 1. Let envRec be the declarative Environment Record for which the method was invoked.\n let envRec = this;\n\n // 2. If envRec has a binding for the name that is the value of N, return true.\n if (envRec.bindings[N]) return true;\n\n // 3. Return false.\n return false;\n }\n\n // ECMA262 8.1.1.1.2\n CreateMutableBinding(N: string, D: boolean, isGlobal: boolean = false): Value {\n invariant(!this.frozen);\n let realm = this.realm;\n\n // 1. Let envRec be the declarative Environment Record for which the method was invoked.\n let envRec = this;\n\n // 2. Assert: envRec does not already have a binding for N.\n invariant(!envRec.bindings[N], `shouldn't have the binding ${N}`);\n\n // 3. Create a mutable binding in envRec for N and record that it is uninitialized. If D is true, record that the newly created binding may be deleted by a subsequent DeleteBinding call.\n this.bindings[N] = realm.recordModifiedBinding({\n initialized: false,\n mutable: true,\n deletable: D,\n environment: envRec,\n name: N,\n isGlobal: isGlobal,\n mightHaveBeenCaptured: false,\n hasLeaked: false,\n });\n\n // 4. Return NormalCompletion(empty).\n return realm.intrinsics.undefined;\n }\n\n // ECMA262 8.1.1.1.3\n CreateImmutableBinding(N: string, S: boolean, isGlobal: boolean = false, skipRecord: boolean = false): Value {\n invariant(!this.frozen);\n let realm = this.realm;\n\n // 1. Let envRec be the declarative Environment Record for which the method was invoked.\n let envRec = this;\n\n // 2. Assert: envRec does not already have a binding for N.\n invariant(!envRec.bindings[N], `shouldn't have the binding ${N}`);\n\n // 3. Create an immutable binding in envRec for N and record that it is uninitialized. If S is true, record that the newly created binding is a strict binding.\n let binding = {\n initialized: false,\n strict: S,\n deletable: false,\n environment: envRec,\n name: N,\n isGlobal: isGlobal,\n mightHaveBeenCaptured: false,\n hasLeaked: false,\n };\n this.bindings[N] = skipRecord ? binding : realm.recordModifiedBinding(binding);\n\n // 4. Return NormalCompletion(empty).\n return realm.intrinsics.undefined;\n }\n\n // ECMA262 8.1.1.1.4\n InitializeBinding(N: string, V: Value, skipRecord: boolean = false): Value {\n // 1. Let envRec be the declarative Environment Record for which the method was invoked.\n let envRec = this;\n\n let binding = envRec.bindings[N];\n\n // 2. Assert: envRec must have an uninitialized binding for N.\n invariant(binding && binding.initialized !== true, `shouldn't have the binding ${N}`);\n\n // 3. Set the bound value for N in envRec to V.\n if (!skipRecord) this.realm.recordModifiedBinding(binding, V).value = V;\n else binding.value = V;\n\n // 4. Record that the binding for N in envRec has been initialized.\n binding.initialized = true;\n\n // 5. Return NormalCompletion(empty).\n return this.realm.intrinsics.empty;\n }\n\n // ECMA262 8.1.1.1.5\n SetMutableBinding(N: string, V: Value, _S: boolean): Value {\n let S = _S;\n // We can mutate frozen bindings because of captured bindings.\n let realm = this.realm;\n\n // 1. Let envRec be the declarative Environment Record for which the method was invoked.\n let envRec = this;\n\n let binding = envRec.bindings[N];\n\n // 2. If envRec does not have a binding for N, then\n if (!binding) {\n // a. If S is true, throw a ReferenceError exception.\n if (S) {\n throw realm.createErrorThrowCompletion(realm.intrinsics.ReferenceError, `${N} not found`);\n }\n\n // b. Perform envRec.CreateMutableBinding(N, true).\n envRec.CreateMutableBinding(N, true);\n\n // c. Perform envRec.InitializeBinding(N, V).\n envRec.InitializeBinding(N, V);\n\n // d. Return NormalCompletion(empty).\n return this.realm.intrinsics.empty;\n }\n\n // 3. If the binding for N in envRec is a strict binding, let S be true.\n if (binding.strict === true) S = true;\n\n // 4. If the binding for N in envRec has not yet been initialized, throw a ReferenceError exception.\n if (binding.initialized !== true) {\n throw realm.createErrorThrowCompletion(realm.intrinsics.ReferenceError, `${N} has not yet been initialized`);\n } else if (binding.mutable) {\n // 5. Else if the binding for N in envRec is a mutable binding, change its bound value to V.\n if (binding.hasLeaked) {\n Havoc.value(realm, V);\n invariant(realm.generator);\n realm.generator.emitBindingAssignment(binding, V);\n } else {\n realm.recordModifiedBinding(binding, V).value = V;\n }\n } else {\n // 6. Else,\n // a. Assert: This is an attempt to change the value of an immutable binding.\n\n // b. If S is true, throw a TypeError exception.\n if (S) {\n throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError, \"attempt to change immutable binding\");\n }\n }\n\n // 7. Return NormalCompletion(empty).\n return this.realm.intrinsics.empty;\n }\n\n // ECMA262 8.1.1.1.6\n GetBindingValue(N: string, S: boolean): Value {\n let realm = this.realm;\n\n // 1. Let envRec be the declarative Environment Record for which the method was invoked.\n let envRec = this;\n\n let binding = envRec.bindings[N];\n\n // 2. Assert: envRec has a binding for N.\n invariant(binding, \"expected binding\");\n\n // 3. If the binding for N in envRec is an uninitialized binding, throw a ReferenceError exception.\n if (!binding.initialized) {\n throw realm.createErrorThrowCompletion(realm.intrinsics.ReferenceError);\n }\n\n // 4. Return the value currently bound to N in envRec.\n if (binding.hasLeaked && binding.mutable) {\n return deriveGetBinding(realm, binding);\n }\n invariant(binding.value);\n return binding.value;\n }\n\n // ECMA262 8.1.1.1.7\n DeleteBinding(N: string): boolean {\n invariant(!this.frozen);\n // 1. Let envRec be the declarative Environment Record for which the method was invoked.\n let envRec = this;\n\n // 2. Assert: envRec has a binding for the name that is the value of N.\n invariant(envRec.bindings[N], \"expected binding to exist\");\n\n // 3. If the binding for N in envRec cannot be deleted, return false.\n if (!envRec.bindings[N].deletable) return false;\n\n // 4. Remove the binding for N from envRec.\n this.realm.recordModifiedBinding(envRec.bindings[N]).value = undefined;\n delete envRec.bindings[N];\n\n // 5. Return true.\n return true;\n }\n\n // ECMA262 8.1.1.1.8\n HasThisBinding(): boolean {\n // 1. Return false.\n return false;\n }\n\n // ECMA262 8.1.1.1.9\n HasSuperBinding(): boolean {\n // 1. Return false.\n return false;\n }\n\n // ECMA262 8.1.1.1.10\n WithBaseObject(): Value {\n // 1. Return undefined.\n return this.realm.intrinsics.undefined;\n }\n}\n\n// ECMA262 8.1.1.2\nexport class ObjectEnvironmentRecord extends EnvironmentRecord {\n object: ObjectValue | AbstractObjectValue;\n withEnvironment: boolean;\n\n constructor(realm: Realm, obj: ObjectValue | AbstractObjectValue) {\n super(realm);\n this.object = obj;\n }\n\n // ECMA262 8.1.1.2.1\n HasBinding(N: string): boolean {\n let realm = this.realm;\n\n // 1. Let envRec be the object Environment Record for which the method was invoked.\n let envRec = this;\n\n // 2. Let bindings be the binding object for envRec.\n let bindings = this.object;\n\n // 3. Let foundBinding be ? HasProperty(bindings, N).\n let foundBinding = HasProperty(realm, bindings, N);\n\n // 4. If foundBinding is false, return false.\n if (!foundBinding) return false;\n\n // 5. If the withEnvironment flag of envRec is false, return true.\n if (!envRec.withEnvironment) return true;\n\n // 6. Let unscopables be ? Get(bindings, @@unscopables).\n let unscopables = Get(realm, bindings, realm.intrinsics.SymbolUnscopables);\n\n // 7. If Type(unscopables) is Object, then\n if (unscopables instanceof ObjectValue || unscopables instanceof AbstractObjectValue) {\n // a. Let blocked be ToBoolean(? Get(unscopables, N)).\n let blocked = To.ToBooleanPartial(realm, Get(realm, unscopables, N));\n\n // b. If blocked is true, return false.\n if (blocked) return false;\n }\n unscopables.throwIfNotConcrete();\n\n // 8. Return true.\n return true;\n }\n\n // ECMA262 8.1.1.2.2\n CreateMutableBinding(N: string, D: boolean): Value {\n let realm = this.realm;\n\n // 1. Let envRec be the object Environment Record for which the method was invoked.\n let envRec = this;\n\n // 2. Let bindings be the binding object for envRec.\n let bindings = envRec.object;\n\n // 3. If D is true, let configValue be true; otherwise let configValue be false.\n let configValue = D ? true : false;\n\n // 4. Return ? DefinePropertyOrThrow(bindings, N, PropertyDescriptor{[[Value]]: undefined, [[Writable]]: true, [[Enumerable]]: true, [[Configurable]]: configValue}).\n return new BooleanValue(\n realm,\n Properties.DefinePropertyOrThrow(realm, bindings, N, {\n value: realm.intrinsics.undefined,\n writable: true,\n enumerable: true,\n configurable: configValue,\n })\n );\n }\n\n // ECMA262 8.1.1.2.3\n CreateImmutableBinding(N: string, S: boolean): Value {\n // The concrete Environment Record method CreateImmutableBinding is never used within this specification in association with object Environment Records.\n invariant(false);\n }\n\n // ECMA262 8.1.1.2.4\n InitializeBinding(N: string, V: Value): Value {\n // 1. Let envRec be the object Environment Record for which the method was invoked.\n let envRec = this;\n\n // 2. Assert: envRec must have an uninitialized binding for N.\n // 3. Record that the binding for N in envRec has been initialized.\n\n // 4. Return ? envRec.SetMutableBinding(N, V, false).\n return envRec.SetMutableBinding(N, V, false);\n }\n\n // ECMA262 8.1.1.2.5\n SetMutableBinding(N: string, V: Value, S: boolean): Value {\n let realm = this.realm;\n\n // 1. Let envRec be the object Environment Record for which the method was invoked.\n let envRec = this;\n\n // 2. Let bindings be the binding object for envRec.\n let bindings = envRec.object;\n\n // 3. Return ? Set(bindings, N, V, S).\n return new BooleanValue(realm, Properties.Set(realm, bindings, N, V, S));\n }\n\n // ECMA262 8.1.1.2.6\n GetBindingValue(N: string, S: boolean): Value {\n let realm = this.realm;\n\n // 1. Let envRec be the object Environment Record for which the method was invoked.\n let envRec = this;\n\n // 2. Let bindings be the binding object for envRec.\n let bindings = envRec.object;\n\n // 3. Let value be ? HasProperty(bindings, N).\n let value = HasProperty(realm, bindings, N);\n\n // 4. If value is false, then\n if (!value) {\n // a. If S is false, return the value undefined; otherwise throw a ReferenceError exception.\n if (!S) {\n return realm.intrinsics.undefined;\n } else {\n throw realm.createErrorThrowCompletion(realm.intrinsics.ReferenceError);\n }\n }\n\n // 5. Return ? Get(bindings, N).\n return Get(realm, bindings, N);\n }\n\n // ECMA262 8.1.1.2.7\n DeleteBinding(N: string): boolean {\n // 1. Let envRec be the object Environment Record for which the method was invoked.\n let envRec = this;\n\n // 2. Let bindings be the binding object for envRec.\n let bindings = envRec.object;\n\n // 3. Return ? bindings.[[Delete]](N).\n return bindings.$Delete(N);\n }\n\n // ECMA262 8.1.1.2.8\n HasThisBinding(): boolean {\n // 1. Return false.\n return false;\n }\n\n // ECMA262 8.1.1.2.9\n HasSuperBinding(): boolean {\n // 1. Return false.\n return false;\n }\n\n // ECMA262 8.1.1.2.10\n WithBaseObject(): Value {\n // 1. Let envRec be the object Environment Record for which the method was invoked.\n let envRec = this;\n\n // 2. If the withEnvironment flag of envRec is true, return the binding object for envRec.\n if (envRec.withEnvironment) return envRec.object;\n\n // 3. Otherwise, return undefined.\n return this.realm.intrinsics.undefined;\n }\n}\n\n// ECMA262 8.1.1.3\nexport class FunctionEnvironmentRecord extends DeclarativeEnvironmentRecord {\n $ThisBindingStatus: \"lexical\" | \"initialized\" | \"uninitialized\";\n $ThisValue: UndefinedValue | NullValue | ObjectValue | AbstractObjectValue;\n $HomeObject: void | ObjectValue;\n $FunctionObject: FunctionValue;\n\n // ECMA262 8.1.1.3.1\n BindThisValue(\n V: NullValue | ObjectValue | AbstractObjectValue | UndefinedValue\n ): NullValue | ObjectValue | AbstractObjectValue | UndefinedValue {\n let realm = this.realm;\n\n // 1. Let envRec be the function Environment Record for which the method was invoked.\n let envRec = this;\n\n // 2. Assert: envRec.[[ThisBindingStatus]] is not \"lexical\".\n invariant(envRec.$ThisBindingStatus !== \"lexical\", \"this binding status shouldn't be lexical\");\n\n // 3. If envRec.[[ThisBindingStatus]] is \"initialized\", throw a ReferenceError exception.\n if (envRec.$ThisBindingStatus === \"initialized\") {\n throw realm.createErrorThrowCompletion(realm.intrinsics.ReferenceError);\n }\n\n // 4. Set envRec.[[ThisValue]] to V.\n envRec.$ThisValue = V;\n\n // 5. Set envRec.[[ThisBindingStatus]] to \"initialized\".\n envRec.$ThisBindingStatus = \"initialized\";\n\n // 6. Return V.\n return V;\n }\n\n // ECMA262 8.1.1.3.2\n HasThisBinding(): boolean {\n // 1. Let envRec be the function Environment Record for which the method was invoked.\n let envRec = this;\n\n // 2. If envRec.[[ThisBindingStatus]] is \"lexical\", return false; otherwise, return true.\n return envRec.$ThisBindingStatus === \"lexical\" ? false : true;\n }\n\n // ECMA262 8.1.1.3.3\n HasSuperBinding(): boolean {\n // 1. Let envRec be the function Environment Record for which the method was invoked.\n let envRec = this;\n\n // 2. If envRec.[[ThisBindingStatus]] is \"lexical\", return false.\n if (envRec.$ThisBindingStatus === \"lexical\") return false;\n\n // 3. If envRec.[[HomeObject]] has the value undefined, return false; otherwise, return true.\n if (envRec.$HomeObject === undefined) {\n return false;\n } else {\n return true;\n }\n }\n\n // ECMA262 8.1.1.3.4\n GetThisBinding(): NullValue | ObjectValue | AbstractObjectValue | UndefinedValue {\n let realm = this.realm;\n\n // 1. Let envRec be the function Environment Record for which the method was invoked.\n let envRec = this;\n\n // 2. Assert: envRec.[[ThisBindingStatus]] is not \"lexical\".\n invariant(envRec.$ThisBindingStatus !== \"lexical\", \"this binding status shouldn't be lexical\");\n\n // 3. If envRec.[[ThisBindingStatus]] is \"uninitialized\", throw a ReferenceError exception.\n if (envRec.$ThisBindingStatus === \"uninitialized\") {\n throw realm.createErrorThrowCompletion(realm.intrinsics.ReferenceError);\n }\n\n // 4. Return envRec.[[ThisValue]].\n return envRec.$ThisValue;\n }\n\n // ECMA262 8.1.1.3.5\n GetSuperBase(): ObjectValue | AbstractObjectValue | NullValue | UndefinedValue {\n // 1. Let envRec be the function Environment Record for which the method was invoked.\n let envRec = this;\n\n // 2. Let home be the value of envRec.[[HomeObject]].\n let home = envRec.$HomeObject;\n\n // 3. If home has the value undefined, return undefined.\n if (home === undefined) return this.realm.intrinsics.undefined;\n\n // 4. Assert: Type(home) is Object.\n invariant(home instanceof ObjectValue, \"expected object value\");\n\n // 5. Return ? home.[[GetPrototypeOf]]().\n return home.$GetPrototypeOf();\n }\n}\n\n// ECMA262 8.1.1.4\nexport class GlobalEnvironmentRecord extends EnvironmentRecord {\n $DeclarativeRecord: EnvironmentRecord;\n $ObjectRecord: ObjectEnvironmentRecord;\n $VarNames: Array<string>;\n $GlobalThisValue: ObjectValue;\n\n // ECMA262 8.1.1.4.1\n HasBinding(N: string): boolean {\n // 1. Let envRec be the global Environment Record for which the method was invoked.\n let envRec = this;\n\n // 2. Let DclRec be envRec.[[DeclarativeRecord]].\n let DclRec = envRec.$DeclarativeRecord;\n\n // 3. If DclRec.HasBinding(N) is true, return true.\n if (DclRec.HasBinding(N)) return true;\n\n // 4. Let ObjRec be envRec.[[ObjectRecord]].\n let ObjRec = envRec.$ObjectRecord;\n\n // 5. Return ? ObjRec.HasBinding(N).\n return ObjRec.HasBinding(N);\n }\n\n // ECMA262 8.1.1.4.2\n CreateMutableBinding(N: string, D: boolean): Value {\n let realm = this.realm;\n\n // 1. Let envRec be the global Environment Record for which the method was invoked.\n let envRec = this;\n\n // 2. Let DclRec be envRec.[[DeclarativeRecord]].\n let DclRec = envRec.$DeclarativeRecord;\n\n // 3. If DclRec.HasBinding(N) is true, throw a TypeError exception.\n if (DclRec.HasBinding(N)) {\n throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);\n }\n\n // 4. Return DclRec.CreateMutableBinding(N, D).\n return DclRec.CreateMutableBinding(N, D, true);\n }\n\n // ECMA262 8.1.1.4.3\n CreateImmutableBinding(N: string, S: boolean): Value {\n let realm = this.realm;\n\n // 1. Let envRec be the global Environment Record for which the method was invoked.\n let envRec = this;\n\n // 2. Let DclRec be envRec.[[DeclarativeRecord]].\n let DclRec = envRec.$DeclarativeRecord;\n\n // 3. If DclRec.HasBinding(N) is true, throw a TypeError exception.\n if (DclRec.HasBinding(N)) {\n throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);\n }\n\n // 4. Return DclRec.CreateImmutableBinding(N, S).\n return DclRec.CreateImmutableBinding(N, S, true);\n }\n\n // ECMA262 8.1.1.4.4\n InitializeBinding(N: string, V: Value): Value {\n // 1. Let envRec be the global Environment Record for which the method was invoked.\n let envRec = this;\n\n // 2. Let DclRec be envRec.[[DeclarativeRecord]].\n let DclRec = envRec.$DeclarativeRecord;\n\n // 3. If DclRec.HasBinding(N) is true, then\n if (DclRec.HasBinding(N)) {\n // a. Return DclRec.InitializeBinding(N, V).\n return DclRec.InitializeBinding(N, V);\n }\n\n // 4. Assert: If the binding exists, it must be in the object Environment Record.\n\n // 5. Let ObjRec be envRec.[[ObjectRecord]].\n let ObjRec = envRec.$ObjectRecord;\n\n // 6. Return ? ObjRec.InitializeBinding(N, V).\n return ObjRec.InitializeBinding(N, V);\n }\n\n // ECMA262 8.1.1.4.5\n SetMutableBinding(N: string, V: Value, S: boolean): Value {\n // 1. Let envRec be the global Environment Record for which the method was invoked.\n let envRec = this;\n\n // 2. Let DclRec be envRec.[[DeclarativeRecord]].\n let DclRec = envRec.$DeclarativeRecord;\n\n // 3. If DclRec.HasBinding(N) is true, then\n if (DclRec.HasBinding(N)) {\n // a. Return DclRec.SetMutableBinding(N, V, S).\n return DclRec.SetMutableBinding(N, V, S);\n }\n\n // 4. Let ObjRec be envRec.[[ObjectRecord]].\n let ObjRec = envRec.$ObjectRecord;\n\n // 5. Return ? ObjRec.SetMutableBinding(N, V, S).\n return ObjRec.SetMutableBinding(N, V, S);\n }\n\n // ECMA262 8.1.1.4.6\n GetBindingValue(N: string, S: boolean): Value {\n // 1. Let envRec be the global Environment Record for which the method was invoked.\n let envRec = this;\n\n // 2. Let DclRec be envRec.[[DeclarativeRecord]].\n let DclRec = envRec.$DeclarativeRecord;\n\n // 3. If DclRec.HasBinding(N) is true, then\n if (DclRec.HasBinding(N)) {\n // a. Return DclRec.GetBindingValue(N, S).\n return DclRec.GetBindingValue(N, S);\n }\n\n // 4. Let ObjRec be envRec.[[ObjectRecord]].\n let ObjRec = envRec.$ObjectRecord;\n\n // 5. Return ? ObjRec.GetBindingValue(N, S).\n return ObjRec.GetBindingValue(N, S);\n }\n\n // ECMA262 8.1.1.4.7\n DeleteBinding(N: string): boolean {\n let realm = this.realm;\n\n // 1. Let envRec be the global Environment Record for which the method was invoked.\n let envRec = this;\n\n // 2. Let DclRec be envRec.[[DeclarativeRecord]].\n let DclRec = envRec.$DeclarativeRecord;\n\n // 3. If DclRec.HasBinding(N) is true, then\n if (DclRec.HasBinding(N)) {\n // a. Return DclRec.DeleteBinding(N).\n return DclRec.DeleteBinding(N);\n }\n\n // 4. Let ObjRec be envRec.[[ObjectRecord]].\n let ObjRec = envRec.$ObjectRecord;\n\n // 5. Let globalObject be the binding object for ObjRec.\n let globalObject = ObjRec.object;\n\n // 6. Let existingProp be ? HasOwnProperty(globalObject, N).\n let existingProp = HasOwnProperty(realm, globalObject, N);\n\n // 7. If existingProp is true, then\n if (existingProp) {\n // a. Let status be ? ObjRec.DeleteBinding(N).\n let status = ObjRec.DeleteBinding(N);\n\n // b. If status is true, then\n if (status) {\n // i. Let varNames be envRec.[[VarNames]].\n let varNames = envRec.$VarNames;\n\n // ii. If N is an element of varNames, remove that element from the varNames.\n if (varNames.indexOf(N) >= 0) {\n varNames.splice(varNames.indexOf(N), 1);\n }\n }\n\n // c. Return status.\n return status;\n }\n\n // 8. Return true.\n return true;\n }\n\n // ECMA262 8.1.1.4.8\n HasThisBinding(): boolean {\n // 1. Return true.\n return true;\n }\n\n // ECMA262 8.1.1.4.9\n HasSuperBinding(): boolean {\n // 1. Return true.\n return true;\n }\n\n // ECMA262 8.1.1.4.10\n WithBaseObject(): Value {\n // 1. Return undefined.\n return this.realm.intrinsics.undefined;\n }\n\n // ECMA262 8.1.1.4.11\n GetThisBinding(): NullValue | ObjectValue | AbstractObjectValue | UndefinedValue {\n // 1. Let envRec be the global Environment Record for which the method was invoked.\n let envRec = this;\n\n invariant(envRec.$GlobalThisValue);\n // 2. Return envRec.[[GlobalThisValue]].\n return envRec.$GlobalThisValue;\n }\n\n // ECMA262 8.1.1.4.12\n HasVarDeclaration(N: string): boolean {\n // 1. Let envRec be the global Environment Record for which the method was invoked.\n let envRec = this;\n\n // 2. Let varDeclaredNames be envRec.[[VarNames]].\n let varDeclaredNames = envRec.$VarNames;\n\n // 3. If varDeclaredNames contains the value of N, return true.\n if (varDeclaredNames.indexOf(N) >= 0) return true;\n\n // 4. Return false.\n return false;\n }\n\n // ECMA262 8.1.1.4.13\n HasLexicalDeclaration(N: string): boolean {\n // 1. Let envRec be the global Environment Record for which the method was invoked.\n let envRec = this;\n\n // 2. Let DclRec be envRec.[[DeclarativeRecord]].\n let DclRec = envRec.$DeclarativeRecord;\n\n // 3. Return DclRec.HasBinding(N).\n return DclRec.HasBinding(N);\n }\n\n // ECMA262 8.1.1.4.14\n HasRestrictedGlobalProperty(N: string): boolean {\n // 1. Let envRec be the global Environment Record for which the method was invoked.\n let envRec = this;\n\n // 2. Let ObjRec be envRec.[[ObjectRecord]].\n let ObjRec = envRec.$ObjectRecord;\n\n // 3. Let globalObject be the binding object for ObjRec.\n let globalObject = ObjRec.object;\n\n // 4. Let existingProp be ? globalObject.[[GetOwnProperty]](N).\n let existingProp = globalObject.$GetOwnProperty(N);\n\n // 5. If existingProp is undefined, return false.\n if (!existingProp) return false;\n Properties.ThrowIfMightHaveBeenDeleted(existingProp.value);\n\n // 6. If existingProp.[[Configurable]] is true, return false.\n if (existingProp.configurable) return false;\n\n // 7. Return true.\n return true;\n }\n\n // ECMA262 8.1.1.4.15\n CanDeclareGlobalVar(N: string): boolean {\n let realm = this.realm;\n\n // 1. Let envRec be the global Environment Record for which the method was invoked.\n let envRec = this;\n\n // 2. Let ObjRec be envRec.[[ObjectRecord]].\n let ObjRec = envRec.$ObjectRecord;\n\n // 3. Let globalObject be the binding object for ObjRec.\n let globalObject = ObjRec.object;\n\n // 4. Let hasProperty be ? HasOwnProperty(globalObject, N).\n let hasProperty = HasOwnProperty(realm, globalObject, N);\n\n // 5. If hasProperty is true, return true.\n if (hasProperty) return true;\n\n // 6. Return ? IsExtensible(globalObject).\n return IsExtensible(realm, globalObject);\n }\n\n // ECMA262 8.1.1.4.16\n CanDeclareGlobalFunction(N: string): boolean {\n let realm = this.realm;\n\n // 1. Let envRec be the global Environment Record for which the method was invoked.\n let envRec = this;\n\n // 2. Let ObjRec be envRec.[[ObjectRecord]].\n let ObjRec = envRec.$ObjectRecord;\n\n // 3. Let globalObject be the binding object for ObjRec.\n let globalObject = ObjRec.object;\n\n // 4. Let existingProp be ? globalObject.[[GetOwnProperty]](N).\n let existingProp = globalObject.$GetOwnProperty(N);\n\n // 5. If existingProp is undefined, return ? IsExtensible(globalObject).\n if (!existingProp) return IsExtensible(realm, globalObject);\n Properties.ThrowIfMightHaveBeenDeleted(existingProp.value);\n\n // 6. If existingProp.[[Configurable]] is true, return true.\n if (existingProp.configurable) return true;\n\n // 7. If IsDataDescriptor(existingProp) is true and existingProp has attribute values {[[Writable]]: true, [[Enumerable]]: true}, return true.\n if (IsDataDescriptor(realm, existingProp) && existingProp.writable && existingProp.enumerable) {\n return true;\n }\n\n // 8. Return false.\n return false;\n }\n\n // ECMA262 8.1.1.4.17\n CreateGlobalVarBinding(N: string, D: boolean) {\n let realm = this.realm;\n\n // 1. Let envRec be the global Environment Record for which the method was invoked.\n let envRec = this;\n\n // 2. Let ObjRec be envRec.[[ObjectRecord]].\n let ObjRec = envRec.$ObjectRecord;\n\n // 3. Let globalObject be the binding object for ObjRec.\n let globalObject = ObjRec.object;\n\n // 4. Let hasProperty be ? HasOwnProperty(globalObject, N).\n let hasProperty = HasOwnProperty(realm, globalObject, N);\n\n // 5. Let extensible be ? IsExtensible(globalObject).\n let extensible = IsExtensible(realm, globalObject);\n\n // 6. If hasProperty is false and extensible is true, then\n if (!hasProperty && extensible) {\n // a. Perform ? ObjRec.CreateMutableBinding(N, D).\n ObjRec.CreateMutableBinding(N, D);\n\n // b. Perform ? ObjRec.InitializeBinding(N, undefined).\n ObjRec.InitializeBinding(N, this.realm.intrinsics.undefined);\n }\n\n // 7. Let varDeclaredNames be envRec.[[VarNames]].\n let varDeclaredNames = envRec.$VarNames;\n\n // 8. If varDeclaredNames does not contain the value of N, then\n if (varDeclaredNames.indexOf(N) < 0) {\n // a. Append N to varDeclaredNames.\n varDeclaredNames.push(N);\n }\n\n // 9. Return NormalCompletion(empty).\n }\n\n // ECMA262 8.1.1.4.18\n CreateGlobalFunctionBinding(N: string, V: Value, D: boolean): void {\n // 1. Let envRec be the global Environment Record for which the method was invoked.\n let envRec = this;\n\n // 2. Let ObjRec be envRec.[[ObjectRecord]].\n let ObjRec = envRec.$ObjectRecord;\n\n // 3. Let globalObject be the binding object for ObjRec.\n let globalObject = ObjRec.object;\n\n // 4. Let existingProp be ? globalObject.[[GetOwnProperty]](N).\n let existingProp = globalObject.$GetOwnProperty(N);\n\n // 5. If existingProp is undefined or existingProp.[[Configurable]] is true, then\n let desc;\n if (!existingProp || existingProp.configurable) {\n // a. Let desc be the PropertyDescriptor{[[Value]]: V, [[Writable]]: true, [[Enumerable]]: true, [[Configurable]]: D}.\n desc = { value: V, writable: true, enumerable: true, configurable: D };\n } else {\n // 6. Else,\n Properties.ThrowIfMightHaveBeenDeleted(existingProp.value);\n // a. Let desc be the PropertyDescriptor{[[Value]]: V }.\n desc = { value: V };\n }\n\n // 7. Perform ? DefinePropertyOrThrow(globalObject, N, desc).\n Properties.DefinePropertyOrThrow(this.realm, globalObject, N, desc);\n\n // 8. Record that the binding for N in ObjRec has been initialized.\n\n // 9. Perform ? Set(globalObject, N, V, false).\n Properties.Set(this.realm, globalObject, N, V, false);\n\n // 10. Let varDeclaredNames be envRec.[[VarNames]].\n let varDeclaredNames = envRec.$VarNames;\n\n // 11. If varDeclaredNames does not contain the value of N, then\n if (varDeclaredNames.indexOf(N) < 0) {\n // a. Append N to varDeclaredNames.\n varDeclaredNames.push(N);\n }\n\n // 12. Return NormalCompletion(empty).\n }\n}\n\n// ECMA262 8.1\nlet uid = 0;\nexport class LexicalEnvironment {\n constructor(realm: Realm) {\n invariant(realm, \"expected realm\");\n this.realm = realm;\n this.destroyed = false;\n this._uid = uid++;\n }\n\n // For debugging it is convenient to have an ID for each of these.\n _uid: number;\n destroyed: boolean;\n environmentRecord: EnvironmentRecord;\n parent: null | LexicalEnvironment;\n realm: Realm;\n\n destroy(): void {\n this.destroyed = true;\n // Once the containing environment is destroyed, we can no longer add or remove entries from the environmentRecord\n // (but we can update existing values).\n if (this.environmentRecord instanceof DeclarativeEnvironmentRecord) {\n this.environmentRecord.frozen = true;\n }\n }\n\n assignToGlobal(globalAst: BabelNodeLVal, rvalue: Value): void {\n let globalValue = this.evaluate(globalAst, false);\n Properties.PutValue(this.realm, globalValue, rvalue);\n }\n\n partiallyEvaluateCompletionDeref(\n ast: BabelNode,\n strictCode: boolean,\n metadata?: any\n ): [Completion | Value, BabelNode, Array<BabelNodeStatement>] {\n let [result, partial_ast, partial_io] = this.partiallyEvaluateCompletion(ast, strictCode, metadata);\n if (result instanceof Reference) {\n result = Environment.GetValue(this.realm, result);\n }\n return [result, partial_ast, partial_io];\n }\n\n partiallyEvaluateCompletion(\n ast: BabelNode,\n strictCode: boolean,\n metadata?: any\n ): [Completion | Reference | Value, BabelNode, Array<BabelNodeStatement>] {\n try {\n return this.partiallyEvaluate(ast, strictCode, metadata);\n } catch (err) {\n if (err instanceof Completion) return [err, ast, []];\n if (err instanceof Error)\n // rethrowing Error should preserve stack trace\n throw err;\n // let's wrap into a proper Error to create stack trace\n throw new FatalError(err);\n }\n }\n\n evaluateCompletionDeref(ast: BabelNode, strictCode: boolean, metadata?: any): AbruptCompletion | Value {\n let result = this.evaluateCompletion(ast, strictCode, metadata);\n if (result instanceof Reference) result = Environment.GetValue(this.realm, result);\n return result;\n }\n\n evaluateCompletion(ast: BabelNode, strictCode: boolean, metadata?: any): AbruptCompletion | Value | Reference {\n try {\n return this.evaluate(ast, strictCode, metadata);\n } catch (err) {\n if (err instanceof AbruptCompletion) return err;\n if (err instanceof Error)\n // rethrowing Error should preserve stack trace\n throw err;\n // let's wrap into a proper Error to create stack trace\n throw new FatalError(err);\n }\n }\n\n evaluateAbstractCompletion(ast: BabelNode, strictCode: boolean, metadata?: any): Completion | Value | Reference {\n try {\n return this.evaluateAbstract(ast, strictCode, metadata);\n } catch (err) {\n if (err instanceof Completion) return err;\n if (err instanceof Error)\n // rethrowing Error should preserve stack trace\n throw err;\n // let's wrap into a proper Error to create stack trace\n if (err instanceof Object) throw new FatalError(err.constructor.name + \": \" + err);\n throw new FatalError(err);\n }\n }\n\n concatenateAndParse(\n sources: Array<SourceFile>,\n sourceType: SourceType = \"script\"\n ): [BabelNodeFile, { [string]: string }] {\n let asts = [];\n let code = {};\n let directives = [];\n for (let source of sources) {\n try {\n let node = this.realm.statistics.parsing.measure(() =>\n parse(this.realm, source.fileContents, source.filePath, sourceType)\n );\n\n let sourceMapContents = source.sourceMapContents;\n if (sourceMapContents && sourceMapContents.length > 0) {\n this.realm.statistics.fixupSourceLocations.measure(() =>\n this.fixup_source_locations(node, sourceMapContents)\n );\n }\n\n this.realm.statistics.fixupFilenames.measure(() => this.fixup_filenames(node));\n\n asts = asts.concat(node.program.body);\n code[source.filePath] = source.fileContents;\n directives = directives.concat(node.program.directives);\n } catch (e) {\n if (e instanceof ThrowCompletion) {\n let error = e.value;\n if (error instanceof ObjectValue) {\n let message = error._SafeGetDataPropertyValue(\"message\");\n if (message instanceof StringValue) {\n message.value = `Syntax error: ${message.value}`;\n e.location.source = source.filePath;\n // the position was not located properly on the\n // syntax errors happen on one given position, so start position = end position\n e.location.start = { line: e.location.line, column: e.location.column };\n e.location.end = { line: e.location.line, column: e.location.column };\n let diagnostic = new CompilerDiagnostic(message.value, e.location, \"PP1004\", \"FatalError\");\n this.realm.handleError(diagnostic);\n throw new FatalError(message.value);\n }\n }\n }\n throw e;\n }\n }\n return [t.file(t.program(asts, directives)), code];\n }\n\n executeSources(\n sources: Array<SourceFile>,\n sourceType: SourceType = \"script\",\n onParse: void | (BabelNodeFile => void) = undefined\n ): [AbruptCompletion | Value, { [string]: string }] {\n let context = new ExecutionContext();\n context.lexicalEnvironment = this;\n context.variableEnvironment = this;\n context.realm = this.realm;\n this.realm.pushContext(context);\n let res, code;\n try {\n let ast;\n [ast, code] = this.concatenateAndParse(sources, sourceType);\n if (onParse) onParse(ast);\n res = this.realm.statistics.evaluation.measure(() => this.evaluateCompletion(ast, false));\n } finally {\n this.realm.popContext(context);\n this.realm.onDestroyScope(context.lexicalEnvironment);\n if (!this.destroyed) this.realm.onDestroyScope(this);\n invariant(\n this.realm.activeLexicalEnvironments.size === 0,\n `expected 0 active lexical environments, got ${this.realm.activeLexicalEnvironments.size}`\n );\n }\n if (res instanceof AbruptCompletion) return [res, code];\n\n return [Environment.GetValue(this.realm, res), code];\n }\n\n executePartialEvaluator(\n sources: Array<SourceFile>,\n options: PartialEvaluatorOptions = defaultOptions,\n sourceType: SourceType = \"script\"\n ): AbruptCompletion | { code: string, map?: SourceMap } {\n let [ast, code] = this.concatenateAndParse(sources, sourceType);\n let context = new ExecutionContext();\n context.lexicalEnvironment = this;\n context.variableEnvironment = this;\n context.realm = this.realm;\n this.realm.pushContext(context);\n let partialAST;\n try {\n [, partialAST] = this.partiallyEvaluateCompletionDeref(ast, false);\n } finally {\n this.realm.popContext(context);\n this.realm.onDestroyScope(context.lexicalEnvironment);\n if (!this.destroyed) this.realm.onDestroyScope(this);\n invariant(\n this.realm.activeLexicalEnvironments.size === 0,\n `expected 0 active lexical environments, got ${this.realm.activeLexicalEnvironments.size}`\n );\n }\n invariant(partialAST.type === \"File\");\n let fileAst = ((partialAST: any): BabelNodeFile);\n let prog = t.program(fileAst.program.body, ast.program.directives);\n this.fixup_filenames(prog);\n // The type signature for generate is not complete, hence the any\n return generate(prog, { sourceMaps: options.sourceMaps }, (code: any));\n }\n\n execute(\n code: string,\n filename: string,\n map: string = \"\",\n sourceType: SourceType = \"script\",\n onParse: void | (BabelNodeFile => void) = undefined\n ): AbruptCompletion | Value {\n let context = new ExecutionContext();\n context.lexicalEnvironment = this;\n context.variableEnvironment = this;\n context.realm = this.realm;\n\n this.realm.pushContext(context);\n\n let ast, res;\n try {\n try {\n ast = parse(this.realm, code, filename, sourceType);\n } catch (e) {\n if (e instanceof ThrowCompletion) return e;\n throw e;\n }\n if (onParse) onParse(ast);\n if (map.length > 0) this.fixup_source_locations(ast, map);\n this.fixup_filenames(ast);\n res = this.evaluateCompletion(ast, false);\n } finally {\n this.realm.popContext(context);\n // Avoid destroying \"this\" scope as execute may be called many times.\n if (context.lexicalEnvironment !== this) this.realm.onDestroyScope(context.lexicalEnvironment);\n invariant(\n this.realm.activeLexicalEnvironments.size === 1,\n `expected 1 active lexical environment, got ${this.realm.activeLexicalEnvironments.size}`\n );\n }\n if (res instanceof AbruptCompletion) return res;\n\n return Environment.GetValue(this.realm, res);\n }\n\n fixup_source_locations(ast: BabelNode, map: string): void {\n const smc = new sourceMap.SourceMapConsumer(map);\n traverseFast(ast, node => {\n let loc = node.loc;\n if (!loc) return false;\n fixup(loc, loc.start);\n fixup(loc, loc.end);\n fixup_comments(node.leadingComments);\n fixup_comments(node.innerComments);\n fixup_comments(node.trailingComments);\n return false;\n\n function fixup(new_loc: BabelNodeSourceLocation, new_pos: BabelNodePosition) {\n let old_pos = smc.originalPositionFor({ line: new_pos.line, column: new_pos.column });\n if (old_pos.source === null) return;\n new_pos.line = old_pos.line;\n new_pos.column = old_pos.column;\n new_loc.source = old_pos.source;\n }\n\n function fixup_comments(comments: ?Array<BabelNodeComment>) {\n if (!comments) return;\n for (let c of comments) {\n let cloc = c.loc;\n if (!cloc) continue;\n fixup(cloc, cloc.start);\n fixup(cloc, cloc.end);\n }\n }\n });\n }\n\n fixup_filenames(ast: BabelNode): void {\n traverseFast(ast, node => {\n let loc = node.loc;\n if (!loc || !loc.source) {\n node.leadingComments = null;\n node.innerComments = null;\n node.trailingComments = null;\n node.loc = null;\n } else {\n let filename = loc.source;\n (loc: any).filename = filename;\n fixup_comments(node.leadingComments, filename);\n fixup_comments(node.innerComments, filename);\n fixup_comments(node.trailingComments, filename);\n }\n return false;\n\n function fixup_comments(comments: ?Array<BabelNodeComment>, filename: string) {\n if (!comments) return;\n for (let c of comments) {\n if (c.loc) {\n (c.loc: any).filename = filename;\n c.loc.source = filename;\n }\n }\n }\n });\n }\n\n evaluate(ast: BabelNode, strictCode: boolean, metadata?: any): Value | Reference {\n if (this.realm.debuggerInstance) {\n this.realm.debuggerInstance.checkForActions(ast);\n }\n let res = this.evaluateAbstract(ast, strictCode, metadata);\n invariant(res instanceof Value || res instanceof Reference, ast.type);\n return res;\n }\n\n evaluateAbstract(ast: BabelNode, strictCode: boolean, metadata?: any): Value | Reference {\n this.realm.currentLocation = ast.loc;\n this.realm.testTimeout();\n\n let evaluator = this.realm.evaluators[(ast.type: string)];\n if (evaluator) {\n this.realm.statistics.evaluatedNodes++;\n let result = evaluator(ast, strictCode, this, this.realm, metadata);\n return result;\n }\n\n throw new TypeError(`Unsupported node type ${ast.type}`);\n }\n\n evaluateDeref(ast: BabelNode, strictCode: boolean, metadata?: any): Value {\n let result = this.evaluate(ast, strictCode, metadata);\n if (result instanceof Reference) result = Environment.GetValue(this.realm, result);\n return result;\n }\n\n partiallyEvaluate(\n ast: BabelNode,\n strictCode: boolean,\n metadata?: any\n ): [Completion | Reference | Value, BabelNode, Array<BabelNodeStatement>] {\n let partialEvaluator = this.realm.partialEvaluators[(ast.type: string)];\n if (partialEvaluator) {\n return partialEvaluator(ast, strictCode, this, this.realm, metadata);\n }\n\n let err = new TypeError(`Unsupported node type ${ast.type}`);\n throw err;\n }\n}\n\n// ECMA262 6.2.3\n// A Reference is a resolved name or property binding. A Reference consists of three components, the base value,\n// the referenced name and the Boolean valued strict reference flag. The base value is either undefined, an Object,\n// a Boolean, a String, a Symbol, a Number, or an Environment Record. A base value of undefined indicates that the\n// Reference could not be resolved to a binding. The referenced name is a String or Symbol value.\nexport type BaseValue =\n | void\n | ObjectValue\n | BooleanValue\n | StringValue\n | SymbolValue\n | NumberValue\n | IntegralValue\n | EnvironmentRecord;\nexport type ReferenceName = string | SymbolValue;\n\nexport function mightBecomeAnObject(base: Value): boolean {\n let type = base.getType();\n // The top Value type might be able to become an object. We let it\n // pass and error later if it can't.\n return (\n type === Value ||\n type === PrimitiveValue ||\n type === BooleanValue ||\n type === StringValue ||\n type === SymbolValue ||\n type === NumberValue ||\n type === IntegralValue\n );\n}\n\nexport class Reference {\n base: BaseValue | AbstractValue;\n referencedName: ReferenceName | AbstractValue;\n strict: boolean;\n thisValue: void | Value;\n\n constructor(\n base: BaseValue | AbstractValue,\n refName: ReferenceName | AbstractValue,\n strict: boolean,\n thisValue?: void | Value\n ) {\n invariant(\n base instanceof AbstractObjectValue ||\n base === undefined ||\n base instanceof ObjectValue ||\n base instanceof EnvironmentRecord ||\n mightBecomeAnObject(base)\n );\n this.base = base;\n this.referencedName = refName;\n invariant(\n !(refName instanceof AbstractValue) ||\n !(refName.mightNotBeString() && refName.mightNotBeNumber() && !refName.isSimpleObject()) ||\n refName.$Realm.isInPureScope()\n );\n this.strict = strict;\n this.thisValue = thisValue;\n invariant(thisValue === undefined || !(base instanceof EnvironmentRecord));\n }\n}\n"],"file":"environment.js"}
\No newline at end of file