Skip to content

Commit

Permalink
[Robustness] use cached copies of builtins
Browse files Browse the repository at this point in the history
  • Loading branch information
ljharb committed Mar 21, 2024
1 parent 1d24d63 commit 97b0786
Show file tree
Hide file tree
Showing 41 changed files with 199 additions and 59 deletions.
5 changes: 4 additions & 1 deletion 2015/SetValueInBuffer.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
'use strict';

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

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

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

Expand Down Expand Up @@ -98,7 +101,7 @@ module.exports = function SetValueInBuffer(arrayBuffer, byteIndex, type, value)
}

// 12. Store the individual bytes of rawBytes into block, in order, starting at block[byteIndex].
var arr = new Uint8Array(arrayBuffer, byteIndex, elementSize);
var arr = new $Uint8Array(arrayBuffer, byteIndex, elementSize);
forEach(rawBytes, function (rawByte, i) {
arr[i] = rawByte;
});
Expand Down
5 changes: 4 additions & 1 deletion 2016/SetValueInBuffer.js

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

5 changes: 4 additions & 1 deletion 2017/SetValueInBuffer.js

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

20 changes: 16 additions & 4 deletions 2018/CreateAsyncFromSyncIterator.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ var AsyncFromSyncIteratorContinuation = function AsyncFromSyncIteratorContinuati
throw new $SyntaxError('This environment does not support Promises.');
}

