UNPKG

17.4 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../../src/values/IntegerIndexedExotic.js"],"names":["IntegerIndexedExotic","ObjectValue","constructor","realm","intrinsicName","intrinsics","ObjectPrototype","$GetOwnProperty","P","O","$Realm","$ViewedArrayBuffer","StringValue","numericIndex","To","CanonicalNumericIndexString","undefined","value","UndefinedValue","writable","enumerable","configurable","Properties","OrdinaryGetOwnProperty","$HasProperty","buffer","createErrorThrowCompletion","TypeError","Object","is","$ArrayLength","$DefineOwnProperty","Desc","length","Value","OrdinaryDefineOwnProperty","$Get","Receiver","$Set","V","OrdinarySet","$OwnPropertyKeys","keys","$ByteOffset","$TypedArrayName","len","i","push","ToString","NumberValue","properties","getOwnPropertyKeysArray","key","filter","x","symbols"],"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 strict-local */\n\nimport type { Realm } from \"../realm.js\";\nimport type { PropertyKeyValue, Descriptor } from \"../types.js\";\nimport { ObjectValue, NumberValue, StringValue, Value, UndefinedValue } from \"./index.js\";\nimport { IsInteger, IsArrayIndex, IsAccessorDescriptor, IsDetachedBuffer, IsPropertyKey } from \"../methods/is.js\";\nimport { OrdinaryGet } from \"../methods/get.js\";\nimport { OrdinaryHasProperty } from \"../methods/has.js\";\nimport { IntegerIndexedElementSet, IntegerIndexedElementGet } from \"../methods/typedarray.js\";\nimport { Properties, To } from \"../singletons.js\";\nimport invariant from \"../invariant.js\";\n\nexport default class IntegerIndexedExotic extends ObjectValue {\n constructor(realm: Realm, intrinsicName?: string) {\n super(realm, realm.intrinsics.ObjectPrototype, intrinsicName);\n }\n\n // ECMA262 9.4.5.1\n $GetOwnProperty(P: PropertyKeyValue): Descriptor | void {\n let O = this;\n\n // 1. Assert: IsPropertyKey(P) is true.\n invariant(IsPropertyKey(this.$Realm, P), \"IsPropertyKey(P) is true\");\n\n // 2. Assert: O is an Object that has a [[ViewedArrayBuffer]] internal slot.\n invariant(O instanceof ObjectValue && O.$ViewedArrayBuffer);\n\n // 3. If Type(P) is String, then\n if (typeof P === \"string\" || P instanceof StringValue) {\n // a. Let numericIndex be ! CanonicalNumericIndexString(P).\n let numericIndex = To.CanonicalNumericIndexString(\n this.$Realm,\n typeof P === \"string\" ? new StringValue(this.$Realm, P) : P\n );\n\n // b. If numericIndex is not undefined, then\n if (numericIndex !== undefined) {\n // i. Let value be ? IntegerIndexedElementGet(O, numericIndex).\n let value = IntegerIndexedElementGet(this.$Realm, O, numericIndex);\n\n // ii. If value is undefined, return undefined.\n if (value instanceof UndefinedValue) return undefined;\n\n // iii. Return a PropertyDescriptor{[[Value]]: value, [[Writable]]: true, [[Enumerable]]: true, [[Configurable]]: false}.\n return {\n value: value,\n writable: true,\n enumerable: true,\n configurable: false,\n };\n }\n }\n // 4. Return OrdinaryGetOwnProperty(O, P).\n return Properties.OrdinaryGetOwnProperty(this.$Realm, O, P);\n }\n\n // ECMA262 9.4.5.2\n $HasProperty(P: PropertyKeyValue): boolean {\n let O = this;\n\n // 1. Assert: IsPropertyKey(P) is true.\n invariant(IsPropertyKey(this.$Realm, P), \"IsPropertyKey(P) is true\");\n\n // 2. Assert: O is an Object that has a [[ViewedArrayBuffer]] internal slot.\n invariant(O instanceof ObjectValue && O.$ViewedArrayBuffer);\n\n // 3. If Type(P) is String, then\n if (typeof P === \"string\" || P instanceof StringValue) {\n // a. Let numericIndex be ! CanonicalNumericIndexString(P).\n let numericIndex = To.CanonicalNumericIndexString(\n this.$Realm,\n typeof P === \"string\" ? new StringValue(this.$Realm, P) : P\n );\n\n // b. If numericIndex is not undefined, then\n if (numericIndex !== undefined) {\n // i. Let buffer be O.[[ViewedArrayBuffer]].\n let buffer = O.$ViewedArrayBuffer;\n invariant(buffer);\n\n // ii. If IsDetachedBuffer(buffer) is true, throw a TypeError exception.\n if (IsDetachedBuffer(this.$Realm, buffer) === true) {\n throw this.$Realm.createErrorThrowCompletion(\n this.$Realm.intrinsics.TypeError,\n \"IsDetachedBuffer(buffer) is true\"\n );\n }\n\n // iii. If IsInteger(numericIndex) is false, return false.\n if (IsInteger(this.$Realm, numericIndex) === false) return false;\n\n // iv. If numericIndex = -0, return false.\n if (Object.is(numericIndex, -0)) return false;\n\n // v. If numericIndex < 0, return false.\n if (numericIndex < 0) return false;\n\n // vi. If numericIndex ≥ O.[[ArrayLength]], return false.\n invariant(O.$ArrayLength);\n if (numericIndex >= O.$ArrayLength) return false;\n\n // vii. Return true.\n return true;\n }\n }\n\n // 4. Return ? OrdinaryHasProperty(O, P).\n return OrdinaryHasProperty(this.$Realm, O, P);\n }\n\n // ECMA262 9.4.5.3\n $DefineOwnProperty(P: PropertyKeyValue, Desc: Descriptor): boolean {\n let O = this;\n\n // 1. Assert: IsPropertyKey(P) is true.\n invariant(IsPropertyKey(this.$Realm, P), \"IsPropertyKey(P) is true\");\n\n // 2. Assert: O is an Object that has a [[ViewedArrayBuffer]] internal slot.\n invariant(O instanceof ObjectValue && this.$ViewedArrayBuffer);\n\n // 3. If Type(P) is String, then\n if (typeof P === \"string\" || P instanceof StringValue) {\n // a. Let numericIndex be ! CanonicalNumericIndexString(P).\n let numericIndex = To.CanonicalNumericIndexString(\n this.$Realm,\n typeof P === \"string\" ? new StringValue(this.$Realm, P) : P\n );\n\n // b. If numericIndex is not undefined, then\n if (numericIndex !== undefined) {\n // i. If IsInteger(numericIndex) is false, return false.\n if (IsInteger(this.$Realm, numericIndex) === false) return false;\n\n // ii. If numericIndex = -0, return false.\n if (Object.is(numericIndex, -0)) return false;\n\n // iii. If numericIndex < 0, return false.\n if (numericIndex < 0) return false;\n\n // iv. Let length be O.[[ArrayLength]].\n let length = this.$ArrayLength;\n invariant(typeof length === \"number\");\n\n // v. If numericIndex ≥ length, return false.\n if (numericIndex >= length) return false;\n\n // vi. If IsAccessorDescriptor(Desc) is true, return false.\n if (IsAccessorDescriptor(this.$Realm, Desc) === true) return false;\n\n // vii. If Desc has a [[Configurable]] field and if Desc.[[Configurable]] is true, return false.\n if (Desc.configurable === true) return false;\n\n // viii. If Desc has an [[Enumerable]] field and if Desc.[[Enumerable]] is false, return false.\n if (Desc.enumerable === false) return false;\n\n // ix. If Desc has a [[Writable]] field and if Desc.[[Writable]] is false, return false.\n if (Desc.writable === false) return false;\n\n // x. If Desc has a [[Value]] field, then\n if (Desc.value) {\n // 1. Let value be Desc.[[Value]].\n let value = Desc.value;\n invariant(value === undefined || value instanceof Value);\n\n // 2. Return ? IntegerIndexedElementSet(O, numericIndex, value).\n return IntegerIndexedElementSet(this.$Realm, O, numericIndex, value);\n }\n\n // xi. Return true.\n return true;\n }\n }\n\n // 4. Return ! OrdinaryDefineOwnProperty(O, P, Desc).\n return Properties.OrdinaryDefineOwnProperty(this.$Realm, O, P, Desc);\n }\n\n // ECMA262 9.4.5.4\n $Get(P: PropertyKeyValue, Receiver: Value): Value {\n let O = this;\n\n // 1. Assert: IsPropertyKey(P) is true.\n invariant(IsPropertyKey(this.$Realm, P), \"IsPropertyKey(P) is true\");\n\n // 2. If Type(P) is String, then\n if (typeof P === \"string\" || P instanceof StringValue) {\n // a. Let numericIndex be ! CanonicalNumericIndexString(P).\n let numericIndex = To.CanonicalNumericIndexString(\n this.$Realm,\n typeof P === \"string\" ? new StringValue(this.$Realm, P) : P\n );\n\n // b. If numericIndex is not undefined, then\n if (numericIndex !== undefined) {\n // i. Return ? IntegerIndexedElementGet(O, numericIndex).\n return IntegerIndexedElementGet(this.$Realm, O, numericIndex);\n }\n }\n\n // 3. Return ? OrdinaryGet(O, P, Receiver).\n return OrdinaryGet(this.$Realm, O, P, Receiver);\n }\n\n // ECMA262 9.4.5.5\n $Set(P: PropertyKeyValue, V: Value, Receiver: Value): boolean {\n let O = this;\n\n // 1. Assert: IsPropertyKey(P) is true.\n invariant(IsPropertyKey(this.$Realm, P), \"IsPropertyKey(P) is true\");\n\n // 2. If Type(P) is String, then\n if (typeof P === \"string\" || P instanceof StringValue) {\n // a. Let numericIndex be ! CanonicalNumericIndexString(P).\n let numericIndex = To.CanonicalNumericIndexString(\n this.$Realm,\n typeof P === \"string\" ? new StringValue(this.$Realm, P) : P\n );\n\n // b. If numericIndex is not undefined, then\n if (numericIndex !== undefined) {\n // i. Return ? IntegerIndexedElementSet(O, numericIndex, V).\n return IntegerIndexedElementSet(this.$Realm, O, numericIndex, V);\n }\n }\n\n // 3. Return ? OrdinarySet(O, P, V, Receiver).\n return Properties.OrdinarySet(this.$Realm, O, P, V, Receiver);\n }\n\n // ECMA262 9.4.5.6\n $OwnPropertyKeys(): Array<PropertyKeyValue> {\n let O = this;\n\n // 1. Let keys be a new empty List.\n let keys = [];\n\n // 2. Assert: O is an Object that has [[ViewedArrayBuffer]], [[ArrayLength]], [[ByteOffset]], and [[TypedArrayName]] internal slots.\n invariant(\n O instanceof ObjectValue &&\n O.$ViewedArrayBuffer &&\n O.$ArrayLength !== undefined &&\n O.$ByteOffset !== undefined &&\n O.$TypedArrayName\n );\n\n // 3. Let len be O.[[ArrayLength]].\n let len = O.$ArrayLength;\n invariant(typeof len === \"number\");\n\n // 4. For each integer i starting with 0 such that i < len, in ascending order,\n for (let i = 0; i < len; ++i) {\n // a. Add ! ToString(i) as the last element of keys.\n keys.push(new StringValue(this.$Realm, To.ToString(this.$Realm, new NumberValue(this.$Realm, i))));\n }\n\n // 5. For each own property key P of O such that Type(P) is String and P is not an integer index, in ascending chronological order of property creation\n let properties = O.getOwnPropertyKeysArray();\n for (let key of properties.filter(x => !IsArrayIndex(this.$Realm, x))) {\n // i. Add P as the last element of keys.\n keys.push(new StringValue(this.$Realm, key));\n }\n\n // 6. For each own property key P of O such that Type(P) is Symbol, in ascending chronological order of property creation\n for (let key of O.symbols.keys()) {\n // a. Add P as the last element of keys.\n keys.push(key);\n }\n\n // 7. Return keys.\n return keys;\n }\n}\n"],"file":"IntegerIndexedExotic.js"}
\No newline at end of file