private ScriptValue IntegerIndexedElementGet(double index) { //https://tc39.github.io/ecma262/#sec-integerindexedelementget var buffer = ViewedArrayBuffer; if (ArrayBufferIntrinsics.IsDetachedBuffer(buffer)) { throw Agent.CreateTypeError(); } if (!Agent.IsInteger(index)) { return(ScriptValue.Undefined); } if (index == 0 && index.IsNegative()) { return(ScriptValue.Undefined); } var length = ArrayLength; if (index < 0 || index >= length) { return(ScriptValue.Undefined); } var indexedPosition = (long)index * Description.Size + ByteOffset; return(ArrayBufferIntrinsics.GetValueFromBuffer(Agent, buffer, indexedPosition, Description, true, OrderType.Unordered, Agent.LittleEndian)); }
private bool IntegerIndexedElementSet(double index, ScriptValue value) { //https://tc39.github.io/ecma262/#sec-integerindexedelementset var numberValue = Agent.ToNumber(value); var buffer = ViewedArrayBuffer; if (ArrayBufferIntrinsics.IsDetachedBuffer(buffer)) { throw Agent.CreateTypeError(); } if (!Agent.IsInteger(index)) { return(false); } if (index == 0 && index.IsNegative()) { return(false); } var length = ArrayLength; if (index < 0 || index >= length) { return(false); } var indexedPosition = (long)index * Description.Size + ByteOffset; ArrayBufferIntrinsics.SetValueInBuffer(Agent, buffer, indexedPosition, Description, numberValue, true, OrderType.Unordered, Agent.LittleEndian); return(true); }
/// <inheritdoc /> public override bool HasProperty(ScriptValue property) { //https://tc39.github.io/ecma262/#sec-integer-indexed-exotic-objects-hasproperty-p Debug.Assert(Agent.IsPropertyKey(property)); if (property.IsString) { var numericIndex = Agent.CanonicalNumericIndexString((string)property); if (numericIndex.HasValue) { var buffer = ViewedArrayBuffer; if (ArrayBufferIntrinsics.IsDetachedBuffer(buffer)) { throw Agent.CreateTypeError(); } if (!Agent.IsInteger(numericIndex.Value)) { return(false); } if (numericIndex.Value.IsNegative()) { return(false); } if (numericIndex.Value >= ArrayLength) { return(false); } return(true); } } return(base.HasProperty(property)); }