return new Promise(function (resolve) {
return new $Promise(function (resolve) {
var done = IteratorComplete(result); // step 2
var value = IteratorValue(result); // step 4
var valueWrapper = PromiseResolve($Promise, value); // step 6
Expand All @@ -53,13 +53,17 @@ var AsyncFromSyncIteratorContinuation = function AsyncFromSyncIteratorContinuati

var $AsyncFromSyncIteratorPrototype = GetIntrinsic('%AsyncFromSyncIteratorPrototype%', true) || {
next: function next(value) {
if (!$Promise) {
throw new $SyntaxError('This environment does not support Promises.');
}

var O = this; // step 1

SLOT.assert(O, '[[SyncIteratorRecord]]'); // step 2

var argsLength = arguments.length;

return new Promise(function (resolve) { // step 3
return new $Promise(function (resolve) { // step 3
var syncIteratorRecord = SLOT.get(O, '[[SyncIteratorRecord]]'); // step 4
var result;
if (argsLength > 0) {
Expand All @@ -71,14 +75,18 @@ var $AsyncFromSyncIteratorPrototype = GetIntrinsic('%AsyncFromSyncIteratorProtot
});
},
'return': function () {
if (!$Promise) {
throw new $SyntaxError('This environment does not support Promises.');
}

var O = this; // step 1

SLOT.assert(O, '[[SyncIteratorRecord]]'); // step 2

var valueIsPresent = arguments.length > 0;
var value = valueIsPresent ? arguments[0] : void undefined;

return new Promise(function (resolve, reject) { // step 3
return new $Promise(function (resolve, reject) { // step 3
var syncIterator = SLOT.get(O, '[[SyncIteratorRecord]]')['[[Iterator]]']; // step 4
var iteratorReturn = GetMethod(syncIterator, 'return'); // step 5

Expand All @@ -102,14 +110,18 @@ var $AsyncFromSyncIteratorPrototype = GetIntrinsic('%AsyncFromSyncIteratorProtot
});
},
'throw': function () {
if (!$Promise) {
throw new $SyntaxError('This environment does not support Promises.');
}

var O = this; // step 1

SLOT.assert(O, '[[SyncIteratorRecord]]'); // step 2

var valueIsPresent = arguments.length > 0;
var value = valueIsPresent ? arguments[0] : void undefined;

return new Promise(function (resolve, reject) { // step 3
return new $Promise(function (resolve, reject) { // step 3
var syncIterator = SLOT.get(O, '[[SyncIteratorRecord]]')['[[Iterator]]']; // step 4

var throwMethod = GetMethod(syncIterator, 'throw'); // step 5
Expand Down
3 changes: 2 additions & 1 deletion 2018/PromiseResolve.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

var GetIntrinsic = require('get-intrinsic');
var callBind = require('call-bind');
var $SyntaxError = require('es-errors/syntax');

var $resolve = GetIntrinsic('%Promise.resolve%', true);
var $PromiseResolve = $resolve && callBind($resolve);
Expand All @@ -10,7 +11,7 @@ var $PromiseResolve = $resolve && callBind($resolve);

module.exports = function PromiseResolve(C, x) {
if (!$PromiseResolve) {
throw new SyntaxError('This environment does not support Promises.');
throw new $SyntaxError('This environment does not support Promises.');
}
return $PromiseResolve(C, x);
};
Expand Down
5 changes: 4 additions & 1 deletion 2018/SetValueInBuffer.js

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

3 changes: 2 additions & 1 deletion 2018/thisSymbolValue.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
'use strict';

var $SyntaxError = require('es-errors/syntax');
var callBound = require('call-bind/callBound');

var $SymbolValueOf = callBound('Symbol.prototype.valueOf', true);
Expand All @@ -8,7 +9,7 @@ var $SymbolValueOf = callBound('Symbol.prototype.valueOf', true);

module.exports = function thisSymbolValue(value) {
if (!$SymbolValueOf) {
throw new SyntaxError('Symbols are not supported; thisSymbolValue requires that `value` be a Symbol or a Symbol object');
throw new $SyntaxError('Symbols are not supported; thisSymbolValue requires that `value` be a Symbol or a Symbol object');
}
if (typeof value === 'symbol') {
return value;
Expand Down
2 changes: 1 addition & 1 deletion 2019/AsyncFromSyncIteratorContinuation.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ module.exports = function AsyncFromSyncIteratorContinuation(result) {
throw new $SyntaxError('This environment does not support Promises.');
}

return new Promise(function (resolve) {
return new $Promise(function (resolve) {
var done = IteratorComplete(result); // step 2
var value = IteratorValue(result); // step 4
var valueWrapper = PromiseResolve($Promise, value); // step 6
Expand Down
20 changes: 17 additions & 3 deletions 2019/CreateAsyncFromSyncIterator.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

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

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

var AsyncFromSyncIteratorContinuation = require('./AsyncFromSyncIteratorContinuation');
var Call = require('./Call');
Expand All @@ -19,13 +21,17 @@ var SLOT = require('internal-slot');

var $AsyncFromSyncIteratorPrototype = GetIntrinsic('%AsyncFromSyncIteratorPrototype%', true) || {
next: function next(value) {
if (!$Promise) {
throw new $SyntaxError('This environment does not support Promises.');
}

var O = this; // step 1

SLOT.assert(O, '[[SyncIteratorRecord]]'); // step 2

var argsLength = arguments.length;

return new Promise(function (resolve) { // step 3
return new $Promise(function (resolve) { // step 3
var syncIteratorRecord = SLOT.get(O, '[[SyncIteratorRecord]]'); // step 4
var result;
if (argsLength > 0) {
Expand All @@ -37,14 +43,18 @@ var $AsyncFromSyncIteratorPrototype = GetIntrinsic('%AsyncFromSyncIteratorProtot
});
},
'return': function () {
if (!$Promise) {
throw new $SyntaxError('This environment does not support Promises.');
}

var O = this; // step 1

SLOT.assert(O, '[[SyncIteratorRecord]]'); // step 2

var valueIsPresent = arguments.length > 0;
var value = valueIsPresent ? arguments[0] : void undefined;

return new Promise(function (resolve, reject) { // step 3
return new $Promise(function (resolve, reject) { // step 3
var syncIterator = SLOT.get(O, '[[SyncIteratorRecord]]')['[[Iterator]]']; // step 4
var iteratorReturn = GetMethod(syncIterator, 'return'); // step 5

Expand All @@ -68,14 +78,18 @@ var $AsyncFromSyncIteratorPrototype = GetIntrinsic('%AsyncFromSyncIteratorProtot
});
},
'throw': function () {
if (!$Promise) {
throw new $SyntaxError('This environment does not support Promises.');
}

var O = this; // step 1

SLOT.assert(O, '[[SyncIteratorRecord]]'); // step 2

var valueIsPresent = arguments.length > 0;
var value = valueIsPresent ? arguments[0] : void undefined;

return new Promise(function (resolve, reject) { // step 3
return new $Promise(function (resolve, reject) { // step 3
var syncIterator = SLOT.get(O, '[[SyncIteratorRecord]]')['[[Iterator]]']; // step 4

var throwMethod = GetMethod(syncIterator, 'throw'); // step 5
Expand Down
3 changes: 2 additions & 1 deletion 2019/PromiseResolve.js

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

5 changes: 4 additions & 1 deletion 2019/SetValueInBuffer.js

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

3 changes: 2 additions & 1 deletion 2019/thisSymbolValue.js

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

2 changes: 1 addition & 1 deletion 2020/AsyncFromSyncIteratorContinuation.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ module.exports = function AsyncFromSyncIteratorContinuation(result) {
throw new $SyntaxError('This environment does not support Promises.');
}

return new Promise(function (resolve) {
return new $Promise(function (resolve) {
var done = IteratorComplete(result); // step 2
var value = IteratorValue(result); // step 4
var valueWrapper = PromiseResolve($Promise, value); // step 6
Expand Down
20 changes: 17 additions & 3 deletions 2020/CreateAsyncFromSyncIterator.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

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

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

var AsyncFromSyncIteratorContinuation = require('./AsyncFromSyncIteratorContinuation');
var Call = require('./Call');
Expand All @@ -19,13 +21,17 @@ var SLOT = require('internal-slot');

var $AsyncFromSyncIteratorPrototype = GetIntrinsic('%AsyncFromSyncIteratorPrototype%', true) || {
next: function next(value) {
if (!$Promise) {
throw new $SyntaxError('This environment does not support Promises.');
}

var O = this; // step 1

SLOT.assert(O, '[[SyncIteratorRecord]]'); // step 2

var argsLength = arguments.length;

return new Promise(function (resolve) { // step 3
return new $Promise(function (resolve) { // step 3
var syncIteratorRecord = SLOT.get(O, '[[SyncIteratorRecord]]'); // step 4
var result;
if (argsLength > 0) {
Expand All @@ -37,14 +43,18 @@ var $AsyncFromSyncIteratorPrototype = GetIntrinsic('%AsyncFromSyncIteratorProtot
});
},
'return': function () {
if (!$Promise) {
throw new $SyntaxError('This environment does not support Promises.');
}

var O = this; // step 1

SLOT.assert(O, '[[SyncIteratorRecord]]'); // step 2

var valueIsPresent = arguments.length > 0;
var value = valueIsPresent ? arguments[0] : void undefined;

return new Promise(function (resolve, reject) { // step 3
return new $Promise(function (resolve, reject) { // step 3
var syncIterator = SLOT.get(O, '[[SyncIteratorRecord]]')['[[Iterator]]']; // step 4
var iteratorReturn = GetMethod(syncIterator, 'return'); // step 5

Expand All @@ -68,14 +78,18 @@ var $AsyncFromSyncIteratorPrototype = GetIntrinsic('%AsyncFromSyncIteratorProtot
});
},
'throw': function () {
if (!$Promise) {
throw new $SyntaxError('This environment does not support Promises.');
}

var O = this; // step 1

SLOT.assert(O, '[[SyncIteratorRecord]]'); // step 2

var valueIsPresent = arguments.length > 0;
var value = valueIsPresent ? arguments[0] : void undefined;

return new Promise(function (resolve, reject) { // step 3
return new $Promise(function (resolve, reject) { // step 3
var syncIterator = SLOT.get(O, '[[SyncIteratorRecord]]')['[[Iterator]]']; // step 4

var throwMethod = GetMethod(syncIterator, 'throw'); // step 5
Expand Down
Loading

0 comments on commit 97b0786

Please sign in to comment.