lib: add primordials.SafeArrayIterator

PR-URL: https://github.com/nodejs/node/pull/36532
Backport-PR-URL: https://github.com/nodejs/node/pull/39446
Reviewed-By: Rich Trott <rtrott@gmail.com>
This commit is contained in:
Antoine du Hamel 2020-12-06 12:04:41 +01:00 committed by Richard Lau
parent 4efefe02a8
commit d8cc2fffd6
No known key found for this signature in database
GPG Key ID: C43CEC45C17AB93C
4 changed files with 16 additions and 7 deletions

View File

@ -438,7 +438,7 @@ function trySelf(parentPath, request) {
const EXPORTS_PATTERN = /^((?:@[^/\\%]+\/)?[^./\\%][^/\\%]*)(\/.*)?$/;
function resolveExports(nmPath, request) {
// The implementation's behavior is meant to mirror resolution in ESM.
const [, name, expansion = ''] =
const { 1: name, 2: expansion = '' } =
StringPrototypeMatch(request, EXPORTS_PATTERN) || [];
if (!name)
return;

View File

@ -12,6 +12,7 @@ const {
PromisePrototypeCatch,
ReflectApply,
RegExpPrototypeTest,
SafeArrayIterator,
SafeSet,
StringPrototypeIncludes,
StringPrototypeMatch,
@ -76,9 +77,9 @@ class ModuleJob {
});
if (promises !== undefined)
await PromiseAll(promises);
await PromiseAll(new SafeArrayIterator(promises));
return PromiseAll(dependencyJobs);
return PromiseAll(new SafeArrayIterator(dependencyJobs));
};
// Promise for the list of all dependencyJobs.
this.linked = link();
@ -106,8 +107,8 @@ class ModuleJob {
}
jobsInGraph.add(moduleJob);
const dependencyJobs = await moduleJob.linked;
return PromiseAll(
ArrayPrototypeMap(dependencyJobs, addJobsToDependencyGraph));
return PromiseAll(new SafeArrayIterator(
ArrayPrototypeMap(dependencyJobs, addJobsToDependencyGraph)));
};
await addJobsToDependencyGraph(this);

View File

@ -263,6 +263,9 @@ primordials.SafeWeakSet = makeSafe(
// Refs: https://tc39.es/ecma262/#sec-%typedarray%-intrinsic-object
[
{ name: 'TypedArray', original: Reflect.getPrototypeOf(Uint8Array) },
{ name: 'ArrayIterator', original: {
prototype: Reflect.getPrototypeOf(Array.prototype[Symbol.iterator]()),
} },
{ name: 'StringIterator', original: {
prototype: Reflect.getPrototypeOf(String.prototype[Symbol.iterator]()),
} },
@ -274,6 +277,10 @@ primordials.SafeWeakSet = makeSafe(
copyPrototype(original.prototype, primordials, `${name}Prototype`);
});
primordials.SafeArrayIterator = createSafeIterator(
primordials.ArrayPrototypeSymbolIterator,
primordials.ArrayIteratorPrototypeNext
);
primordials.SafeStringIterator = createSafeIterator(
primordials.StringPrototypeSymbolIterator,
primordials.StringIteratorPrototypeNext

View File

@ -6,6 +6,7 @@ const {
ObjectDefineProperty,
RegExp,
RegExpPrototypeTest,
SafeArrayIterator,
StringPrototypeToUpperCase
} = primordials;
@ -78,7 +79,7 @@ function debuglog(set, cb) {
debug = debuglogImpl(enabled, set);
if (typeof cb === 'function')
cb(debug);
debug(...args);
debug(...new SafeArrayIterator(args));
};
let enabled;
let test = () => {
@ -86,7 +87,7 @@ function debuglog(set, cb) {
test = () => enabled;
return enabled;
};
const logger = (...args) => debug(...args);
const logger = (...args) => debug(...new SafeArrayIterator(args));
ObjectDefineProperty(logger, 'enabled', {
get() {
return test();