Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[pull] main from ljharb:main #51

Merged
merged 9 commits into from
Nov 26, 2024
5 changes: 5 additions & 0 deletions .eslintrc
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,11 @@
"max-statements": 1,
"max-statements-per-line": [2, { "max": 2 }],
"multiline-comment-style": 0,
"no-implicit-coercion": [2, {
"boolean": false,
"number": false,
"string": true,
}],
"no-magic-numbers": 0,
"new-cap": 0,
"no-extra-parens": 1,
Expand Down
1 change: 0 additions & 1 deletion .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,6 @@
/2017/Set.js spackled linguist-generated=true
/2017/SetFunctionName.js spackled linguist-generated=true
/2017/SetIntegrityLevel.js spackled linguist-generated=true
/2017/SetValueInBuffer.js spackled linguist-generated=true
/2017/SpeciesConstructor.js spackled linguist-generated=true
/2017/SplitMatch.js spackled linguist-generated=true
/2017/StrictEqualityComparison.js spackled linguist-generated=true
Expand Down
4 changes: 4 additions & 0 deletions 2015/MonthFromTime.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion 2015/QuoteJSONString.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ module.exports = function QuoteJSONString(value) {
}
var product = '"';
if (value) {
forEach($strSplit(value), function (C) {
forEach($strSplit(value, ''), function (C) {
if (C === '"' || C === '\\') {
product += '\u005C' + C;
} else if (C === '\u0008' || C === '\u000C' || C === '\u000A' || C === '\u000D' || C === '\u0009') {
Expand Down
2 changes: 1 addition & 1 deletion 2015/TestIntegrityLevel.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ module.exports = function TestIntegrityLevel(O, level) {
throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`');
}
var status = IsExtensible(O);
if (status) {
if (status || !$gOPD) {
return false;
}
var theKeys = OwnPropertyKeys(O);
Expand Down
3 changes: 1 addition & 2 deletions 2015/TimeClip.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion 2015/ToNumber.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,5 +44,5 @@ module.exports = function ToNumber(argument) {
}

}
return $Number(value);
return +value;
};
4 changes: 4 additions & 0 deletions 2016/MonthFromTime.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion 2016/QuoteJSONString.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion 2016/TestIntegrityLevel.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 1 addition & 2 deletions 2016/TimeClip.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion 2016/ToNumber.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions 2017/MonthFromTime.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion 2017/QuoteJSONString.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

90 changes: 37 additions & 53 deletions 2017/SetValueInBuffer.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,47 +2,32 @@

var GetIntrinsic = require('get-intrinsic');

var $SyntaxError = require('es-errors/syntax');
var $TypeError = require('es-errors/type');
var $Uint8Array = GetIntrinsic('%Uint8Array%', true);

var isInteger = require('../helpers/isInteger');

var IsDetachedBuffer = require('./IsDetachedBuffer');
var ToInt16 = require('./ToInt16');
var ToInt32 = require('./ToInt32');
var ToInt8 = require('./ToInt8');
var ToUint16 = require('./ToUint16');
var ToUint32 = require('./ToUint32');
var ToUint8 = require('./ToUint8');
var ToUint8Clamp = require('./ToUint8Clamp');
var NumberToRawBytes = require('./NumberToRawBytes');

var isArrayBuffer = require('is-array-buffer');
var isSharedArrayBuffer = require('is-shared-array-buffer');
var hasOwn = require('hasown');

var tableTAO = require('./tables/typed-array-objects');

var TypeToAO = {
__proto__: null,
Int8: ToInt8,
Uint8: ToUint8,
Uint8C: ToUint8Clamp,
Int16: ToInt16,
Uint16: ToUint16,
Int32: ToInt32,
Uint32: ToUint32
};

var defaultEndianness = require('../helpers/defaultEndianness');
var forEach = require('../helpers/forEach');
var integerToNBytes = require('../helpers/integerToNBytes');
var valueToFloat32Bytes = require('../helpers/valueToFloat32Bytes');
var valueToFloat64Bytes = require('../helpers/valueToFloat64Bytes');

// https://262.ecma-international.org/6.0/#sec-setvalueinbuffer
// https://262.ecma-international.org/8.0/#sec-setvalueinbuffer

/* eslint max-params: 0 */

module.exports = function SetValueInBuffer(arrayBuffer, byteIndex, type, value) {
if (!isArrayBuffer(arrayBuffer)) {
throw new $TypeError('Assertion failed: `arrayBuffer` must be an ArrayBuffer');
module.exports = function SetValueInBuffer(arrayBuffer, byteIndex, type, value, isTypedArray, order) {
var isSAB = isSharedArrayBuffer(arrayBuffer);
if (!isArrayBuffer(arrayBuffer) && !isSAB) {
throw new $TypeError('Assertion failed: `arrayBuffer` must be an ArrayBuffer or a SharedArrayBuffer');
}

if (!isInteger(byteIndex)) {
Expand All @@ -57,7 +42,14 @@ module.exports = function SetValueInBuffer(arrayBuffer, byteIndex, type, value)
throw new $TypeError('Assertion failed: `value` must be a number');
}

if (arguments.length > 4 && typeof arguments[4] !== 'boolean') {
if (typeof isTypedArray !== 'boolean') {
throw new $TypeError('Assertion failed: `isTypedArray` must be a boolean');
}
if (order !== 'SeqCst' && order !== 'Unordered' && order !== 'Init') {
throw new $TypeError('Assertion failed: `order` must be `"SeqCst"`, `"Unordered"`, or `"Init"`');
}

if (arguments.length > 6 && typeof arguments[6] !== 'boolean') {
throw new $TypeError('Assertion failed: `isLittleEndian` must be a boolean, if present');
}

Expand All @@ -73,38 +65,30 @@ module.exports = function SetValueInBuffer(arrayBuffer, byteIndex, type, value)

// 4. Assert: Type(value) is Number.

// 5. Let block be arrayBuffer’s [[ArrayBufferData]] internal slot.
// 5. Let block be arrayBuffer.[[ArrayBufferData]].

// 6. Assert: block is not undefined.
var elementSize = tableTAO.size['$' + type]; // step 6

var elementSize = tableTAO.size['$' + type]; // step 7
if (!elementSize) {
throw new $TypeError('Assertion failed: `type` must be one of "Int8", "Uint8", "Uint8C", "Int16", "Uint16", "Int32", "Uint32", "Float32", or "Float64"');
}
// 7. If isLittleEndian is not present, set isLittleEndian to to the value of the [[LittleEndian]] field of the surrounding agent's Agent Record.
var isLittleEndian = arguments.length > 6 ? arguments[6] : defaultEndianness === 'little'; // step 8

// 8. If isLittleEndian is not present, set isLittleEndian to either true or false. The choice is implementation dependent and should be the alternative that is most efficient for the implementation. An implementation must use the same value each time this step is executed and the same value must be used for the corresponding step in the GetValueFromBuffer abstract operation.
var isLittleEndian = arguments.length > 4 ? arguments[4] : defaultEndianness === 'little'; // step 8
var rawBytes = NumberToRawBytes(type, value, isLittleEndian); // step 8

var rawBytes;
if (type === 'Float32') { // step 1
rawBytes = valueToFloat32Bytes(value, isLittleEndian);
} else if (type === 'Float64') { // step 2
rawBytes = valueToFloat64Bytes(value, isLittleEndian);
if (isSAB) { // step 9
/*
Let execution be the [[CandidateExecution]] field of the surrounding agent's Agent Record.
Let eventList be the [[EventList]] field of the element in execution.[[EventsRecords]] whose [[AgentSignifier]] is AgentSignifier().
If isTypedArray is true and IsNoTearConfiguration(type, order) is true, let noTear be true; otherwise let noTear be false.
Append WriteSharedMemory { [[Order]]: order, [[NoTear]]: noTear, [[Block]]: block, [[ByteIndex]]: byteIndex, [[ElementSize]]: elementSize, [[Payload]]: rawBytes } to eventList.
*/
throw new $SyntaxError('SharedArrayBuffer is not supported by this implementation');
} else {
var n = elementSize; // step 3.a

var convOp = TypeToAO[type]; // step 3.b

var intValue = convOp(value); // step 3.c

rawBytes = integerToNBytes(intValue, n, isLittleEndian); // step 3.d, 3.e, 4
// 10. Store the individual bytes of rawBytes into block, in order, starting at block[byteIndex].
var arr = new $Uint8Array(arrayBuffer, byteIndex, elementSize);
forEach(rawBytes, function (rawByte, i) {
arr[i] = rawByte;
});
}

// 12. Store the individual bytes of rawBytes into block, in order, starting at block[byteIndex].
var arr = new $Uint8Array(arrayBuffer, byteIndex, elementSize);
forEach(rawBytes, function (rawByte, i) {
arr[i] = rawByte;
});

// 13. Return NormalCompletion(undefined).
// 11. Return NormalCompletion(undefined).
};
2 changes: 1 addition & 1 deletion 2017/TestIntegrityLevel.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 1 addition & 2 deletions 2017/TimeClip.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion 2017/ToNumber.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion 2017/tables/typed-array-objects.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use strict';

// https://262.ecma-international.org/8.0/#table-59
// https://262.ecma-international.org/8.0/#table-49

module.exports = {
__proto__: null,
Expand Down
4 changes: 4 additions & 0 deletions 2018/MonthFromTime.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion 2018/QuoteJSONString.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ module.exports = function QuoteJSONString(value) {
}
var product = '"';
if (value) {
forEach($strSplit(value), function (C) {
forEach($strSplit(value, ''), function (C) {
if (hasOwn(escapes, C)) {
product += escapes[C];
} else if ($charCodeAt(C, 0) < 0x20) {
Expand Down
Loading
Loading