UNPKG

60.2 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../../src/values/AbstractObjectValue.js"],"names":["AbstractObjectValue","AbstractValue","constructor","realm","types","values","hashValue","args","operationDescriptor","optionalArgs","isTop","element","getElements","ObjectValue","getTemplate","isPartialObject","reportIntrospectionError","FatalError","temporalAlias","temporalValue","hasStringOrSymbolProperties","isSimpleObject","cachedIsSimpleObject","undefined","_elementsAreSimpleObjects","result","mightBeFinalObject","shape","mightNotBeFinalObject","mightBeFalse","mightNotBeFalse","makeNotPartial","makePartial","makeSimple","option","getType","obj","$Realm","intrinsics","ObjectPrototype","intrinsicName","intrinsicNameGenerated","_templateFor","ValuesDomain","getSnapshot","options","isIntrinsic","kind","c","l","r","ls","rs","absVal","createFromConditionalOp","expressionLocation","makeFinal","throwIfNotObject","usesOrdinaryObjectInternalPrototypeMethods","$GetPrototypeOf","error","CompilerDiagnostic","currentLocation","handleError","elements","size","cv","cond","ob1","ob2","p1","p2","joinedObject","primitiveValue","Value","isTypeCompatibleWith","PrimitiveValue","createFromBuildFunction","p","createFromBinaryOp","$IsExtensible","$GetOwnProperty","_P","P","StringValue","value","d1","d2","desc","d1Value","d2Value","Widen","widenValues","hasProp","doesNotHaveProp","d","dval","$DefineOwnProperty","Desc","writable","enumerable","configurable","new_val","sawTrue","sawFalse","empty","$HasProperty","$Get","Receiver","generateAbstractGet","ob","type","ArrayValue","NumberValue","shapeContainer","propertyShape","propertyGetter","instantRender","enabled","react","getPropertyShape","getAbstractType","getGetter","propAbsVal","createTemporalFromBuildFunction","skipInvariant","isPure","isInPureScope","Havoc","evaluateWithPossibleThrowCompletion","TypesDomain","topVal","$GetHelper","isIntrinsicAndHasWidenedNumericProperty","object","key","proto","NullValue","d1val","d2val","cvVal","$GetPartial","$Set","V","$SetPartial","oldVal1","oldVal2","newVal1","newVal2","result1","result2","oldVal","v","generator","emitStatement","$Delete","$OwnPropertyKeys"],"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 { CompilerDiagnostic, FatalError } from \"../errors.js\";\nimport type { Realm } from \"../realm.js\";\nimport type { Descriptor, PropertyKeyValue, ShapeInformationInterface } from \"../types.js\";\nimport {\n AbstractValue,\n type AbstractValueKind,\n ArrayValue,\n NullValue,\n NumberValue,\n ObjectValue,\n PrimitiveValue,\n StringValue,\n Value,\n} from \"./index.js\";\nimport { TypesDomain, ValuesDomain } from \"../domains/index.js\";\nimport {\n GetFromArrayWithWidenedNumericProperty,\n IsDataDescriptor,\n cloneDescriptor,\n equalDescriptors,\n} from \"../methods/index.js\";\nimport { Havoc, Widen } from \"../singletons.js\";\nimport invariant from \"../invariant.js\";\nimport { createOperationDescriptor, type OperationDescriptor } from \"../utils/generator.js\";\n\nexport default class AbstractObjectValue extends AbstractValue {\n constructor(\n realm: Realm,\n types: TypesDomain,\n values: ValuesDomain,\n hashValue: number,\n args: Array<Value>,\n operationDescriptor?: OperationDescriptor,\n optionalArgs?: {| kind?: AbstractValueKind, intrinsicName?: string, shape?: ShapeInformationInterface |}\n ) {\n super(realm, types, values, hashValue, args, operationDescriptor, optionalArgs);\n if (!values.isTop()) {\n for (let element of this.values.getElements()) invariant(element instanceof ObjectValue);\n }\n }\n\n cachedIsSimpleObject: void | boolean;\n functionResultType: void | typeof Value;\n\n getTemplate(): ObjectValue {\n for (let element of this.values.getElements()) {\n invariant(element instanceof ObjectValue);\n if (element.isPartialObject()) {\n return element;\n } else {\n break;\n }\n }\n AbstractValue.reportIntrospectionError(this);\n throw new FatalError();\n }\n\n set temporalAlias(temporalValue: AbstractObjectValue) {\n if (this.values.isTop()) {\n AbstractValue.reportIntrospectionError(this);\n throw new FatalError();\n }\n for (let element of this.values.getElements()) {\n invariant(element instanceof ObjectValue);\n element.temporalAlias = temporalValue;\n }\n }\n\n hasStringOrSymbolProperties(): boolean {\n if (this.values.isTop()) return false;\n for (let element of this.values.getElements()) {\n invariant(element instanceof ObjectValue);\n if (element.hasStringOrSymbolProperties()) return true;\n }\n return false;\n }\n\n isPartialObject(): boolean {\n // At the very least, the identity of the object is unknown\n return true;\n }\n\n isSimpleObject(): boolean {\n if (this.cachedIsSimpleObject === undefined) this.cachedIsSimpleObject = this._elementsAreSimpleObjects();\n return this.cachedIsSimpleObject;\n }\n\n _elementsAreSimpleObjects(): boolean {\n if (this.values.isTop()) return false;\n let result;\n for (let element of this.values.getElements()) {\n invariant(element instanceof ObjectValue);\n if (result === undefined) {\n result = element.isSimpleObject();\n } else if (result !== element.isSimpleObject()) {\n AbstractValue.reportIntrospectionError(this);\n throw new FatalError();\n }\n }\n if (result === undefined) {\n AbstractValue.reportIntrospectionError(this);\n throw new FatalError();\n }\n return result;\n }\n\n mightBeFinalObject(): boolean {\n // modeled objects are always read-only\n if (this.shape) return true;\n if (this.values.isTop()) return false;\n for (let element of this.values.getElements()) {\n invariant(element instanceof ObjectValue);\n if (element.mightBeFinalObject()) return true;\n }\n return false;\n }\n\n mightNotBeFinalObject(): boolean {\n // modeled objects are always read-only\n if (this.shape) return false;\n if (this.values.isTop()) return false;\n for (let element of this.values.getElements()) {\n invariant(element instanceof ObjectValue);\n if (element.mightNotBeFinalObject()) return true;\n }\n return false;\n }\n\n mightBeFalse(): boolean {\n return false;\n }\n\n mightNotBeFalse(): boolean {\n return true;\n }\n\n makeNotPartial(): void {\n if (this.values.isTop()) {\n AbstractValue.reportIntrospectionError(this);\n throw new FatalError();\n }\n for (let element of this.values.getElements()) {\n invariant(element instanceof ObjectValue);\n element.makeNotPartial();\n }\n }\n\n makePartial(): void {\n if (this.values.isTop()) {\n AbstractValue.reportIntrospectionError(this);\n throw new FatalError();\n }\n for (let element of this.values.getElements()) {\n invariant(element instanceof ObjectValue);\n element.makePartial();\n }\n }\n\n makeSimple(option?: string | Value): void {\n if (this.values.isTop() && this.getType() === ObjectValue) {\n let obj = new ObjectValue(this.$Realm, this.$Realm.intrinsics.ObjectPrototype);\n obj.intrinsicName = this.intrinsicName;\n obj.intrinsicNameGenerated = true;\n obj.makePartial();\n obj._templateFor = this;\n this.values = new ValuesDomain(obj);\n }\n if (!this.values.isTop()) {\n for (let element of this.values.getElements()) {\n invariant(element instanceof ObjectValue);\n element.makeSimple(option);\n }\n }\n this.cachedIsSimpleObject = true;\n }\n\n // Use this only if it is known that only the string properties of the snapshot will be accessed.\n getSnapshot(options?: { removeProperties: boolean }): AbstractObjectValue {\n if (this.isIntrinsic()) return this; // already temporal\n if (this.values.isTop()) return this; // always the same\n if (this.kind === \"conditional\") {\n let [c, l, r] = this.args;\n invariant(l instanceof ObjectValue || l instanceof AbstractObjectValue);\n let ls = l.getSnapshot(options);\n invariant(r instanceof ObjectValue || r instanceof AbstractObjectValue);\n let rs = r.getSnapshot(options);\n invariant(c instanceof AbstractValue);\n let absVal = AbstractValue.createFromConditionalOp(this.$Realm, c, ls, rs, this.expressionLocation);\n invariant(absVal instanceof AbstractObjectValue);\n return absVal;\n }\n // If this is some other kind of abstract object we don't know how to make a copy, so just make this final\n this.makeFinal();\n return this;\n }\n\n makeFinal(): void {\n if (this.shape) return;\n if (this.values.isTop()) {\n AbstractValue.reportIntrospectionError(this);\n throw new FatalError();\n }\n for (let element of this.values.getElements()) {\n invariant(element instanceof ObjectValue);\n element.makeFinal();\n }\n }\n\n throwIfNotObject(): AbstractObjectValue {\n return this;\n }\n\n usesOrdinaryObjectInternalPrototypeMethods(): boolean {\n return true;\n }\n\n // ECMA262 9.1.1\n $GetPrototypeOf(): ObjectValue | AbstractObjectValue | NullValue {\n let realm = this.$Realm;\n if (this.values.isTop()) {\n let error = new CompilerDiagnostic(\n \"prototype access on unknown object\",\n this.$Realm.currentLocation,\n \"PP0032\",\n \"FatalError\"\n );\n this.$Realm.handleError(error);\n throw new FatalError();\n }\n invariant(this.kind !== \"widened\", \"widening currently always leads to top values\");\n let elements = this.values.getElements();\n if (elements.size === 1) {\n for (let cv of elements) {\n invariant(cv instanceof ObjectValue);\n return cv.$GetPrototypeOf();\n }\n invariant(false);\n } else if (this.kind === \"conditional\") {\n // this is the join of two concrete/abstract objects\n // use this join condition for the join of the two property values\n let [cond, ob1, ob2] = this.args;\n invariant(cond instanceof AbstractValue);\n invariant(ob1 instanceof ObjectValue || ob1 instanceof AbstractObjectValue);\n invariant(ob2 instanceof ObjectValue || ob2 instanceof AbstractObjectValue);\n let p1 = ob1.$GetPrototypeOf();\n let p2 = ob2.$GetPrototypeOf();\n let joinedObject = AbstractValue.createFromConditionalOp(realm, cond, p1, p2);\n invariant(joinedObject instanceof AbstractObjectValue);\n return joinedObject;\n } else if (this.kind === \"explicit conversion to object\") {\n let primitiveValue = this.args[0];\n invariant(!Value.isTypeCompatibleWith(primitiveValue.getType(), PrimitiveValue));\n let result = AbstractValue.createFromBuildFunction(\n realm,\n ObjectValue,\n [primitiveValue],\n createOperationDescriptor(\"ABSTRACT_OBJECT_GET_PROTO_OF\")\n );\n invariant(result instanceof AbstractObjectValue);\n return result;\n } else {\n let joinedObject;\n for (let cv of elements) {\n invariant(cv instanceof ObjectValue);\n let p = cv.$GetPrototypeOf();\n if (joinedObject === undefined) {\n joinedObject = p;\n } else {\n let cond = AbstractValue.createFromBinaryOp(realm, \"===\", this, cv, this.expressionLocation);\n joinedObject = AbstractValue.createFromConditionalOp(realm, cond, p, joinedObject);\n }\n }\n invariant(joinedObject instanceof AbstractObjectValue);\n return joinedObject;\n }\n }\n\n // ECMA262 9.1.3\n $IsExtensible(): boolean {\n return false;\n }\n\n // ECMA262 9.1.5\n $GetOwnProperty(_P: PropertyKeyValue): Descriptor | void {\n let P = _P;\n if (P instanceof StringValue) P = P.value;\n\n if (this.values.isTop()) {\n let error = new CompilerDiagnostic(\n \"property access on unknown object\",\n this.$Realm.currentLocation,\n \"PP0031\",\n \"FatalError\"\n );\n this.$Realm.handleError(error);\n throw new FatalError();\n }\n\n let elements = this.values.getElements();\n if (elements.size === 1) {\n for (let cv of elements) {\n invariant(cv instanceof ObjectValue);\n return cv.$GetOwnProperty(P);\n }\n invariant(false);\n } else if (this.kind === \"conditional\") {\n // this is the join of two concrete/abstract objects\n // use this join condition for the join of the two property values\n let [cond, ob1, ob2] = this.args;\n invariant(cond instanceof AbstractValue);\n invariant(ob1 instanceof ObjectValue || ob1 instanceof AbstractObjectValue);\n invariant(ob2 instanceof ObjectValue || ob2 instanceof AbstractObjectValue);\n let d1 = ob1.$GetOwnProperty(P);\n let d2 = ob2.$GetOwnProperty(P);\n if (d1 === undefined || d2 === undefined || !equalDescriptors(d1, d2)) {\n AbstractValue.reportIntrospectionError(this, P);\n throw new FatalError();\n }\n let desc = cloneDescriptor(d1);\n invariant(desc !== undefined);\n if (IsDataDescriptor(this.$Realm, desc)) {\n let d1Value = d1.value;\n invariant(d1Value === undefined || d1Value instanceof Value);\n let d2Value = d2.value;\n invariant(d2Value === undefined || d2Value instanceof Value);\n desc.value = AbstractValue.createFromConditionalOp(this.$Realm, cond, d1Value, d2Value);\n }\n return desc;\n } else if (this.kind === \"widened\") {\n // This abstract object was created by repeated assignments of freshly allocated objects to the same binding inside a loop\n let [ob1, ob2] = this.args; // ob1: summary of iterations 1...n, ob2: summary of iteration n+1\n invariant(ob1 instanceof ObjectValue);\n invariant(ob2 instanceof ObjectValue);\n let d1 = ob1.$GetOwnProperty(P);\n let d2 = ob2.$GetOwnProperty(P);\n if (d1 === undefined || d2 === undefined || !equalDescriptors(d1, d2)) {\n // We do not handle the case where different loop iterations result in different kinds of propperties\n AbstractValue.reportIntrospectionError(this, P);\n throw new FatalError();\n }\n let desc = cloneDescriptor(d1);\n invariant(desc !== undefined);\n if (IsDataDescriptor(this.$Realm, desc)) {\n // Values may be different, i.e. values may be loop variant, so the widened value summarizes the entire loop\n // equalDescriptors guarantees that both have value props and if you have a value prop is value is defined.\n let d1Value = d1.value;\n invariant(d1Value instanceof Value);\n let d2Value = d2.value;\n invariant(d2Value instanceof Value);\n desc.value = Widen.widenValues(this.$Realm, d1Value, d2Value);\n } else {\n // In this case equalDescriptors guarantees exact equality betwee d1 and d2.\n // Inlining the accessors will eventually bring in data properties if the accessors have loop variant behavior\n }\n return desc;\n } else {\n let hasProp = false;\n let doesNotHaveProp = false;\n let desc;\n for (let cv of elements) {\n invariant(cv instanceof ObjectValue);\n let d = cv.$GetOwnProperty(P);\n if (d === undefined) doesNotHaveProp = true;\n else {\n hasProp = true;\n if (desc === undefined) {\n desc = cloneDescriptor(d);\n invariant(desc !== undefined);\n if (!IsDataDescriptor(this.$Realm, d)) continue;\n } else {\n if (!equalDescriptors(d, desc)) {\n AbstractValue.reportIntrospectionError(this, P);\n throw new FatalError();\n }\n if (!IsDataDescriptor(this.$Realm, desc)) continue;\n // values may be different\n let cond = AbstractValue.createFromBinaryOp(this.$Realm, \"===\", this, cv, this.expressionLocation);\n let dval = d.value;\n invariant(dval instanceof Value);\n desc.value = AbstractValue.createFromConditionalOp(this.$Realm, cond, dval, desc.value);\n }\n }\n }\n if (hasProp && doesNotHaveProp) {\n AbstractValue.reportIntrospectionError(this, P);\n throw new FatalError();\n }\n return desc;\n }\n }\n\n // ECMA262 9.1.6\n $DefineOwnProperty(_P: PropertyKeyValue, Desc: Descriptor): boolean {\n let P = _P;\n if (P instanceof StringValue) P = P.value;\n if (this.values.isTop()) {\n AbstractValue.reportIntrospectionError(this, P);\n throw new FatalError();\n }\n\n let elements = this.values.getElements();\n if (elements.size === 1) {\n for (let cv of elements) {\n invariant(cv instanceof ObjectValue);\n return cv.$DefineOwnProperty(P, Desc);\n }\n invariant(false);\n } else {\n if (!IsDataDescriptor(this.$Realm, Desc)) {\n AbstractValue.reportIntrospectionError(this, P);\n throw new FatalError();\n }\n let desc = {\n value: \"value\" in Desc ? Desc.value : this.$Realm.intrinsics.undefined,\n writable: \"writable\" in Desc ? Desc.writable : false,\n enumerable: \"enumerable\" in Desc ? Desc.enumerable : false,\n configurable: \"configurable\" in Desc ? Desc.configurable : false,\n };\n let new_val = desc.value;\n invariant(new_val instanceof Value);\n let sawTrue = false;\n let sawFalse = false;\n for (let cv of elements) {\n invariant(cv instanceof ObjectValue);\n let d = cv.$GetOwnProperty(P);\n if (d !== undefined && !equalDescriptors(d, desc)) {\n AbstractValue.reportIntrospectionError(this, P);\n throw new FatalError();\n }\n let dval = d === undefined || d.value === undefined ? this.$Realm.intrinsics.empty : d.value;\n invariant(dval instanceof Value);\n let cond = AbstractValue.createFromBinaryOp(this.$Realm, \"===\", this, cv, this.expressionLocation);\n desc.value = AbstractValue.createFromConditionalOp(this.$Realm, cond, new_val, dval);\n if (cv.$DefineOwnProperty(P, desc)) {\n sawTrue = true;\n } else sawFalse = true;\n }\n if (sawTrue && sawFalse) {\n AbstractValue.reportIntrospectionError(this, P);\n throw new FatalError();\n }\n return sawTrue;\n }\n }\n\n // ECMA262 9.1.7\n $HasProperty(_P: PropertyKeyValue): boolean {\n let P = _P;\n if (P instanceof StringValue) P = P.value;\n if (this.values.isTop()) {\n let error = new CompilerDiagnostic(\n \"property access on unknown object\",\n this.$Realm.currentLocation,\n \"PP0031\",\n \"FatalError\"\n );\n this.$Realm.handleError(error);\n throw new FatalError();\n }\n\n let elements = this.values.getElements();\n if (elements.size === 1) {\n for (let cv of elements) {\n invariant(cv instanceof ObjectValue);\n return cv.$HasProperty(P);\n }\n invariant(false);\n } else {\n let hasProp = false;\n let doesNotHaveProp = false;\n for (let cv of elements) {\n invariant(cv instanceof ObjectValue);\n if (cv.$HasProperty(P)) hasProp = true;\n else doesNotHaveProp = true;\n }\n if (hasProp && doesNotHaveProp) {\n AbstractValue.reportIntrospectionError(this, P);\n throw new FatalError();\n }\n return hasProp;\n }\n }\n\n // ECMA262 9.1.8\n $Get(_P: PropertyKeyValue, Receiver: Value): Value {\n let P = _P;\n if (P instanceof StringValue) P = P.value;\n\n if (this.values.isTop()) {\n let generateAbstractGet = () => {\n let ob = Receiver;\n if (this.kind === \"explicit conversion to object\") ob = this.args[0];\n let type = Value;\n if (P === \"length\" && Value.isTypeCompatibleWith(this.getType(), ArrayValue)) type = NumberValue;\n // shape logic\n let shapeContainer = this.kind === \"explicit conversion to object\" ? this.args[0] : this;\n invariant(shapeContainer instanceof AbstractValue);\n invariant(typeof P === \"string\");\n let realm = this.$Realm;\n let shape = shapeContainer.shape;\n let propertyShape, propertyGetter;\n if ((realm.instantRender.enabled || realm.react.enabled) && shape !== undefined) {\n propertyShape = shape.getPropertyShape(P);\n if (propertyShape !== undefined) {\n type = propertyShape.getAbstractType();\n propertyGetter = propertyShape.getGetter();\n }\n }\n let propAbsVal = AbstractValue.createTemporalFromBuildFunction(\n realm,\n type,\n [ob, new StringValue(this.$Realm, P)],\n createOperationDescriptor(\"ABSTRACT_OBJECT_GET\", { propertyGetter }),\n {\n skipInvariant: true,\n isPure: true,\n shape: propertyShape,\n }\n );\n return propAbsVal;\n };\n if (this.isSimpleObject() && this.isIntrinsic()) {\n return generateAbstractGet();\n } else if (this.$Realm.isInPureScope()) {\n // This object might have leaked to a getter.\n Havoc.value(this.$Realm, Receiver);\n // The getter might throw anything.\n return this.$Realm.evaluateWithPossibleThrowCompletion(\n generateAbstractGet,\n TypesDomain.topVal,\n ValuesDomain.topVal\n );\n }\n let error = new CompilerDiagnostic(\n \"property access on unknown object\",\n this.$Realm.currentLocation,\n \"PP0031\",\n \"FatalError\"\n );\n this.$Realm.handleError(error);\n throw new FatalError();\n }\n\n let $GetHelper = ob => {\n if (ob instanceof ArrayValue && ArrayValue.isIntrinsicAndHasWidenedNumericProperty(ob) && typeof P === \"string\") {\n return {\n object: ob,\n key: P,\n value: GetFromArrayWithWidenedNumericProperty(this.$Realm, ob, P),\n };\n }\n let d = ob.$GetOwnProperty(P);\n if (d !== undefined) return d;\n let proto = ob.$GetPrototypeOf();\n return proto instanceof NullValue ? undefined : $GetHelper(proto);\n };\n\n let elements = this.values.getElements();\n if (elements.size === 1) {\n for (let cv of elements) {\n invariant(cv instanceof ObjectValue);\n return cv.$Get(P, Receiver);\n }\n invariant(false);\n } else if (this.kind === \"conditional\") {\n // this is the join of two concrete/abstract objects\n // use this join condition for the join of the two property values\n let [cond, ob1, ob2] = this.args;\n invariant(cond instanceof AbstractValue);\n invariant(ob1 instanceof ObjectValue || ob1 instanceof AbstractObjectValue);\n invariant(ob2 instanceof ObjectValue || ob2 instanceof AbstractObjectValue);\n let d1 = $GetHelper(ob1);\n let d1val =\n d1 === undefined ? this.$Realm.intrinsics.undefined : IsDataDescriptor(this.$Realm, d1) ? d1.value : undefined;\n let d2 = $GetHelper(ob2);\n let d2val =\n d2 === undefined ? this.$Realm.intrinsics.undefined : IsDataDescriptor(this.$Realm, d2) ? d2.value : undefined;\n // We do not currently join property getters\n if (d1val === undefined || d2val === undefined) {\n AbstractValue.reportIntrospectionError(this, P);\n throw new FatalError();\n }\n invariant(d1val instanceof Value);\n invariant(d2val instanceof Value);\n return AbstractValue.createFromConditionalOp(this.$Realm, cond, d1val, d2val);\n } else {\n let result;\n for (let cv of elements) {\n invariant(cv instanceof ObjectValue);\n let d = $GetHelper(cv);\n // We do not currently join property getters\n if (d !== undefined && !IsDataDescriptor(this.$Realm, d)) {\n AbstractValue.reportIntrospectionError(this, P);\n throw new FatalError();\n }\n let cvVal = d === undefined ? this.$Realm.intrinsics.undefined : d.value;\n invariant(cvVal instanceof Value);\n if (result === undefined) result = cvVal;\n else {\n let cond = AbstractValue.createFromBinaryOp(this.$Realm, \"===\", this, cv, this.expressionLocation);\n result = AbstractValue.createFromConditionalOp(this.$Realm, cond, cvVal, result);\n }\n }\n invariant(result !== undefined);\n return result;\n }\n }\n\n $GetPartial(P: AbstractValue | PropertyKeyValue, Receiver: Value): Value {\n if (!(P instanceof AbstractValue)) return this.$Get(P, Receiver);\n if (this.values.isTop()) {\n if (this.isSimpleObject() && this.isIntrinsic()) {\n return AbstractValue.createTemporalFromBuildFunction(\n this.$Realm,\n Value,\n [this, P],\n createOperationDescriptor(\"ABSTRACT_OBJECT_GET_PARTIAL\"),\n { skipInvariant: true, isPure: true }\n );\n }\n if (this.$Realm.isInPureScope()) {\n // If we're in a pure scope, we can havoc the key and the instance,\n // and leave the residual property access in place.\n // We assume that if the receiver is different than this object,\n // then we only got here because there can be no other keys with\n // this name on earlier parts of the prototype chain.\n // We have to havoc since the property may be a getter or setter,\n // which can run unknown code that has access to Receiver and\n // (even in pure mode) can modify it in unknown ways.\n Havoc.value(this.$Realm, Receiver);\n // Coercion can only have effects on anything reachable from the key.\n Havoc.value(this.$Realm, P);\n return AbstractValue.createTemporalFromBuildFunction(\n this.$Realm,\n Value,\n [Receiver, P],\n createOperationDescriptor(\"ABSTRACT_OBJECT_GET_PARTIAL\"),\n { skipInvariant: true, isPure: true }\n );\n }\n let error = new CompilerDiagnostic(\n \"property access on unknown object\",\n this.$Realm.currentLocation,\n \"PP0031\",\n \"FatalError\"\n );\n this.$Realm.handleError(error);\n throw new FatalError();\n }\n\n let elements = this.values.getElements();\n if (elements.size === 1) {\n for (let cv of elements) {\n invariant(cv instanceof ObjectValue);\n return cv.$GetPartial(P, Receiver === this ? cv : Receiver);\n }\n invariant(false);\n } else {\n let result;\n for (let cv of elements) {\n invariant(cv instanceof ObjectValue);\n let cvVal = cv.$GetPartial(P, Receiver === this ? cv : Receiver);\n if (result === undefined) result = cvVal;\n else {\n let cond = AbstractValue.createFromBinaryOp(this.$Realm, \"===\", this, cv, this.expressionLocation);\n result = AbstractValue.createFromConditionalOp(this.$Realm, cond, cvVal, result);\n }\n }\n invariant(result !== undefined);\n return result;\n }\n }\n\n // ECMA262 9.1.9\n $Set(P: PropertyKeyValue, V: Value, Receiver: Value): boolean {\n if (this.values.isTop()) {\n return this.$SetPartial(P, V, Receiver);\n }\n\n let elements = this.values.getElements();\n if (elements.size === 1) {\n for (let cv of elements) {\n invariant(cv instanceof ObjectValue);\n return cv.$Set(P, V, Receiver === this ? cv : Receiver);\n }\n invariant(false);\n } else if (this.kind === \"conditional\") {\n // this is the join of two concrete/abstract objects\n // use this join condition for the join of the two property values\n let [cond, ob1, ob2] = this.args;\n invariant(cond instanceof AbstractValue);\n invariant(ob1 instanceof ObjectValue || ob1 instanceof AbstractObjectValue);\n invariant(ob2 instanceof ObjectValue || ob2 instanceof AbstractObjectValue);\n let d1 = ob1.$GetOwnProperty(P);\n let d2 = ob2.$GetOwnProperty(P);\n let oldVal1 =\n d1 === undefined ? this.$Realm.intrinsics.empty : IsDataDescriptor(this.$Realm, d1) ? d1.value : undefined;\n let oldVal2 =\n d2 === undefined ? this.$Realm.intrinsics.empty : IsDataDescriptor(this.$Realm, d2) ? d2.value : undefined;\n if (oldVal1 === undefined || oldVal2 === undefined) {\n AbstractValue.reportIntrospectionError(this, P);\n throw new FatalError();\n }\n invariant(oldVal1 instanceof Value);\n invariant(oldVal2 instanceof Value);\n let newVal1 = AbstractValue.createFromConditionalOp(this.$Realm, cond, V, oldVal1);\n let newVal2 = AbstractValue.createFromConditionalOp(this.$Realm, cond, oldVal2, V);\n let result1 = ob1.$Set(P, newVal1, ob1);\n let result2 = ob2.$Set(P, newVal2, ob2);\n if (result1 !== result2) {\n AbstractValue.reportIntrospectionError(this, P);\n throw new FatalError();\n }\n return result1;\n } else {\n let sawTrue = false;\n let sawFalse = false;\n for (let cv of elements) {\n invariant(cv instanceof ObjectValue);\n let d = cv.$GetOwnProperty(P);\n if (d !== undefined && !IsDataDescriptor(this.$Realm, d)) {\n AbstractValue.reportIntrospectionError(this, P);\n throw new FatalError();\n }\n let oldVal = d === undefined ? this.$Realm.intrinsics.empty : d.value;\n invariant(oldVal instanceof Value);\n let cond = AbstractValue.createFromBinaryOp(this.$Realm, \"===\", this, cv, this.expressionLocation);\n let v = AbstractValue.createFromConditionalOp(this.$Realm, cond, V, oldVal);\n if (cv.$Set(P, v, cv)) sawTrue = true;\n else sawFalse = true;\n }\n if (sawTrue && sawFalse) {\n AbstractValue.reportIntrospectionError(this, P);\n throw new FatalError();\n }\n return sawTrue;\n }\n }\n\n $SetPartial(_P: AbstractValue | PropertyKeyValue, V: Value, Receiver: Value): boolean {\n let P = _P;\n if (this.values.isTop()) {\n if (this.$Realm.isInPureScope()) {\n // If we're in a pure scope, we can havoc the key and the instance,\n // and leave the residual property assignment in place.\n // We assume that if the receiver is different than this object,\n // then we only got here because there can be no other keys with\n // this name on earlier parts of the prototype chain.\n // We have to havoc since the property may be a getter or setter,\n // which can run unknown code that has access to Receiver and\n // (even in pure mode) can modify it in unknown ways.\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\n if (typeof P === \"string\") {\n generator.emitStatement(\n [Receiver, new StringValue(this.$Realm, P), V],\n createOperationDescriptor(\"ABSTRACT_OBJECT_SET_PARTIAL\")\n );\n } else {\n // Coercion can only have effects on anything reachable from the key.\n Havoc.value(this.$Realm, P);\n generator.emitStatement([Receiver, P, V], createOperationDescriptor(\"ABSTRACT_OBJECT_SET_PARTIAL\"));\n }\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 }\n let error = new CompilerDiagnostic(\n \"property access on unknown object\",\n this.$Realm.currentLocation,\n \"PP0031\",\n \"FatalError\"\n );\n this.$Realm.handleError(error);\n throw new FatalError();\n }\n\n if (!(P instanceof AbstractValue)) return this.$Set(P, V, Receiver);\n\n let elements = this.values.getElements();\n if (elements.size === 1) {\n for (let cv of elements) {\n invariant(cv instanceof ObjectValue);\n return cv.$SetPartial(P, V, Receiver === this ? cv : Receiver);\n }\n invariant(false);\n } else {\n for (let cv of elements) {\n invariant(cv instanceof ObjectValue);\n let oldVal = this.$GetPartial(P, Receiver === this ? cv : Receiver);\n let cond = AbstractValue.createFromBinaryOp(this.$Realm, \"===\", this, cv, this.expressionLocation);\n let v = AbstractValue.createFromConditionalOp(this.$Realm, cond, V, oldVal);\n cv.$SetPartial(P, v, Receiver === this ? cv : Receiver);\n }\n return true;\n }\n }\n\n // ECMA262 9.1.10\n $Delete(_P: PropertyKeyValue): boolean {\n let P = _P;\n if (P instanceof StringValue) P = P.value;\n if (this.values.isTop()) {\n AbstractValue.reportIntrospectionError(this, P);\n throw new FatalError();\n }\n\n let elements = this.values.getElements();\n if (elements.size === 1) {\n for (let cv of elements) {\n invariant(cv instanceof ObjectValue);\n return cv.$Delete(P);\n }\n invariant(false);\n } else {\n let sawTrue = false;\n let sawFalse = false;\n for (let cv of elements) {\n invariant(cv instanceof ObjectValue);\n let d = cv.$GetOwnProperty(P);\n if (d === undefined) continue;\n if (!IsDataDescriptor(this.$Realm, d)) {\n AbstractValue.reportIntrospectionError(this, P);\n throw new FatalError();\n }\n let cond = AbstractValue.createFromBinaryOp(this.$Realm, \"===\", this, cv, this.expressionLocation);\n let dval = d.value;\n invariant(dval instanceof Value);\n let v = AbstractValue.createFromConditionalOp(this.$Realm, cond, this.$Realm.intrinsics.empty, dval);\n if (cv.$Set(P, v, cv)) sawTrue = true;\n else sawFalse = true;\n }\n if (sawTrue && sawFalse) {\n AbstractValue.reportIntrospectionError(this, P);\n throw new FatalError();\n }\n return sawTrue;\n }\n }\n\n $OwnPropertyKeys(): Array<PropertyKeyValue> {\n if (this.values.isTop()) {\n AbstractValue.reportIntrospectionError(this);\n throw new FatalError();\n }\n let elements = this.values.getElements();\n if (elements.size === 1) {\n for (let cv of elements) {\n invariant(cv instanceof ObjectValue);\n return cv.$OwnPropertyKeys();\n }\n invariant(false);\n } else {\n AbstractValue.reportIntrospectionError(this);\n throw new FatalError();\n }\n }\n}\n"],"file":"AbstractObjectValue.js"}
\No newline at end of file