UNPKG

66.2 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../../src/values/ObjectValue.js"],"names":["isWidenedValue","v","AbstractValue","kind","a","args","lengthTemplateSrc","lengthTemplate","ObjectValue","ConcreteValue","constructor","realm","proto","intrinsicName","refuseSerialization","recordNewObject","useAbstractInterpretation","setupBindings","getTrackedPropertyNames","$Prototype","intrinsics","null","$Extensible","true","_isPartial","false","_isHavoced","_isSimple","_simplicityIsTransitive","_isFinal","properties","Map","symbols","$IsClassPrototype","trackedPropertyNames","propertyNames","propName","propBindingName","trackedPropertyBindingNames","get","undefined","setupTrackedPropertyAccessors","set","Object","defineProperty","prototype","configurable","binding","descriptor","value","mightNotBeHavocedObject","desc","writeable","object","key","internalSlot","$Realm","recordModifiedProperty","equals","x","getHash","hashValue","objectCount","temporalAlias","_temporalAlias","hasStringOrSymbolProperties","prop","values","mightBeFalse","mightNotBeObject","throwIfNotObject","makeNotPartial","makePartial","makeSimple","option","BooleanValue","StringValue","makeFinal","makeNotFinal","isPartialObject","mightBeTrue","mightBeFinalObject","mightNotBeFinalObject","mightNotBeTrue","havoc","mightBeHavocedObject","isSimpleObject","size","propertyBinding","writable","NullValue","ObjectPrototype","isTransitivelySimple","getExtensible","throwIfNotConcreteBoolean","setExtensible","getKind","$SymbolData","$StringData","$NumberData","$BooleanData","$DateValue","$RegExpMatcher","$SetData","$MapData","$DataView","$ArrayBufferData","$WeakMapData","$WeakSetData","react","enabled","$TypedArrayName","defineNativeMethod","name","length","callback","SymbolValue","fnValue","NativeFunctionValue","defineNativeProperty","Value","$DefineOwnProperty","enumerable","defineNativeGetter","funcName","$Description","throwIfNotConcreteString","func","defineNativeConstant","getOwnPropertyKeysArray","allowAbstractKeys","unknownProperty","reportIntrospectionError","FatalError","keyArray","Array","from","keys","filter","pb","pv","mightHaveBeenDeleted","callReportObjectGetOwnProperties","getSnapshot","options","template","copyKeys","$OwnPropertyKeys","reactProps","has","add","operationDescriptor","result","createTemporalFromBuildFunction","skipInvariant","isPure","AbstractObjectValue","ValuesDomain","removeProperties","to","nextKey","$GetOwnProperty","Properties","ThrowIfMightHaveBeenDeleted","propValue","Set","_serialize","stack","obj","serializedDesc","serialize","usesOrdinaryObjectInternalPrototypeMethods","$GetPrototypeOf","$SetPrototypeOf","V","OrdinarySetPrototypeOf","$IsExtensible","$PreventExtensions","P","OrdinaryGetOwnProperty","Desc","OrdinaryDefineOwnProperty","$HasProperty","$Get","Receiver","val","ArrayValue","isIntrinsicAndHasWidenedNumericProperty","specializeJoin","_SafeGetDataPropertyValue","savedInvariantLevel","invariantLevel","$GetPartial","getType","createFromTemplate","NumberValue","mightNotBeString","mightNotBeNumber","isInPureScope","Havoc","error","CompilerDiagnostic","currentLocation","handleError","To","ToStringAbstract","createFromType","cond","createFromBinaryOp","createFromConditionalOp","absVal","ob","pName","pNumber","generic_cond","specializeCond","arg1","arg2","expressionLocation","$Set","OrdinarySet","$SetPartial","pIsLoopVar","pIsNumeric","isTypeCompatibleWith","evaluateWithPossibleThrowCompletion","generator","emitStatement","TypesDomain","topVal","PrimitiveValue","createTemplate","newVal","UndefinedValue","sentinel","oldVal","savedUnknownProperty","delete","empty","$Delete","OrdinaryDelete","refuseSerializationOnPropertyBinding"],"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 { Realm, ExecutionContext } from \"../realm.js\";\nimport { TypesDomain, ValuesDomain } from \"../domains/index.js\";\nimport { CompilerDiagnostic, FatalError } from \"../errors.js\";\nimport type {\n DataBlock,\n Descriptor,\n IterationKind,\n ObjectKind,\n PromiseReaction,\n PropertyBinding,\n PropertyKeyValue,\n TypedArrayKind,\n} from \"../types.js\";\nimport {\n AbstractObjectValue,\n AbstractValue,\n ArrayValue,\n BooleanValue,\n ConcreteValue,\n NativeFunctionValue,\n NullValue,\n NumberValue,\n StringValue,\n SymbolValue,\n UndefinedValue,\n Value,\n PrimitiveValue,\n} from \"./index.js\";\nimport { isReactElement } from \"../react/utils.js\";\nimport buildExpressionTemplate from \"../utils/builder.js\";\nimport { ECMAScriptSourceFunctionValue, type NativeFunctionCallback } from \"./index.js\";\nimport {\n Get,\n GetFromArrayWithWidenedNumericProperty,\n IsDataDescriptor,\n OrdinaryOwnPropertyKeys,\n OrdinaryGet,\n OrdinaryHasProperty,\n OrdinaryIsExtensible,\n OrdinaryPreventExtensions,\n HasCompatibleType,\n} from \"../methods/index.js\";\nimport { Havoc, Properties, To } from \"../singletons.js\";\nimport invariant from \"../invariant.js\";\nimport type { typeAnnotation } from \"@babel/types\";\nimport { createOperationDescriptor } from \"../utils/generator.js\";\n\nfunction isWidenedValue(v: void | Value) {\n if (!(v instanceof AbstractValue)) return false;\n if (v.kind === \"widened\" || v.kind === \"widened property\") return true;\n for (let a of v.args) {\n if (isWidenedValue(a)) return true;\n }\n return false;\n}\n\nconst lengthTemplateSrc = \"(A).length\";\nconst lengthTemplate = buildExpressionTemplate(lengthTemplateSrc);\n\nexport default class ObjectValue extends ConcreteValue {\n constructor(\n realm: Realm,\n proto?: ObjectValue | NullValue,\n intrinsicName?: string,\n refuseSerialization: boolean = false\n ) {\n super(realm, intrinsicName);\n realm.recordNewObject(this);\n if (realm.useAbstractInterpretation) this.setupBindings(this.getTrackedPropertyNames());\n this.$Prototype = proto || realm.intrinsics.null;\n this.$Extensible = realm.intrinsics.true;\n this._isPartial = realm.intrinsics.false;\n this._isHavoced = realm.intrinsics.false;\n this._isSimple = realm.intrinsics.false;\n this._simplicityIsTransitive = realm.intrinsics.false;\n this._isFinal = realm.intrinsics.false;\n this.properties = new Map();\n this.symbols = new Map();\n this.refuseSerialization = refuseSerialization;\n\n // this.$IsClassPrototype should be the last thing that gets initialized,\n // as other code checks whether this.$IsClassPrototype === undefined\n // as a proxy for whether initialization is still ongoing.\n this.$IsClassPrototype = false;\n }\n\n static trackedPropertyNames = [\n \"_isPartial\",\n \"_isHavoced\",\n \"_isSimple\",\n \"_isFinal\",\n \"_simplicityIsTransitive\",\n \"_temporalAlias\",\n \"$ArrayIteratorNextIndex\",\n \"$DateValue\",\n \"$Extensible\",\n \"$IteratedList\",\n \"$IteratedObject\",\n \"$IteratedSet\",\n \"$IteratedString\",\n \"$Map\",\n \"$MapData\",\n \"$MapNextIndex\",\n \"$Prototype\",\n \"$SetData\",\n \"$SetNextIndex\",\n \"$StringIteratorNextIndex\",\n \"$WeakMapData\",\n \"$WeakSetData\",\n ];\n static trackedPropertyBindingNames = new Map();\n\n getTrackedPropertyNames(): Array<string> {\n return ObjectValue.trackedPropertyNames;\n }\n\n setupBindings(propertyNames: Array<string>): void {\n for (let propName of propertyNames) {\n let propBindingName = ObjectValue.trackedPropertyBindingNames.get(propName);\n invariant(propBindingName !== undefined);\n (this: any)[propBindingName] = undefined;\n }\n }\n\n static setupTrackedPropertyAccessors(propertyNames: Array<string>): void {\n for (let propName of propertyNames) {\n let propBindingName = ObjectValue.trackedPropertyBindingNames.get(propName);\n if (propBindingName === undefined)\n ObjectValue.trackedPropertyBindingNames.set(propName, (propBindingName = propName + \"_binding\"));\n Object.defineProperty(ObjectValue.prototype, propName, {\n configurable: true,\n get: function() {\n let binding = this[propBindingName];\n return binding === undefined ? undefined : binding.descriptor.value;\n },\n set: function(v) {\n // Let's make sure that the object is not havoced.\n // To that end, we'd like to call this.isHavocedObject().\n // However, while the object is still being initialized,\n // properties may be set, but this.isHavocedObject() may not be called yet.\n // To check if we are still initializing, guard the call by looking at\n // whether this.$IsClassPrototype has been initialized as a proxy for\n // object initialization in general.\n invariant(\n // We're still initializing so we can set a property.\n this.$IsClassPrototype === undefined ||\n // It's not havoced so we can set a property.\n this.mightNotBeHavocedObject() ||\n // Object.assign() implementation needs to temporarily\n // make potentially havoced objects non-partial and back.\n // We don't gain anything from checking whether it's havoced\n // before calling makePartial() so we'll whitelist this property.\n propBindingName === \"_isPartial_binding\",\n \"cannot mutate a havoced object\"\n );\n let binding = this[propBindingName];\n if (binding === undefined) {\n let desc = { writeable: true, value: undefined };\n this[propBindingName] = binding = {\n descriptor: desc,\n object: this,\n key: propName,\n internalSlot: true,\n };\n }\n this.$Realm.recordModifiedProperty(binding);\n binding.descriptor.value = v;\n },\n });\n }\n }\n\n $Prototype: ObjectValue | AbstractObjectValue | NullValue;\n $Extensible: BooleanValue | AbstractValue;\n\n $ParameterMap: void | ObjectValue; // undefined when the property is \"missing\"\n $SymbolData: void | SymbolValue | AbstractValue;\n $StringData: void | StringValue | AbstractValue;\n $NumberData: void | NumberValue | AbstractValue;\n $BooleanData: void | BooleanValue | AbstractValue;\n\n // error\n $ErrorData: void | {\n // undefined when the property is \"missing\"\n contextStack: Array<ExecutionContext>,\n locationData: void | {\n filename: string,\n sourceCode: string,\n loc: { line: number, column: number },\n stackDecorated: boolean,\n },\n };\n\n // function\n $Call: void | ((thisArgument: Value, argumentsList: Array<Value>) => Value);\n $Construct: void | ((argumentsList: Array<Value>, newTarget: ObjectValue) => ObjectValue);\n\n // promise\n $PromiseState: void | \"pending\" | \"fulfilled\" | \"rejected\";\n $PromiseResult: void | Value;\n $PromiseFulfillReactions: void | Array<PromiseReaction>;\n $PromiseRejectReactions: void | Array<PromiseReaction>;\n $PromiseIsHandled: void | boolean;\n\n // iterator\n $IteratedList: void | Array<Value>;\n $ListIteratorNextIndex: void | number;\n $IteratorNext: void | NativeFunctionValue;\n\n // set\n $SetIterationKind: void | IterationKind;\n $SetNextIndex: void | number;\n $IteratedSet: void | ObjectValue | UndefinedValue;\n $SetData: void | Array<void | Value>;\n\n // react\n $SuperTypeParameters: void | typeAnnotation;\n\n // map\n $MapIterationKind: void | IterationKind;\n $MapNextIndex: void | NumberValue;\n $MapData: void | Array<{ $Key: void | Value, $Value: void | Value }>;\n $Map: void | ObjectValue | UndefinedValue;\n\n // weak map\n $WeakMapData: void | Array<{ $Key: void | Value, $Value: void | Value }>;\n\n // weak set\n $WeakSetData: void | Array<void | Value>;\n\n // date\n $DateValue: void | NumberValue | AbstractValue; // of type number\n\n // array\n $ArrayIterationKind: void | IterationKind;\n $ArrayIteratorNextIndex: void | NumberValue;\n $IteratedObject: void | UndefinedValue | ObjectValue;\n\n // regex\n $OriginalSource: void | string;\n $OriginalFlags: void | string;\n $RegExpMatcher: void | ((S: string, lastIndex: number) => ?{ endIndex: number, captures: Array<any> });\n\n // string\n $StringIteratorNextIndex: void | number;\n $IteratedString: void | StringValue;\n\n // data view\n $DataView: void | true;\n $ViewedArrayBuffer: void | ObjectValue;\n $ByteLength: void | number;\n $ByteOffset: void | number;\n\n // array buffer\n $ArrayBufferData: void | null | DataBlock;\n $ArrayBufferByteLength: void | number;\n\n // generator\n $GeneratorState: void | \"suspendedStart\" | \"executing\";\n $GeneratorContext: void | ExecutionContext;\n\n // typed array\n $TypedArrayName: void | TypedArrayKind;\n $ViewedArrayBuffer: void | ObjectValue;\n $ArrayLength: void | number;\n\n // backpointer to the constructor if this object was created its prototype object\n originalConstructor: void | ECMAScriptSourceFunctionValue;\n\n // partial objects\n _isPartial: AbstractValue | BooleanValue;\n\n // tainted objects\n _isHavoced: AbstractValue | BooleanValue;\n\n // If true, the object has no property getters or setters and it is safe\n // to return AbstractValue for unknown properties.\n _isSimple: AbstractValue | BooleanValue;\n\n // If true, it is not safe to perform any more mutations that would change\n // the object's serialized form.\n _isFinal: AbstractValue | BooleanValue;\n\n // Specifies whether the object is a template that needs to be created in a scope\n // If set, this happened during object initialization and the value is never changed again, so not tracked.\n _isScopedTemplate: void | true;\n\n // If true, then unknown properties should return transitively simple abstract object values\n _simplicityIsTransitive: AbstractValue | BooleanValue;\n\n // The abstract object for which this object is the template.\n // Use this instead of the object itself when deriving temporal values for object properties.\n _templateFor: void | AbstractObjectValue;\n\n properties: Map<string, PropertyBinding>;\n symbols: Map<SymbolValue, PropertyBinding>;\n unknownProperty: void | PropertyBinding;\n _temporalAlias: void | AbstractObjectValue;\n\n // An object value with an intrinsic name can either exist from the beginning of time,\n // or it can be associated with a particular point in time by being used as a template\n // when deriving an abstract value via a generator.\n intrinsicNameGenerated: void | true;\n hashValue: void | number;\n\n // ReactElement\n $BailOutReason: void | string;\n\n // ES2015 classes\n $IsClassPrototype: boolean;\n\n // We track some internal state as properties on the global object, these should\n // never be serialized.\n refuseSerialization: boolean;\n\n equals(x: Value): boolean {\n return this === x;\n }\n\n getHash(): number {\n if (!this.hashValue) {\n this.hashValue = ++this.$Realm.objectCount;\n }\n return this.hashValue;\n }\n\n get temporalAlias(): void | AbstractObjectValue {\n return this._temporalAlias;\n }\n\n set temporalAlias(value: AbstractObjectValue) {\n this._temporalAlias = value;\n }\n\n hasStringOrSymbolProperties(): boolean {\n for (let prop of this.properties.values()) {\n if (prop.descriptor === undefined) continue;\n return true;\n }\n for (let prop of this.symbols.values()) {\n if (prop.descriptor === undefined) continue;\n return true;\n }\n return false;\n }\n\n mightBeFalse(): boolean {\n return false;\n }\n\n mightNotBeObject(): boolean {\n return false;\n }\n\n throwIfNotObject(): ObjectValue {\n return this;\n }\n\n makeNotPartial(): void {\n this._isPartial = this.$Realm.intrinsics.false;\n }\n\n makePartial(): void {\n this._isPartial = this.$Realm.intrinsics.true;\n }\n\n makeSimple(option?: string | Value): void {\n this._isSimple = this.$Realm.intrinsics.true;\n this._simplicityIsTransitive = new BooleanValue(\n this.$Realm,\n option === \"transitive\" || (option instanceof StringValue && option.value === \"transitive\")\n );\n }\n\n makeFinal(): void {\n this._isFinal = this.$Realm.intrinsics.true;\n }\n\n makeNotFinal(): void {\n this._isFinal = this.$Realm.intrinsics.false;\n }\n\n isPartialObject(): boolean {\n return this._isPartial.mightBeTrue();\n }\n\n mightBeFinalObject(): boolean {\n return this._isFinal.mightBeTrue();\n }\n\n mightNotBeFinalObject(): boolean {\n return this._isFinal.mightNotBeTrue();\n }\n\n havoc(): void {\n this._isHavoced = this.$Realm.intrinsics.true;\n }\n\n mightBeHavocedObject(): boolean {\n return this._isHavoced.mightBeTrue();\n }\n\n mightNotBeHavocedObject(): boolean {\n return this._isHavoced.mightNotBeTrue();\n }\n\n isSimpleObject(): boolean {\n if (!this._isSimple.mightNotBeTrue()) return true;\n if (this.isPartialObject()) return false;\n if (this.symbols.size > 0) return false;\n for (let propertyBinding of this.properties.values()) {\n let desc = propertyBinding.descriptor;\n if (desc === undefined) continue; // deleted\n if (!IsDataDescriptor(this.$Realm, desc)) return false;\n if (!desc.writable) return false;\n }\n if (this.$Prototype instanceof NullValue) return true;\n if (this.$Prototype === this.$Realm.intrinsics.ObjectPrototype) return true;\n invariant(this.$Prototype);\n return this.$Prototype.isSimpleObject();\n }\n\n isTransitivelySimple(): boolean {\n return !this._simplicityIsTransitive.mightNotBeTrue();\n }\n\n getExtensible(): boolean {\n return this.$Extensible.throwIfNotConcreteBoolean().value;\n }\n\n setExtensible(v: boolean) {\n this.$Extensible = v ? this.$Realm.intrinsics.true : this.$Realm.intrinsics.false;\n }\n\n getKind(): ObjectKind {\n // we can deduce the natural prototype by checking whether the following internal slots are present\n if (this.$SymbolData !== undefined) return \"Symbol\";\n if (this.$StringData !== undefined) return \"String\";\n if (this.$NumberData !== undefined) return \"Number\";\n if (this.$BooleanData !== undefined) return \"Boolean\";\n if (this.$DateValue !== undefined) return \"Date\";\n if (this.$RegExpMatcher !== undefined) return \"RegExp\";\n if (this.$SetData !== undefined) return \"Set\";\n if (this.$MapData !== undefined) return \"Map\";\n if (this.$DataView !== undefined) return \"DataView\";\n if (this.$ArrayBufferData !== undefined) return \"ArrayBuffer\";\n if (this.$WeakMapData !== undefined) return \"WeakMap\";\n if (this.$WeakSetData !== undefined) return \"WeakSet\";\n if (isReactElement(this) && this.$Realm.react.enabled) return \"ReactElement\";\n if (this.$TypedArrayName !== undefined) return this.$TypedArrayName;\n // TODO #26 #712: Promises. All kinds of iterators. Generators.\n return \"Object\";\n }\n\n defineNativeMethod(\n name: SymbolValue | string,\n length: number,\n callback: NativeFunctionCallback,\n desc?: Descriptor = {}\n ): Value {\n let intrinsicName;\n if (typeof name === \"string\") {\n if (this.intrinsicName) intrinsicName = `${this.intrinsicName}.${name}`;\n } else if (name instanceof SymbolValue) {\n if (this.intrinsicName && name.intrinsicName) intrinsicName = `${this.intrinsicName}[${name.intrinsicName}]`;\n } else {\n invariant(false);\n }\n let fnValue = new NativeFunctionValue(this.$Realm, intrinsicName, name, length, callback, false);\n this.defineNativeProperty(name, fnValue, desc);\n return fnValue;\n }\n\n defineNativeProperty(name: SymbolValue | string, value?: Value | Array<Value>, desc?: Descriptor = {}): void {\n invariant(!value || value instanceof Value);\n this.$DefineOwnProperty(name, {\n value,\n writable: true,\n enumerable: false,\n configurable: true,\n ...desc,\n });\n }\n\n defineNativeGetter(name: SymbolValue | string, callback: NativeFunctionCallback, desc?: Descriptor = {}): void {\n let intrinsicName, funcName;\n if (typeof name === \"string\") {\n funcName = `get ${name}`;\n if (this.intrinsicName) intrinsicName = `${this.intrinsicName}.${name}`;\n } else if (name instanceof SymbolValue) {\n funcName =\n name.$Description instanceof Value\n ? `get [${name.$Description.throwIfNotConcreteString().value}]`\n : `get [${\"?\"}]`;\n if (this.intrinsicName && name.intrinsicName) intrinsicName = `${this.intrinsicName}[${name.intrinsicName}]`;\n } else {\n invariant(false);\n }\n\n let func = new NativeFunctionValue(this.$Realm, intrinsicName, funcName, 0, callback);\n this.$DefineOwnProperty(name, {\n get: func,\n set: this.$Realm.intrinsics.undefined,\n enumerable: false,\n configurable: true,\n ...desc,\n });\n }\n\n defineNativeConstant(name: SymbolValue | string, value?: Value | Array<Value>, desc?: Descriptor = {}): void {\n invariant(!value || value instanceof Value);\n this.$DefineOwnProperty(name, {\n value,\n writable: false,\n enumerable: false,\n configurable: false,\n ...desc,\n });\n }\n\n getOwnPropertyKeysArray(allowAbstractKeys: boolean = false): Array<string> {\n if (this.isPartialObject() || this.mightBeHavocedObject() || this.unknownProperty !== undefined) {\n AbstractValue.reportIntrospectionError(this);\n throw new FatalError();\n }\n\n let keyArray = Array.from(this.properties.keys());\n keyArray = keyArray.filter(x => {\n let pb = this.properties.get(x);\n if (!pb || pb.descriptor === undefined) return false;\n let pv = pb.descriptor.value;\n if (pv === undefined) return true;\n invariant(pv instanceof Value);\n if (!pv.mightHaveBeenDeleted()) return true;\n // The property may or may not be there at runtime.\n // We can at best return an abstract keys array.\n // For now, unless the caller has told us that is okay,\n // just terminate.\n invariant(pv instanceof AbstractValue);\n if (allowAbstractKeys) return true;\n AbstractValue.reportIntrospectionError(pv);\n throw new FatalError();\n });\n this.$Realm.callReportObjectGetOwnProperties(this);\n return keyArray;\n }\n\n // Note that internal properties will not be copied to the snapshot, nor will they be removed.\n getSnapshot(options?: { removeProperties: boolean }): AbstractObjectValue {\n try {\n if (this.temporalAlias !== undefined) return this.temporalAlias;\n invariant(!this.isPartialObject());\n let template = new ObjectValue(this.$Realm, this.$Realm.intrinsics.ObjectPrototype);\n this.copyKeys(this.$OwnPropertyKeys(), this, template);\n let realm = this.$Realm;\n // The snapshot is an immutable object snapshot\n template.makeFinal();\n // The original object might be a React props object, thus\n // if it is, we need to ensure we mark it with the same rules\n if (realm.react.enabled && realm.react.reactProps.has(this)) {\n realm.react.reactProps.add(template);\n }\n let operationDescriptor = createOperationDescriptor(\"SINGLE_ARG\");\n let result = AbstractValue.createTemporalFromBuildFunction(\n this.$Realm,\n ObjectValue,\n [template],\n operationDescriptor,\n { skipInvariant: true, isPure: true }\n );\n invariant(result instanceof AbstractObjectValue);\n result.values = new ValuesDomain(template);\n return result;\n } finally {\n if (options && options.removeProperties) {\n this.properties = new Map();\n this.symbols = new Map();\n this.unknownProperty = undefined;\n }\n }\n }\n\n copyKeys(keys: Array<PropertyKeyValue>, from: ObjectValue, to: ObjectValue): void {\n // c. Repeat for each element nextKey of keys in List order,\n for (let nextKey of keys) {\n // i. Let desc be ? from.[[GetOwnProperty]](nextKey).\n let desc = from.$GetOwnProperty(nextKey);\n\n // ii. If desc is not undefined and desc.[[Enumerable]] is true, then\n if (desc && desc.enumerable) {\n Properties.ThrowIfMightHaveBeenDeleted(desc.value);\n\n // 1. Let propValue be ? Get(from, nextKey).\n let propValue = Get(this.$Realm, from, nextKey);\n\n // 2. Perform ? Set(to, nextKey, propValue, true).\n Properties.Set(this.$Realm, to, nextKey, propValue, true);\n }\n }\n }\n\n _serialize(set: Function, stack: Map<Value, any>): any {\n let obj = set({});\n\n for (let [key, propertyBinding] of this.properties) {\n let desc = propertyBinding.descriptor;\n if (desc === undefined) continue; // deleted\n Properties.ThrowIfMightHaveBeenDeleted(desc.value);\n let serializedDesc: any = { enumerable: desc.enumerable, configurable: desc.configurable };\n if (desc.value) {\n serializedDesc.writable = desc.writable;\n invariant(desc.value instanceof Value);\n serializedDesc.value = desc.value.serialize(stack);\n } else {\n invariant(desc.get !== undefined);\n serializedDesc.get = desc.get.serialize(stack);\n invariant(desc.set !== undefined);\n serializedDesc.set = desc.set.serialize(stack);\n }\n Object.defineProperty(obj, key, serializedDesc);\n }\n return obj;\n }\n\n // Whether [[{Get,Set}PrototypeOf]] delegate to Ordinary{Get,Set}PrototypeOf.\n // E.g. ProxyValue overrides this to return false.\n // See ECMA262 9.1.2.1 for an algorithm where this is relevant\n usesOrdinaryObjectInternalPrototypeMethods(): boolean {\n return true;\n }\n\n // ECMA262 9.1.1\n $GetPrototypeOf(): ObjectValue | AbstractObjectValue | NullValue {\n return this.$Prototype;\n }\n\n // ECMA262 9.1.2\n $SetPrototypeOf(V: ObjectValue | NullValue): boolean {\n // 1. Return ! OrdinarySetPrototypeOf(O, V).\n return Properties.OrdinarySetPrototypeOf(this.$Realm, this, V);\n }\n\n // ECMA262 9.1.3\n $IsExtensible(): boolean {\n // 1. Return ! OrdinaryIsExtensible(O).\n return OrdinaryIsExtensible(this.$Realm, this);\n }\n\n // ECMA262 9.1.4\n $PreventExtensions(): boolean {\n // 1. Return ! OrdinaryPreventExtensions(O).\n return OrdinaryPreventExtensions(this.$Realm, this);\n }\n\n // ECMA262 9.1.5\n $GetOwnProperty(P: PropertyKeyValue): Descriptor | void {\n // 1. Return ! OrdinaryGetOwnProperty(O, P).\n return Properties.OrdinaryGetOwnProperty(this.$Realm, this, P);\n }\n\n // ECMA262 9.1.6\n $DefineOwnProperty(P: PropertyKeyValue, Desc: Descriptor): boolean {\n // 1. Return ? OrdinaryDefineOwnProperty(O, P, Desc).\n return Properties.OrdinaryDefineOwnProperty(this.$Realm, this, P, Desc);\n }\n\n // ECMA262 9.1.7\n $HasProperty(P: PropertyKeyValue): boolean {\n if (this.unknownProperty !== undefined && this.$GetOwnProperty(P) === undefined) {\n AbstractValue.reportIntrospectionError(this, P);\n throw new FatalError();\n }\n\n return OrdinaryHasProperty(this.$Realm, this, P);\n }\n\n // ECMA262 9.1.8\n $Get(P: PropertyKeyValue, Receiver: Value): Value {\n let prop = this.unknownProperty;\n if (prop !== undefined && prop.descriptor !== undefined && this.$GetOwnProperty(P) === undefined) {\n let desc = prop.descriptor;\n invariant(desc !== undefined);\n let val = desc.value;\n invariant(val instanceof AbstractValue);\n let propValue;\n if (P instanceof StringValue) {\n propValue = P;\n } else if (typeof P === \"string\") {\n propValue = new StringValue(this.$Realm, P);\n }\n\n if (val.kind === \"widened numeric property\") {\n invariant(Receiver instanceof ArrayValue && ArrayValue.isIntrinsicAndHasWidenedNumericProperty(Receiver));\n let propName;\n if (P instanceof StringValue) {\n propName = P.value;\n } else {\n propName = P;\n }\n return GetFromArrayWithWidenedNumericProperty(this.$Realm, Receiver, propName);\n } else if (!propValue) {\n AbstractValue.reportIntrospectionError(val, \"abstract computed property name\");\n throw new FatalError();\n }\n return this.specializeJoin(val, propValue);\n }\n\n // 1. Return ? OrdinaryGet(O, P, Receiver).\n return OrdinaryGet(this.$Realm, this, P, Receiver);\n }\n\n _SafeGetDataPropertyValue(P: PropertyKeyValue): Value {\n let savedInvariantLevel = this.$Realm.invariantLevel;\n try {\n this.$Realm.invariantLevel = 0;\n let desc = this.$GetOwnProperty(P);\n return desc !== undefined && desc.value instanceof Value ? desc.value : this.$Realm.intrinsics.undefined;\n } finally {\n this.$Realm.invariantLevel = savedInvariantLevel;\n }\n }\n\n $GetPartial(P: AbstractValue | PropertyKeyValue, Receiver: Value): Value {\n if (Receiver instanceof AbstractValue && Receiver.getType() === StringValue && P === \"length\") {\n return AbstractValue.createFromTemplate(this.$Realm, lengthTemplate, NumberValue, [Receiver], lengthTemplateSrc);\n }\n\n if (!(P instanceof AbstractValue)) return this.$Get(P, Receiver);\n\n // A string coercion might have side-effects.\n // TODO #1682: We assume that simple objects mean that they don't have a\n // side-effectful valueOf and toString but that's not enforced.\n if (P.mightNotBeString() && P.mightNotBeNumber() && !P.isSimpleObject()) {\n if (this.$Realm.isInPureScope()) {\n // If we're in pure scope, we can havoc the key and keep going.\n // Coercion can only have effects on anything reachable from the key.\n Havoc.value(this.$Realm, P);\n } else {\n let error = new CompilerDiagnostic(\n \"property key might not have a well behaved toString or be a symbol\",\n this.$Realm.currentLocation,\n \"PP0002\",\n \"RecoverableError\"\n );\n if (this.$Realm.handleError(error) !== \"Recover\") {\n throw new FatalError();\n }\n }\n }\n\n // We assume that simple objects have no getter/setter properties.\n if (!this.isSimpleObject()) {\n if (this.$Realm.isInPureScope()) {\n // If we're in pure scope, we can havoc the object. Coercion\n // can only have effects on anything reachable from this object.\n // We assume that if the receiver is different than this object,\n // then we only got here because there were no other keys with\n // this name on other parts of the prototype chain.\n // TODO #1675: A fix to 1675 needs to take this into account.\n Havoc.value(this.$Realm, Receiver);\n return AbstractValue.createTemporalFromBuildFunction(\n this.$Realm,\n Value,\n [Receiver, P],\n createOperationDescriptor(\"OBJECT_GET_PARTIAL\"),\n { skipInvariant: true, isPure: true }\n );\n } else {\n let error = new CompilerDiagnostic(\n \"unknown property access might need to invoke a getter\",\n this.$Realm.currentLocation,\n \"PP0030\",\n \"RecoverableError\"\n );\n if (this.$Realm.handleError(error) !== \"Recover\") {\n throw new FatalError();\n }\n }\n }\n\n P = To.ToStringAbstract(this.$Realm, P);\n\n // If all else fails, use this expression\n // TODO #1675: Check the prototype chain for known properties too.\n let result;\n if (this.isPartialObject()) {\n if (isWidenedValue(P)) {\n // TODO #1678: Use a snapshot or havoc this object.\n return AbstractValue.createTemporalFromBuildFunction(\n this.$Realm,\n Value,\n [this, P],\n createOperationDescriptor(\"OBJECT_GET_PARTIAL\"),\n { skipInvariant: true, isPure: true }\n );\n }\n result = AbstractValue.createFromType(this.$Realm, Value, \"sentinel member expression\", [this, P]);\n } else {\n result = AbstractValue.createTemporalFromBuildFunction(\n this.$Realm,\n Value,\n [this, P],\n createOperationDescriptor(\"OBJECT_GET_PARTIAL\"),\n { skipInvariant: true, isPure: true }\n );\n }\n\n // Get a specialization of the join of all values written to the object\n // with abstract property names.\n let prop = this.unknownProperty;\n if (prop !== undefined) {\n let desc = prop.descriptor;\n if (desc !== undefined) {\n let val = desc.value;\n invariant(val instanceof AbstractValue);\n if (val.kind === \"widened numeric property\") {\n invariant(Receiver instanceof ArrayValue && ArrayValue.isIntrinsicAndHasWidenedNumericProperty(Receiver));\n return GetFromArrayWithWidenedNumericProperty(this.$Realm, Receiver, P instanceof StringValue ? P.value : P);\n }\n result = this.specializeJoin(val, P);\n }\n }\n // Join in all of the other values that were written to the object with\n // concrete property names.\n for (let [key, propertyBinding] of this.properties) {\n let desc = propertyBinding.descriptor;\n if (desc === undefined) continue; // deleted\n invariant(desc.value !== undefined); // otherwise this is not simple\n let val = desc.value;\n invariant(val instanceof Value);\n let cond = AbstractValue.createFromBinaryOp(\n this.$Realm,\n \"===\",\n P,\n new StringValue(this.$Realm, key),\n undefined,\n \"check for known property\"\n );\n result = AbstractValue.createFromConditionalOp(this.$Realm, cond, val, result);\n }\n return result;\n }\n\n specializeJoin(absVal: AbstractValue, propName: Value): Value {\n if (absVal.kind === \"widened property\") {\n let ob = absVal.args[0];\n if (propName instanceof StringValue) {\n let pName = propName.value;\n let pNumber = +pName;\n if (pName === pNumber + \"\") propName = new NumberValue(this.$Realm, pNumber);\n }\n return AbstractValue.createTemporalFromBuildFunction(\n this.$Realm,\n absVal.getType(),\n [ob, propName],\n createOperationDescriptor(\"OBJECT_GET_PARTIAL\"),\n { skipInvariant: true, isPure: true }\n );\n }\n invariant(absVal.args.length === 3 && absVal.kind === \"conditional\");\n let generic_cond = absVal.args[0];\n invariant(generic_cond instanceof AbstractValue);\n let cond = this.specializeCond(generic_cond, propName);\n let arg1 = absVal.args[1];\n if (arg1 instanceof AbstractValue && arg1.args.length === 3) arg1 = this.specializeJoin(arg1, propName);\n let arg2 = absVal.args[2];\n if (arg2 instanceof AbstractValue) {\n if (arg2.kind === \"template for prototype member expression\") {\n let ob = arg2.args[0];\n arg2 = AbstractValue.createTemporalFromBuildFunction(\n this.$Realm,\n absVal.getType(),\n [ob, propName],\n createOperationDescriptor(\"OBJECT_GET_PARTIAL\"),\n { skipInvariant: true, isPure: true }\n );\n } else if (arg2.args.length === 3) {\n arg2 = this.specializeJoin(arg2, propName);\n }\n }\n return AbstractValue.createFromConditionalOp(this.$Realm, cond, arg1, arg2, absVal.expressionLocation);\n }\n\n specializeCond(absVal: AbstractValue, propName: Value): Value {\n if (absVal.kind === \"template for property name condition\")\n return AbstractValue.createFromBinaryOp(this.$Realm, \"===\", absVal.args[0], propName);\n return absVal;\n }\n\n // ECMA262 9.1.9\n $Set(P: PropertyKeyValue, V: Value, Receiver: Value): boolean {\n // 1. Return ? OrdinarySet(O, P, V, Receiver).\n return Properties.OrdinarySet(this.$Realm, this, P, V, Receiver);\n }\n\n $SetPartial(P: AbstractValue | PropertyKeyValue, V: Value, Receiver: Value): boolean {\n if (!(P instanceof AbstractValue)) return this.$Set(P, V, Receiver);\n let pIsLoopVar = isWidenedValue(P);\n let pIsNumeric = Value.isTypeCompatibleWith(P.getType(), NumberValue);\n\n // A string coercion might have side-effects.\n // TODO #1682: We assume that simple objects mean that they don't have a\n // side-effectful valueOf and toString but that's not enforced.\n if (P.mightNotBeString() && P.mightNotBeNumber() && !P.isSimpleObject()) {\n if (this.$Realm.isInPureScope()) {\n // If we're in pure scope, we can havoc the key and keep going.\n // Coercion can only have effects on anything reachable from the key.\n Havoc.value(this.$Realm, P);\n } else {\n let error = new CompilerDiagnostic(\n \"property key might not have a well behaved toString or be a symbol\",\n this.$Realm.currentLocation,\n \"PP0002\",\n \"RecoverableError\"\n );\n if (this.$Realm.handleError(error) !== \"Recover\") {\n throw new FatalError();\n }\n }\n }\n\n // We assume that simple objects have no getter/setter properties and\n // that all properties are writable.\n if (!this.isSimpleObject()) {\n if (this.$Realm.isInPureScope()) {\n // If we're in pure scope, we can havoc the object and leave an\n // assignment in place.\n Havoc.value(this.$Realm, Receiver);\n // We also need to havoc the value since it might leak to a setter.\n Havoc.value(this.$Realm, V);\n this.$Realm.evaluateWithPossibleThrowCompletion(\n () => {\n let generator = this.$Realm.generator;\n invariant(generator);\n invariant(P instanceof AbstractValue);\n generator.emitStatement([Receiver, P, V], createOperationDescriptor(\"OBJECT_SET_PARTIAL\"));\n return this.$Realm.intrinsics.undefined;\n },\n TypesDomain.topVal,\n ValuesDomain.topVal\n );\n // The emitted assignment might throw at runtime but if it does, that\n // is handled by evaluateWithPossibleThrowCompletion. Anything that\n // happens after this, can assume we didn't throw and therefore,\n // we return true here.\n return true;\n } else {\n let error = new CompilerDiagnostic(\n \"unknown property access might need to invoke a setter\",\n this.$Realm.currentLocation,\n \"PP0030\",\n \"RecoverableError\"\n );\n if (this.$Realm.handleError(error) !== \"Recover\") {\n throw new FatalError();\n }\n }\n }\n\n // We should never consult the prototype chain for unknown properties.\n // If it was simple, it would've been an assignment to the receiver.\n // The only case the Receiver isn't this, if this was a ToObject\n // coercion from a PrimitiveValue.\n invariant(this === Receiver || HasCompatibleType(Receiver, PrimitiveValue));\n\n P = To.ToStringAbstract(this.$Realm, P);\n\n function createTemplate(realm: Realm, propName: AbstractValue) {\n return AbstractValue.createFromBinaryOp(\n realm,\n \"===\",\n propName,\n new StringValue(realm, \"\"),\n undefined,\n \"template for property name condition\"\n );\n }\n\n let prop;\n if (this.unknownProperty === undefined) {\n prop = {\n descriptor: undefined,\n object: this,\n key: P,\n };\n this.unknownProperty = prop;\n } else {\n prop = this.unknownProperty;\n }\n this.$Realm.recordModifiedProperty(prop);\n let desc = prop.descriptor;\n if (desc === undefined) {\n let newVal = V;\n if (!(V instanceof UndefinedValue) && !isWidenedValue(P)) {\n // join V with sentinel, using a property name test as the condition\n let cond = createTemplate(this.$Realm, P);\n let sentinel = AbstractValue.createFromType(this.$Realm, Value, \"template for prototype member expression\", [\n Receiver,\n P,\n ]);\n newVal = AbstractValue.createFromConditionalOp(this.$Realm, cond, V, sentinel);\n }\n prop.descriptor = {\n writable: true,\n enumerable: true,\n configurable: true,\n value: newVal,\n };\n } else {\n // join V with current value of this.unknownProperty. I.e. weak update.\n let oldVal = desc.value;\n invariant(oldVal instanceof Value);\n let newVal = oldVal;\n if (!(V instanceof UndefinedValue)) {\n if (isWidenedValue(P)) {\n newVal = V; // It will be widened later on\n } else {\n let cond = createTemplate(this.$Realm, P);\n newVal = AbstractValue.createFromConditionalOp(this.$Realm, cond, V, oldVal);\n }\n }\n desc.value = newVal;\n }\n\n // Since we don't know the name of the property we are writing to, we also need\n // to perform weak updates of all of the known properties.\n // First clear out this.unknownProperty so that helper routines know its OK to update the properties\n let savedUnknownProperty = this.unknownProperty;\n this.unknownProperty = undefined;\n for (let [key, propertyBinding] of this.properties) {\n if (pIsLoopVar && pIsNumeric) {\n // Delete numeric properties and don't do weak updates on other properties.\n if (key !== +key + \"\") continue;\n this.properties.delete(key);\n continue;\n }\n let oldVal = this.$Realm.intrinsics.empty;\n if (propertyBinding.descriptor && propertyBinding.descriptor.value) {\n oldVal = propertyBinding.descriptor.value;\n invariant(oldVal instanceof Value); // otherwise this is not simple\n }\n let cond = AbstractValue.createFromBinaryOp(this.$Realm, \"===\", P, new StringValue(this.$Realm, key));\n let newVal = AbstractValue.createFromConditionalOp(this.$Realm, cond, V, oldVal);\n Properties.OrdinarySet(this.$Realm, this, key, newVal, Receiver);\n }\n this.unknownProperty = savedUnknownProperty;\n\n return true;\n }\n\n // ECMA262 9.1.10\n $Delete(P: PropertyKeyValue): boolean {\n if (this.unknownProperty !== undefined) {\n // TODO #946: generate a delete from the object\n AbstractValue.reportIntrospectionError(this, P);\n throw new FatalError();\n }\n\n // 1. Return ? OrdinaryDelete(O, P).\n return Properties.OrdinaryDelete(this.$Realm, this, P);\n }\n\n // ECMA262 9.1.11\n $OwnPropertyKeys(): Array<PropertyKeyValue> {\n return OrdinaryOwnPropertyKeys(this.$Realm, this);\n }\n\n static refuseSerializationOnPropertyBinding(pb: PropertyBinding): boolean {\n if (pb.object.refuseSerialization) return true;\n if (pb.internalSlot && typeof pb.key === \"string\" && pb.key[0] === \"_\") return true;\n return false;\n }\n}\n"],"file":"ObjectValue.js"}
\No newline at end of file