summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKenta Moriuchi <moriken@kimamass.com>2023-05-01 22:30:02 +0900
committerGitHub <noreply@github.com>2023-05-01 15:30:02 +0200
commit6728ad4203d731e555dabf89ec6157f113454ce6 (patch)
tree956dc2d403b5a6ef107c35cab1ccc259ad4d86a1
parent94a148cdb6f7660518c75a3c20109bf64848f0f1 (diff)
fix(core): Use primordials for methods (#18839)
I would like to get this change into Deno before merging https://github.com/denoland/deno_lint/pull/1152
-rw-r--r--core/01_core.js2
-rw-r--r--ext/cache/01_cache.js11
-rw-r--r--ext/console/01_console.js421
-rw-r--r--ext/crypto/00_crypto.js22
-rw-r--r--ext/fetch/23_request.js7
-rw-r--r--ext/fs/30_fs.js9
-rw-r--r--ext/http/00_serve.js5
-rw-r--r--ext/http/01_http.js12
-rw-r--r--ext/net/01_net.js19
-rw-r--r--ext/url/00_url.js61
-rw-r--r--ext/url/01_urlpattern.js5
-rw-r--r--ext/web/06_streams.js28
-rw-r--r--ext/web/13_message_port.js2
-rw-r--r--ext/websocket/02_websocketstream.js7
-rw-r--r--runtime/js/11_workers.js8
-rw-r--r--runtime/js/30_os.js4
-rw-r--r--runtime/js/99_main.js17
17 files changed, 374 insertions, 266 deletions
diff --git a/core/01_core.js b/core/01_core.js
index 3972dec33..72cbe31f7 100644
--- a/core/01_core.js
+++ b/core/01_core.js
@@ -28,13 +28,13 @@
SafeArrayIterator,
SafeMap,
SafePromisePrototypeFinally,
- setQueueMicrotask,
StringPrototypeSlice,
StringPrototypeSplit,
SymbolFor,
SyntaxError,
TypeError,
URIError,
+ setQueueMicrotask,
} = window.__bootstrap.primordials;
const { ops, asyncOps } = window.Deno.core;
diff --git a/ext/cache/01_cache.js b/ext/cache/01_cache.js
index 8cbf540fa..9b5404acb 100644
--- a/ext/cache/01_cache.js
+++ b/ext/cache/01_cache.js
@@ -4,9 +4,12 @@ const core = globalThis.Deno.core;
import * as webidl from "ext:deno_webidl/00_webidl.js";
const primordials = globalThis.__bootstrap.primordials;
const {
+ ArrayPrototypePush,
+ ObjectPrototypeIsPrototypeOf,
+ StringPrototypeSplit,
+ StringPrototypeTrim,
Symbol,
TypeError,
- ObjectPrototypeIsPrototypeOf,
} = primordials;
import {
Request,
@@ -101,10 +104,10 @@ class Cache {
// Step 7.
const varyHeader = getHeader(innerResponse.headerList, "vary");
if (varyHeader) {
- const fieldValues = varyHeader.split(",");
+ const fieldValues = StringPrototypeSplit(varyHeader, ",");
for (let i = 0; i < fieldValues.length; ++i) {
const field = fieldValues[i];
- if (field.trim() === "*") {
+ if (StringPrototypeTrim(field) === "*") {
throw new TypeError("Vary header must not contain '*'");
}
}
@@ -258,7 +261,7 @@ class Cache {
statusText: meta.responseStatusText,
},
);
- responses.push(response);
+ ArrayPrototypePush(responses, response);
}
}
// Step 5.4-5.5: don't apply in this context.
diff --git a/ext/console/01_console.js b/ext/console/01_console.js
index 318cf9cb4..3b2f44917 100644
--- a/ext/console/01_console.js
+++ b/ext/console/01_console.js
@@ -6,118 +6,134 @@ const core = globalThis.Deno.core;
const internals = globalThis.__bootstrap.internals;
const primordials = globalThis.__bootstrap.primordials;
const {
- DateNow,
- Boolean,
- ObjectKeys,
- ObjectAssign,
- ObjectCreate,
- ObjectFreeze,
- ObjectValues,
- ObjectFromEntries,
- ObjectPrototypeHasOwnProperty,
- ObjectPrototypeIsPrototypeOf,
- ObjectDefineProperty,
- String,
- SafeStringIterator,
- DatePrototype,
- MapPrototypeEntries,
- SetPrototypeGetSize,
- StringPrototypeRepeat,
- StringPrototypeEndsWith,
- StringPrototypeIndexOf,
- RegExpPrototypeExec,
- RegExpPrototypeSymbolReplace,
- StringPrototypeReplace,
- StringPrototypeReplaceAll,
- ObjectPrototype,
- FunctionPrototypeCall,
- StringPrototypeSplit,
- StringPrototypeSlice,
- StringPrototypeCharCodeAt,
- MathFloor,
- StringPrototypePadEnd,
- ObjectGetOwnPropertySymbols,
- ObjectGetOwnPropertyNames,
- SymbolPrototypeGetDescription,
- SymbolPrototypeToString,
- ArrayPrototypePushApply,
- ObjectPrototypePropertyIsEnumerable,
- StringPrototypeMatch,
- StringPrototypePadStart,
- StringPrototypeTrim,
- StringPrototypeIncludes,
- NumberIsInteger,
- NumberParseInt,
- SafeArrayIterator,
- SafeMap,
- ArrayPrototypeShift,
AggregateErrorPrototype,
- RegExpPrototypeTest,
- ObjectPrototypeToString,
- ArrayPrototypeSort,
- ArrayPrototypeUnshift,
- DatePrototypeGetTime,
- DatePrototypeToISOString,
- SafeRegExp,
- SetPrototype,
- Symbol,
- SymbolToStringTag,
- SymbolHasInstance,
- SymbolFor,
- ObjectGetOwnPropertyDescriptor,
- ObjectIs,
- Uint8Array,
- isNaN,
- TypedArrayPrototypeGetSymbolToStringTag,
- TypedArrayPrototypeGetLength,
- ReflectOwnKeys,
Array,
- RegExpPrototypeToString,
- ArrayIsArray,
- SymbolIterator,
ArrayBufferIsView,
- ArrayPrototypeJoin,
- ArrayPrototypeMap,
- ArrayPrototypeReduce,
- ObjectSetPrototypeOf,
- ArrayPrototypePush,
- ArrayPrototypeIncludes,
+ ArrayBufferPrototypeGetByteLength,
+ ArrayIsArray,
ArrayPrototypeFill,
ArrayPrototypeFilter,
ArrayPrototypeFind,
+ ArrayPrototypeForEach,
+ ArrayPrototypeIncludes,
+ ArrayPrototypeJoin,
+ ArrayPrototypeMap,
+ ArrayPrototypePop,
+ ArrayPrototypePush,
+ ArrayPrototypePushApply,
+ ArrayPrototypeReduce,
+ ArrayPrototypeShift,
+ ArrayPrototypeSlice,
+ ArrayPrototypeSort,
+ ArrayPrototypeSplice,
+ ArrayPrototypeUnshift,
+ BigIntPrototypeValueOf,
+ Boolean,
+ BooleanPrototypeValueOf,
+ DateNow,
+ DatePrototype,
+ DatePrototypeGetTime,
+ DatePrototypeToISOString,
+ Error,
+ ErrorCaptureStackTrace,
+ ErrorPrototype,
FunctionPrototypeBind,
+ FunctionPrototypeCall,
+ FunctionPrototypeToString,
MapPrototype,
- MapPrototypeHas,
- MapPrototypeGet,
- MapPrototypeSet,
MapPrototypeDelete,
+ MapPrototypeEntries,
MapPrototypeForEach,
+ MapPrototypeGet,
MapPrototypeGetSize,
- Error,
- ErrorPrototype,
- ErrorCaptureStackTrace,
- MathSqrt,
+ MapPrototypeHas,
+ MapPrototypeSet,
MathAbs,
+ MathFloor,
MathMax,
MathMin,
MathRound,
+ MathSqrt,
Number,
+ NumberIsInteger,
+ NumberParseInt,
NumberPrototypeToString,
+ NumberPrototypeValueOf,
+ ObjectAssign,
+ ObjectCreate,
+ ObjectDefineProperty,
+ ObjectFreeze,
+ ObjectFromEntries,
+ ObjectGetOwnPropertyDescriptor,
+ ObjectGetOwnPropertyNames,
+ ObjectGetOwnPropertySymbols,
+ ObjectGetPrototypeOf,
+ ObjectIs,
+ ObjectKeys,
+ ObjectPrototype,
+ ObjectPrototypeHasOwnProperty,
+ ObjectPrototypeIsPrototypeOf,
+ ObjectPrototypePropertyIsEnumerable,
+ ObjectPrototypeToString,
+ ObjectSetPrototypeOf,
+ ObjectValues,
Proxy,
ReflectGet,
ReflectGetOwnPropertyDescriptor,
ReflectGetPrototypeOf,
ReflectHas,
- BigIntPrototypeValueOf,
- ObjectGetPrototypeOf,
- FunctionPrototypeToString,
- StringPrototypeStartsWith,
- SetPrototypeValues,
+ ReflectOwnKeys,
+ RegExpPrototypeExec,
+ RegExpPrototypeSymbolReplace,
+ RegExpPrototypeTest,
+ RegExpPrototypeToString,
+ SafeArrayIterator,
+ SafeMap,
+ SafeMapIterator,
+ SafeRegExp,
SafeSet,
SafeSetIterator,
+ SafeStringIterator,
+ SetPrototype,
+ SetPrototypeAdd,
+ SetPrototypeHas,
+ SetPrototypeGetSize,
+ SetPrototypeValues,
+ String,
+ StringPrototypeCharCodeAt,
+ StringPrototypeCodePointAt,
+ StringPrototypeEndsWith,
+ StringPrototypeIncludes,
+ StringPrototypeIndexOf,
+ StringPrototypeLastIndexOf,
+ StringPrototypeMatch,
+ StringPrototypeNormalize,
+ StringPrototypePadEnd,
+ StringPrototypePadStart,
+ StringPrototypeRepeat,
+ StringPrototypeReplace,
+ StringPrototypeReplaceAll,
+ StringPrototypeSlice,
+ StringPrototypeSplit,
+ StringPrototypeStartsWith,
+ StringPrototypeToLowerCase,
+ StringPrototypeTrim,
+ StringPrototypeValueOf,
+ Symbol,
+ SymbolFor,
+ SymbolHasInstance,
+ SymbolIterator,
+ SymbolPrototypeGetDescription,
+ SymbolPrototypeToString,
+ SymbolPrototypeValueOf,
+ SymbolToStringTag,
TypedArrayPrototypeGetByteLength,
- SafeMapIterator,
- ArrayBufferPrototype,
+ TypedArrayPrototypeGetLength,
+ TypedArrayPrototypeGetSymbolToStringTag,
+ Uint8Array,
+ WeakMapPrototypeHas,
+ WeakSetPrototypeHas,
+ isNaN,
} = primordials;
let noColor = false;
@@ -227,45 +243,9 @@ defineColorAlias("inverse", "swapColors");
defineColorAlias("inverse", "swapcolors");
defineColorAlias("doubleunderline", "doubleUnderline");
-// https://tc39.es/ecma262/#sec-boolean.prototype.valueof
-const _booleanValueOf = Boolean.prototype.valueOf;
-
-// https://tc39.es/ecma262/#sec-number.prototype.valueof
-const _numberValueOf = Number.prototype.valueOf;
-
-// https://tc39.es/ecma262/#sec-string.prototype.valueof
-const _stringValueOf = String.prototype.valueOf;
-
-// https://tc39.es/ecma262/#sec-symbol.prototype.valueof
-const _symbolValueOf = Symbol.prototype.valueOf;
-
-// https://tc39.es/ecma262/#sec-weakmap.prototype.has
-const _weakMapHas = WeakMap.prototype.has;
-
-// https://tc39.es/ecma262/#sec-weakset.prototype.has
-const _weakSetHas = WeakSet.prototype.has;
-
-// https://tc39.es/ecma262/#sec-get-arraybuffer.prototype.bytelength
-const _getArrayBufferByteLength = ObjectGetOwnPropertyDescriptor(
- ArrayBufferPrototype,
- "byteLength",
-).get;
-
// https://tc39.es/ecma262/#sec-get-sharedarraybuffer.prototype.bytelength
let _getSharedArrayBufferByteLength;
-// https://tc39.es/ecma262/#sec-get-set.prototype.size
-const _getSetSize = ObjectGetOwnPropertyDescriptor(
- SetPrototype,
- "size",
-).get;
-
-// https://tc39.es/ecma262/#sec-get-map.prototype.size
-const _getMapSize = ObjectGetOwnPropertyDescriptor(
- MapPrototype,
- "size",
-).get;
-
function isObjectLike(value) {
return value !== null && typeof value === "object";
}
@@ -284,7 +264,7 @@ export function isArgumentsObject(value) {
export function isArrayBuffer(value) {
try {
- _getArrayBufferByteLength.call(value);
+ ArrayBufferPrototypeGetByteLength(value);
return true;
} catch {
return false;
@@ -311,7 +291,7 @@ export function isBooleanObject(value) {
}
try {
- _booleanValueOf.call(value);
+ BooleanPrototypeValueOf(value);
return true;
} catch {
return false;
@@ -352,7 +332,7 @@ export function isGeneratorFunction(
export function isMap(value) {
try {
- _getMapSize.call(value);
+ MapPrototypeGetSize(value);
return true;
} catch {
return false;
@@ -391,7 +371,7 @@ export function isNumberObject(value) {
}
try {
- _numberValueOf.call(value);
+ NumberPrototypeValueOf(value);
return true;
} catch {
return false;
@@ -427,7 +407,7 @@ export function isRegExp(value) {
export function isSet(value) {
try {
- _getSetSize.call(value);
+ SetPrototypeGetSize(value);
return true;
} catch {
return false;
@@ -454,7 +434,7 @@ export function isSharedArrayBuffer(
).get;
try {
- _getSharedArrayBufferByteLength.call(value);
+ FunctionPrototypeCall(_getSharedArrayBufferByteLength, value);
return true;
} catch {
return false;
@@ -467,7 +447,7 @@ export function isStringObject(value) {
}
try {
- _stringValueOf.call(value);
+ StringPrototypeValueOf(value);
return true;
} catch {
return false;
@@ -480,7 +460,7 @@ export function isSymbolObject(value) {
}
try {
- _symbolValueOf.call(value);
+ SymbolPrototypeValueOf(value);
return true;
} catch {
return false;
@@ -491,7 +471,7 @@ export function isWeakMap(
value,
) {
try {
- _weakMapHas.call(value, null);
+ WeakMapPrototypeHas(value, null);
return true;
} catch {
return false;
@@ -502,7 +482,7 @@ export function isWeakSet(
value,
) {
try {
- _weakSetHas.call(value, null);
+ WeakSetPrototypeHas(value, null);
return true;
} catch {
return false;
@@ -552,7 +532,7 @@ const keyStrRegExp = new SafeRegExp("^[a-zA-Z_][a-zA-Z_0-9]*$");
const numberRegExp = new SafeRegExp("^(0|[1-9][0-9]*)$");
// TODO(wafuwafu13): Figure out
-const escapeFn = (str) => meta[str.charCodeAt(0)];
+const escapeFn = (str) => meta[StringPrototypeCharCodeAt(str, 0)];
function stylizeNoColor(str) {
return str;
@@ -711,16 +691,16 @@ function formatValue(
// Using an array here is actually better for the average case than using
// a Set. `seen` will only check for the depth and will never grow too large.
- if (ctx.seen.includes(value)) {
+ if (ArrayPrototypeIncludes(ctx.seen, value)) {
let index = 1;
if (ctx.circular === undefined) {
ctx.circular = new SafeMap();
- ctx.circular.set(value, index);
+ MapPrototypeSet(ctx.circular, value, index);
} else {
index = ctx.circular.get(value);
if (index === undefined) {
index = ctx.circular.size + 1;
- ctx.circular.set(value, index);
+ MapPrototypeSet(ctx.circular, value, index);
}
}
return ctx.stylize(`[Circular *${index}]`, "special");
@@ -1006,7 +986,7 @@ function formatRaw(ctx, value, recurseTimes, typedArray, proxyDetails) {
} else if (isModuleNamespaceObject(value)) {
braces[0] = `${getPrefix(constructor, tag, "Module")}{`;
// Special handle keys for namespace objects.
- formatter = formatNamespaceObject.bind(null, keys);
+ formatter = FunctionPrototypeBind(formatNamespaceObject, null, keys);
} else if (isBoxedPrimitive(value)) {
base = getBoxedBase(value, ctx, keys, constructor, tag);
if (keys.length === 0 && protoProps === undefined) {
@@ -1039,7 +1019,7 @@ function formatRaw(ctx, value, recurseTimes, typedArray, proxyDetails) {
}
recurseTimes += 1;
- ctx.seen.push(value);
+ ArrayPrototypePush(ctx.seen, value);
ctx.currentDepth = recurseTimes;
let output;
const indentationLvl = ctx.indentationLvl;
@@ -1075,15 +1055,19 @@ function formatRaw(ctx, value, recurseTimes, typedArray, proxyDetails) {
}
}
}
- ctx.seen.pop();
+ ArrayPrototypePop(ctx.seen);
if (ctx.sorted) {
const comparator = ctx.sorted === true ? undefined : ctx.sorted;
if (extrasType === kObjectType) {
output = ArrayPrototypeSort(output, comparator);
} else if (keys.length > 1) {
- const sorted = output.slice(output.length - keys.length).sort(comparator);
- output.splice(
+ const sorted = ArrayPrototypeSort(
+ ArrayPrototypeSlice(output, output.length - keys.length),
+ comparator,
+ );
+ ArrayPrototypeSplice(
+ output,
output.length - keys.length,
keys.length,
...new SafeArrayIterator(sorted),
@@ -1118,8 +1102,9 @@ function formatRaw(ctx, value, recurseTimes, typedArray, proxyDetails) {
const builtInObjectsRegExp = new SafeRegExp("^[A-Z][a-zA-Z0-9]+$");
const builtInObjects = new SafeSet(
- ObjectGetOwnPropertyNames(globalThis).filter((e) =>
- builtInObjectsRegExp.test(e)
+ ArrayPrototypeFilter(
+ ObjectGetOwnPropertyNames(globalThis),
+ (e) => RegExpPrototypeTest(builtInObjectsRegExp, e),
),
);
@@ -1145,7 +1130,7 @@ function addPrototypeProperties(
if (
descriptor !== undefined &&
typeof descriptor.value === "function" &&
- builtInObjects.has(descriptor.value.name)
+ SetPrototypeHas(builtInObjects, descriptor.value.name)
) {
return;
}
@@ -1154,18 +1139,17 @@ function addPrototypeProperties(
if (depth === 0) {
keySet = new SafeSet();
} else {
- Array.prototype.forEach.call(keys, (key) => keySet.add(key));
+ ArrayPrototypeForEach(keys, (key) => SetPrototypeAdd(keySet, key));
}
// Get all own property names and symbols.
keys = ReflectOwnKeys(obj);
- Array.prototype.push.call(ctx.seen, main);
+ ArrayPrototypePush(ctx.seen, main);
for (const key of new SafeArrayIterator(keys)) {
// Ignore the `constructor` property and keys that exist on layers above.
if (
key === "constructor" ||
- // deno-lint-ignore no-prototype-builtins
- main.hasOwnProperty(key) ||
- (depth !== 0 && keySet.has(key))
+ ObjectPrototypeHasOwnProperty(main, key) ||
+ (depth !== 0 && SetPrototypeHas(keySet, key))
) {
continue;
}
@@ -1184,12 +1168,12 @@ function addPrototypeProperties(
);
if (ctx.colors) {
// Faint!
- Array.prototype.push.call(output, `\u001b[2m${value}\u001b[22m`);
+ ArrayPrototypePush(output, `\u001b[2m${value}\u001b[22m`);
} else {
- Array.prototype.push.call(output, value);
+ ArrayPrototypePush(output, value);
}
}
- Array.prototype.pop.call(ctx.seen);
+ ArrayPrototypePop(ctx.seen);
// Limit the inspection to up to three prototype layers. Using `recurseTimes`
// is not a good choice here, because it's as if the properties are declared
// on the current object from the users perspective.
@@ -1218,7 +1202,7 @@ function getConstructorName(obj, ctx, recurseTimes, protoProps) {
if (
protoProps !== undefined &&
(firstProto !== obj ||
- !builtInObjects.has(descriptor.value.name))
+ !SetPrototypeHas(builtInObjects, descriptor.value.name))
) {
addPrototypeProperties(
ctx,
@@ -1273,7 +1257,7 @@ function formatPrimitive(fn, value, ctx) {
let trailer = "";
if (value.length > ctx.maxStringLength) {
const remaining = value.length - ctx.maxStringLength;
- value = value.slice(0, ctx.maxStringLength);
+ value = StringPrototypeSlice(value, 0, ctx.maxStringLength);
trailer = `... ${remaining} more character${remaining > 1 ? "s" : ""}`;
}
if (
@@ -1283,10 +1267,13 @@ function formatPrimitive(fn, value, ctx) {
value.length > kMinLineLength &&
value.length > ctx.breakLength - ctx.indentationLvl - 4
) {
- return value
- .split(formatPrimitiveRegExp)
- .map((line) => fn(quoteString(line, ctx), "string"))
- .join(` +\n${" ".repeat(ctx.indentationLvl + 2)}`) + trailer;
+ return ArrayPrototypeJoin(
+ ArrayPrototypeMap(
+ StringPrototypeSplit(value, formatPrimitiveRegExp),
+ (line) => fn(quoteString(line, ctx), "string"),
+ ),
+ ` +\n${StringPrototypeRepeat(" ", ctx.indentationLvl + 2)}`,
+ ) + trailer;
}
return fn(quoteString(value, ctx), "string") + trailer;
}
@@ -1328,14 +1315,19 @@ function formatArray(ctx, value, recurseTimes) {
const output = [];
for (let i = 0; i < len; i++) {
// Special handle sparse arrays.
- // deno-lint-ignore no-prototype-builtins
- if (!value.hasOwnProperty(i)) {
+ if (!ObjectPrototypeHasOwnProperty(value, i)) {
return formatSpecialArray(ctx, value, recurseTimes, len, output, i);
}
- output.push(formatProperty(ctx, value, recurseTimes, i, kArrayType));
+ ArrayPrototypePush(
+ output,
+ formatProperty(ctx, value, recurseTimes, i, kArrayType),
+ );
}
if (remaining > 0) {
- output.push(`... ${remaining} more item${remaining > 1 ? "s" : ""}`);
+ ArrayPrototypePush(
+ output,
+ `... ${remaining} more item${remaining > 1 ? "s" : ""}`,
+ );
}
return output;
}
@@ -1393,10 +1385,13 @@ function formatSet(value, ctx, _ignored, recurseTimes) {
const remaining = valLen - len;
const output = [];
for (let i = 0; i < len; i++) {
- output.push(formatValue(ctx, values[i], recurseTimes));
+ ArrayPrototypePush(output, formatValue(ctx, values[i], recurseTimes));
}
if (remaining > 0) {
- output.push(`... ${remaining} more item${remaining > 1 ? "s" : ""}`);
+ ArrayPrototypePush(
+ output,
+ `... ${remaining} more item${remaining > 1 ? "s" : ""}`,
+ );
}
ctx.indentationLvl -= 2;
@@ -1413,14 +1408,18 @@ function formatMap(value, ctx, _gnored, recurseTimes) {
const remaining = valLen - len;
const output = [];
for (let i = 0; i < len; i++) {
- output.push(
+ ArrayPrototypePush(
+ output,
`${formatValue(ctx, values[i][0], recurseTimes)} => ${
formatValue(ctx, values[i][1], recurseTimes)
}`,
);
}
if (remaining > 0) {
- output.push(`... ${remaining} more item${remaining > 1 ? "s" : ""}`);
+ ArrayPrototypePush(
+ output,
+ `... ${remaining} more item${remaining > 1 ? "s" : ""}`,
+ );
}
ctx.indentationLvl -= 2;
@@ -1460,7 +1459,7 @@ function formatTypedArray(
])
) {
const str = formatValue(ctx, value[key], recurseTimes, true);
- Array.prototype.push.call(output, `[${key}]: ${str}`);
+ ArrayPrototypePush(output, `[${key}]: ${str}`);
}
ctx.indentationLvl -= 2;
}
@@ -1484,7 +1483,11 @@ function formatIterator(braces, ctx, value, recurseTimes) {
const { 0: entries, 1: isKeyValue } = value;
if (isKeyValue) {
// Mark entry iterators as such.
- braces[0] = braces[0].replace(iteratorRegExp, " Entries] {");
+ braces[0] = StringPrototypeReplace(
+ braces[0],
+ iteratorRegExp,
+ " Entries] {",
+ );
return formatMapIterInner(ctx, recurseTimes, entries, kMapEntries);
}
@@ -1627,8 +1630,13 @@ function formatArrayBuffer(ctx, value) {
} catch {
return [ctx.stylize("(detached)", "special")];
}
- let str = hexSlice(buffer, 0, MathMin(ctx.maxArrayLength, buffer.length))
- .replace(arrayBufferRegExp, "$1 ").trim();
+ let str = StringPrototypeTrim(
+ StringPrototypeReplace(
+ hexSlice(buffer, 0, MathMin(ctx.maxArrayLength, buffer.length)),
+ arrayBufferRegExp,
+ "$1 ",
+ ),
+ );
const remaining = buffer.length - ctx.maxArrayLength;
if (remaining > 0) {
@@ -1703,7 +1711,7 @@ function formatProperty(
ctx.indentationLvl += diff;
str = formatValue(ctx, desc.value, recurseTimes);
if (diff === 3 && ctx.breakLength < getStringWidth(str, ctx.colors)) {
- extra = `\n${" ".repeat(ctx.indentationLvl)}`;
+ extra = `\n${StringPrototypeRepeat(" ", ctx.indentationLvl)}`;
}
ctx.indentationLvl -= diff;
} else if (desc.get !== undefined) {
@@ -1716,7 +1724,7 @@ function formatProperty(
(ctx.getters === "set" && desc.set !== undefined))
) {
try {
- const tmp = desc.get.call(original);
+ const tmp = FunctionPrototypeCall(desc.get, original);
ctx.indentationLvl += 2;
if (tmp === null) {
str = `${s(`[${label}:`, sp)} ${s("null", "null")}${s("]", sp)}`;
@@ -1747,7 +1755,11 @@ function formatProperty(
} else if (key === "__proto__") {
name = "['__proto__']";
} else if (desc.enumerable === false) {
- const tmp = key.replace(strEscapeSequencesReplacer, escapeFn);
+ const tmp = StringPrototypeReplace(
+ key,
+ strEscapeSequencesReplacer,
+ escapeFn,
+ );
name = `[${tmp}]`;
} else if (keyStrRegExp.test(key)) {
@@ -1780,7 +1792,7 @@ function handleMaxCallStackSize(
const colorRegExp = new SafeRegExp("\u001b\\[\\d\\d?m", "g");
function removeColors(str) {
- return str.replace(colorRegExp, "");
+ return StringPrototypeReplace(str, colorRegExp, "");
}
function isBelowBreakLength(ctx, output, start, base) {
@@ -1836,10 +1848,10 @@ function formatNamespaceObject(
// this aligned, even though this is a hacky way of dealing with this.
const tmp = { [keys[i]]: "" };
output[i] = formatProperty(ctx, tmp, recurseTimes, keys[i], kObjectType);
- const pos = output[i].lastIndexOf(" ");
+ const pos = StringPrototypeLastIndexOf(output[i], " ");
// We have to find the last whitespace and have to replace that value as
// it will be visualized as a regular string.
- output[i] = output[i].slice(0, pos + 1) +
+ output[i] = StringPrototypeSlice(output[i], 0, pos + 1) +
ctx.stylize("<uninitialized>", "special");
}
}
@@ -1873,13 +1885,16 @@ function formatSpecialArray(
const emptyItems = tmp - index;
const ending = emptyItems > 1 ? "s" : "";
const message = `<${emptyItems} empty item${ending}>`;
- output.push(ctx.stylize(message, "undefined"));
+ ArrayPrototypePush(output, ctx.stylize(message, "undefined"));
index = tmp;
if (output.length === maxLength) {
break;
}
}
- output.push(formatProperty(ctx, value, recurseTimes, key, kArrayType));
+ ArrayPrototypePush(
+ output,
+ formatProperty(ctx, value, recurseTimes, key, kArrayType),
+ );
index++;
}
const remaining = value.length - index;
@@ -1887,10 +1902,13 @@ function formatSpecialArray(
if (remaining > 0) {
const ending = remaining > 1 ? "s" : "";
const message = `<${remaining} empty item${ending}>`;
- output.push(ctx.stylize(message, "undefined"));
+ ArrayPrototypePush(output, ctx.stylize(message, "undefined"));
}
} else if (remaining > 0) {
- output.push(`... ${remaining} more item${remaining > 1 ? "s" : ""}`);
+ ArrayPrototypePush(
+ output,
+ `... ${remaining} more item${remaining > 1 ? "s" : ""}`,
+ );
}
return output;
}
@@ -1902,22 +1920,28 @@ function getBoxedBase(
constructor,
tag,
) {
- let type;
+ let type, primitive;
if (isNumberObject(value)) {
type = "Number";
+ primitive = NumberPrototypeValueOf(value);
} else if (isStringObject(value)) {
type = "String";
+ primitive = StringPrototypeValueOf(value);
// For boxed Strings, we have to remove the 0-n indexed entries,
// since they just noisy up the output and are redundant
// Make boxed primitive Strings look like such
- keys.splice(0, value.length);
+ ArrayPrototypeSplice(keys, 0, value.length);
} else if (isBooleanObject(value)) {
type = "Boolean";
+ primitive = BooleanPrototypeValueOf(value);
} else if (isBigIntObject(value)) {
type = "BigInt";
+ primitive = BigIntPrototypeValueOf(value);
} else {
type = "Symbol";
+ primitive = SymbolPrototypeValueOf(value);
}
+
let base = `[${type}`;
if (type !== constructor) {
if (constructor === null) {
@@ -1926,15 +1950,14 @@ function getBoxedBase(
base += ` (${constructor})`;
}
}
-
- base += `: ${formatPrimitive(stylizeNoColor, value.valueOf(), ctx)}]`;
+ base += `: ${formatPrimitive(stylizeNoColor, primitive, ctx)}]`;
if (tag !== "" && tag !== constructor) {
base += ` [${tag}]`;
}
if (keys.length !== 0 || ctx.stylize === stylizeNoColor) {
return base;
}
- return ctx.stylize(base, type.toLowerCase());
+ return ctx.stylize(base, StringPrototypeToLowerCase(type));
}
function reduceToSingleString(
@@ -2140,7 +2163,7 @@ function formatMapIterInner(
const len = entries.length / 2;
const remaining = len - maxArrayLength;
const maxLength = MathMin(maxArrayLength, len);
- let output = new Array(maxLength);
+ const output = new Array(maxLength);
let i = 0;
ctx.indentationLvl += 2;
if (state === kWeak) {
@@ -2154,7 +2177,7 @@ function formatMapIterInner(
// retrieved ones exist, we can not reliably return the same output) if the
// output is not sorted anyway.
if (!ctx.sorted) {
- output = output.sort();
+ ArrayPrototypeSort(output);
}
} else {
for (; i < maxLength; i++) {
@@ -2175,7 +2198,10 @@ function formatMapIterInner(
}
ctx.indentationLvl -= 2;
if (remaining > 0) {
- output.push(`... ${remaining} more item${remaining > 1 ? "s" : ""}`);
+ ArrayPrototypePush(
+ output,
+ `... ${remaining} more item${remaining > 1 ? "s" : ""}`,
+ );
}
return output;
}
@@ -2198,11 +2224,11 @@ function formatSetIterInner(
// Sort all entries to have a halfway reliable output (if more entries than
// retrieved ones exist, we can not reliably return the same output) if the
// output is not sorted anyway.
- output.sort();
+ ArrayPrototypeSort(output);
}
const remaining = entries.length - maxLength;
if (remaining > 0) {
- Array.prototype.push.call(
+ ArrayPrototypePush(
output,
`... ${remaining} more item${remaining > 1 ? "s" : ""}`,
);
@@ -2229,9 +2255,9 @@ export function getStringWidth(str, removeControlChars = true) {
if (removeControlChars) {
str = stripVTControlCharacters(str);
}
- str = str.normalize("NFC");
+ str = StringPrototypeNormalize(str, "NFC");
for (const char of new SafeStringIterator(str)) {
- const code = char.codePointAt(0);
+ const code = StringPrototypeCodePointAt(char, 0);
if (isFullWidthCodePoint(code)) {
width += 2;
} else if (!isZeroWidthCodePoint(code)) {
@@ -2258,7 +2284,7 @@ const isZeroWidthCodePoint = (code) => {
* Remove all VT control characters. Use to estimate displayed string width.
*/
export function stripVTControlCharacters(str) {
- return str.replace(ansi, "");
+ return StringPrototypeReplace(str, ansi, "");
}
function hasOwnProperty(obj, v) {
@@ -2353,7 +2379,10 @@ function cliTable(head, columns) {
(n, a) => MathMax(n, a.length),
0,
);
- const columnRightAlign = new Array(columnWidths.length).fill(true);
+ const columnRightAlign = ArrayPrototypeFill(
+ new Array(columnWidths.length),
+ true,
+ );
for (let i = 0; i < head.length; i++) {
const column = columns[i];
@@ -3349,7 +3378,7 @@ class Console {
const values = [];
let hasPrimitives = false;
- keys.forEach((k, idx) => {
+ ArrayPrototypeForEach(keys, (k, idx) => {
const value = resultData[k];
const primitive = value === null ||
(typeof value !== "function" && typeof value !== "object");
diff --git a/ext/crypto/00_crypto.js b/ext/crypto/00_crypto.js
index 2208124f6..5be2e0c1c 100644
--- a/ext/crypto/00_crypto.js
+++ b/ext/crypto/00_crypto.js
@@ -12,11 +12,12 @@ const primordials = globalThis.__bootstrap.primordials;
import * as webidl from "ext:deno_webidl/00_webidl.js";
import DOMException from "ext:deno_web/01_dom_exception.js";
const {
+ ArrayBufferIsView,
ArrayBufferPrototype,
- ArrayBufferPrototypeSlice,
ArrayBufferPrototypeGetByteLength,
- ArrayBufferIsView,
+ ArrayBufferPrototypeSlice,
ArrayPrototypeEvery,
+ ArrayPrototypeFilter,
ArrayPrototypeFind,
ArrayPrototypeIncludes,
DataViewPrototypeGetBuffer,
@@ -28,21 +29,21 @@ const {
ObjectAssign,
ObjectPrototypeHasOwnProperty,
ObjectPrototypeIsPrototypeOf,
- StringPrototypeToLowerCase,
- StringPrototypeToUpperCase,
- StringPrototypeCharCodeAt,
- StringFromCharCode,
SafeArrayIterator,
SafeWeakMap,
+ StringFromCharCode,
+ StringPrototypeCharCodeAt,
+ StringPrototypeToLowerCase,
+ StringPrototypeToUpperCase,
Symbol,
SymbolFor,
SyntaxError,
- TypedArrayPrototypeSlice,
+ TypeError,
TypedArrayPrototypeGetBuffer,
TypedArrayPrototypeGetByteLength,
TypedArrayPrototypeGetByteOffset,
TypedArrayPrototypeGetSymbolToStringTag,
- TypeError,
+ TypedArrayPrototypeSlice,
Uint8Array,
WeakMapPrototypeGet,
WeakMapPrototypeSet,
@@ -388,7 +389,10 @@ function constructKey(type, extractable, usages, algorithm, handle) {
* @returns
*/
function usageIntersection(a, b) {
- return a.filter((i) => b.includes(i));
+ return ArrayPrototypeFilter(
+ a,
+ (i) => ArrayPrototypeIncludes(b, i),
+ );
}
// TODO(lucacasonato): this should be moved to rust
diff --git a/ext/fetch/23_request.js b/ext/fetch/23_request.js
index d3132dc62..4c46ebe75 100644
--- a/ext/fetch/23_request.js
+++ b/ext/fetch/23_request.js
@@ -37,6 +37,7 @@ const {
ObjectKeys,
ObjectPrototypeIsPrototypeOf,
RegExpPrototypeTest,
+ StringPrototypeStartsWith,
Symbol,
SymbolFor,
TypeError,
@@ -90,7 +91,11 @@ function processUrlList(urlList, urlListProcessed) {
*/
function newInnerRequest(method, url, headerList, body, maybeBlob) {
let blobUrlEntry = null;
- if (maybeBlob && typeof url === "string" && url.startsWith("blob:")) {
+ if (
+ maybeBlob &&
+ typeof url === "string" &&
+ StringPrototypeStartsWith(url, "blob:")
+ ) {
blobUrlEntry = blobFromObjectUrl(url);
}
return {
diff --git a/ext/fs/30_fs.js b/ext/fs/30_fs.js
index bddafb09e..8766d32ff 100644
--- a/ext/fs/30_fs.js
+++ b/ext/fs/30_fs.js
@@ -7,12 +7,15 @@ const {
ArrayPrototypeFilter,
Date,
DatePrototype,
+ DatePrototypeGetTime,
Error,
Function,
MathTrunc,
ObjectEntries,
ObjectPrototypeIsPrototypeOf,
ObjectValues,
+ StringPrototypeSlice,
+ StringPrototypeStartsWith,
SymbolAsyncIterator,
SymbolIterator,
Uint32Array,
@@ -232,8 +235,8 @@ function createByteStruct(types) {
for (let i = 0; i < typeEntries.length; ++i) {
let { 0: name, 1: type } = typeEntries[i];
- const optional = type.startsWith("?");
- if (optional) type = type.slice(1);
+ const optional = StringPrototypeStartsWith(type, "?");
+ if (optional) type = StringPrototypeSlice(type, 1);
if (type == "u64") {
if (!optional) {
@@ -369,7 +372,7 @@ async function link(oldpath, newpath) {
function toUnixTimeFromEpoch(value) {
if (ObjectPrototypeIsPrototypeOf(DatePrototype, value)) {
- const time = value.valueOf();
+ const time = DatePrototypeGetTime(value);
const seconds = MathTrunc(time / 1e3);
const nanoseconds = MathTrunc(time - (seconds * 1e3)) * 1e6;
diff --git a/ext/http/00_serve.js b/ext/http/00_serve.js
index 33742e122..6aed08bdd 100644
--- a/ext/http/00_serve.js
+++ b/ext/http/00_serve.js
@@ -37,14 +37,15 @@ import {
import { TcpConn } from "ext:deno_net/01_net.js";
const {
ObjectPrototypeIsPrototypeOf,
+ PromisePrototypeCatch,
SafeSet,
SafeSetIterator,
SetPrototypeAdd,
SetPrototypeDelete,
Symbol,
TypeError,
- Uint8ArrayPrototype,
Uint8Array,
+ Uint8ArrayPrototype,
} = primordials;
const {
@@ -667,7 +668,7 @@ async function serve(arg1, arg2) {
if (req === 0xffffffff) {
break;
}
- callback(req).catch((error) => {
+ PromisePrototypeCatch(callback(req), (error) => {
// Abnormal exit
console.error(
"Terminating Deno.serve loop due to unexpected error",
diff --git a/ext/http/01_http.js b/ext/http/01_http.js
index 0048eedeb..f41a2beed 100644
--- a/ext/http/01_http.js
+++ b/ext/http/01_http.js
@@ -54,8 +54,9 @@ const {
SetPrototypeDelete,
StringPrototypeCharCodeAt,
StringPrototypeIncludes,
- StringPrototypeToLowerCase,
StringPrototypeSplit,
+ StringPrototypeToLowerCase,
+ StringPrototypeToUpperCase,
Symbol,
SymbolAsyncIterator,
TypeError,
@@ -497,17 +498,20 @@ function buildCaseInsensitiveCommaValueFinder(checkText) {
StringPrototypeToLowerCase(checkText),
"",
),
- (c) => [c.charCodeAt(0), c.toUpperCase().charCodeAt(0)],
+ (c) => [
+ StringPrototypeCharCodeAt(c, 0),
+ StringPrototypeCharCodeAt(StringPrototypeToUpperCase(c), 0),
+ ],
);
/** @type {number} */
let i;
/** @type {number} */
let char;
- /** @param value {string} */
+ /** @param {string} value */
return function (value) {
for (i = 0; i < value.length; i++) {
- char = value.charCodeAt(i);
+ char = StringPrototypeCharCodeAt(value, i);
skipWhitespace(value);
if (hasWord(value)) {
diff --git a/ext/net/01_net.js b/ext/net/01_net.js
index 81e13f094..e8ce3a300 100644
--- a/ext/net/01_net.js
+++ b/ext/net/01_net.js
@@ -11,13 +11,16 @@ import {
import * as abortSignal from "ext:deno_web/03_abort_signal.js";
const primordials = globalThis.__bootstrap.primordials;
const {
+ ArrayPrototypeFilter,
+ ArrayPrototypeForEach,
+ ArrayPrototypePush,
Error,
ObjectPrototypeIsPrototypeOf,
PromiseResolve,
SymbolAsyncIterator,
SymbolFor,
- TypedArrayPrototypeSubarray,
TypeError,
+ TypedArrayPrototypeSubarray,
Uint8Array,
} = primordials;
@@ -97,15 +100,16 @@ class Conn {
const promise = core.read(this.rid, buffer);
const promiseId = promise[promiseIdSymbol];
if (this.#unref) core.unrefOp(promiseId);
- this.#pendingReadPromiseIds.push(promiseId);
+ ArrayPrototypePush(this.#pendingReadPromiseIds, promiseId);
let nread;
try {
nread = await promise;
} catch (e) {
throw e;
} finally {
- this.#pendingReadPromiseIds = this.#pendingReadPromiseIds.filter((id) =>
- id !== promiseId
+ this.#pendingReadPromiseIds = ArrayPrototypeFilter(
+ this.#pendingReadPromiseIds,
+ (id) => id !== promiseId,
);
}
return nread === 0 ? null : nread;
@@ -141,7 +145,7 @@ class Conn {
if (this.#readable) {
readableStreamForRidUnrefableRef(this.#readable);
}
- this.#pendingReadPromiseIds.forEach((id) => core.refOp(id));
+ ArrayPrototypeForEach(this.#pendingReadPromiseIds, (id) => core.refOp(id));
}
unref() {
@@ -149,7 +153,10 @@ class Conn {
if (this.#readable) {
readableStreamForRidUnrefableUnref(this.#readable);
}
- this.#pendingReadPromiseIds.forEach((id) => core.unrefOp(id));
+ ArrayPrototypeForEach(
+ this.#pendingReadPromiseIds,
+ (id) => core.unrefOp(id),
+ );
}
}
diff --git a/ext/url/00_url.js b/ext/url/00_url.js
index 169cbe3a5..b4bc34b92 100644
--- a/ext/url/00_url.js
+++ b/ext/url/00_url.js
@@ -17,13 +17,14 @@ const {
ArrayPrototypeSort,
ArrayPrototypeSplice,
ObjectKeys,
- Uint32Array,
SafeArrayIterator,
StringPrototypeSlice,
+ StringPrototypeStartsWith,
Symbol,
SymbolFor,
SymbolIterator,
TypeError,
+ Uint32Array,
} = primordials;
const _list = Symbol("list");
@@ -421,7 +422,10 @@ class URL {
#hasAuthority() {
// https://github.com/servo/rust-url/blob/1d307ae51a28fecc630ecec03380788bfb03a643/url/src/lib.rs#L824
- return this.#serialization.slice(this.#schemeEnd).startsWith("://");
+ return StringPrototypeStartsWith(
+ StringPrototypeSlice(this.#serialization, this.#schemeEnd),
+ "://",
+ );
}
/** @return {string} */
@@ -429,7 +433,7 @@ class URL {
webidl.assertBranded(this, URLPrototype);
// https://github.com/servo/rust-url/blob/1d307ae51a28fecc630ecec03380788bfb03a643/url/src/quirks.rs#L263
return this.#fragmentStart
- ? trim(this.#serialization.slice(this.#fragmentStart))
+ ? trim(StringPrototypeSlice(this.#serialization, this.#fragmentStart))
: "";
}
@@ -455,7 +459,11 @@ class URL {
get host() {
webidl.assertBranded(this, URLPrototype);
// https://github.com/servo/rust-url/blob/1d307ae51a28fecc630ecec03380788bfb03a643/url/src/quirks.rs#L101
- return this.#serialization.slice(this.#hostStart, this.#pathStart);
+ return StringPrototypeSlice(
+ this.#serialization,
+ this.#hostStart,
+ this.#pathStart,
+ );
}
/** @param {string} value */
@@ -480,7 +488,11 @@ class URL {
get hostname() {
webidl.assertBranded(this, URLPrototype);
// https://github.com/servo/rust-url/blob/1d307ae51a28fecc630ecec03380788bfb03a643/url/src/lib.rs#L988
- return this.#serialization.slice(this.#hostStart, this.#hostEnd);
+ return StringPrototypeSlice(
+ this.#serialization,
+ this.#hostStart,
+ this.#hostEnd,
+ );
}
/** @param {string} value */
@@ -523,7 +535,11 @@ class URL {
get origin() {
webidl.assertBranded(this, URLPrototype);
// https://github.com/servo/rust-url/blob/1d307ae51a28fecc630ecec03380788bfb03a643/url/src/origin.rs#L14
- const scheme = this.#serialization.slice(0, this.#schemeEnd);
+ const scheme = StringPrototypeSlice(
+ this.#serialization,
+ 0,
+ this.#schemeEnd,
+ );
if (
scheme === "http" || scheme === "https" || scheme === "ftp" ||
scheme === "ws" || scheme === "wss"
@@ -552,7 +568,8 @@ class URL {
this.#usernameEnd !== this.#serialization.length &&
this.#serialization[this.#usernameEnd] === ":"
) {
- return this.#serialization.slice(
+ return StringPrototypeSlice(
+ this.#serialization,
this.#usernameEnd + 1,
this.#hostStart - 1,
);
@@ -583,11 +600,15 @@ class URL {
webidl.assertBranded(this, URLPrototype);
// https://github.com/servo/rust-url/blob/1d307ae51a28fecc630ecec03380788bfb03a643/url/src/lib.rs#L1203
if (!this.#queryStart && !this.#fragmentStart) {
- return this.#serialization.slice(this.#pathStart);
+ return StringPrototypeSlice(this.#serialization, this.#pathStart);
}
const nextComponentStart = this.#queryStart || this.#fragmentStart;
- return this.#serialization.slice(this.#pathStart, nextComponentStart);
+ return StringPrototypeSlice(
+ this.#serialization,
+ this.#pathStart,
+ nextComponentStart,
+ );
}
/** @param {string} value */
@@ -613,9 +634,14 @@ class URL {
webidl.assertBranded(this, URLPrototype);
// https://github.com/servo/rust-url/blob/1d307ae51a28fecc630ecec03380788bfb03a643/url/src/quirks.rs#L196
if (this.#port === NO_PORT) {
- return this.#serialization.slice(this.#hostEnd, this.#pathStart);
+ return StringPrototypeSlice(
+ this.#serialization,
+ this.#hostEnd,
+ this.#pathStart,
+ );
} else {
- return this.#serialization.slice(
+ return StringPrototypeSlice(
+ this.#serialization,
this.#hostEnd + 1, /* : */
this.#pathStart,
);
@@ -644,7 +670,11 @@ class URL {
get protocol() {
webidl.assertBranded(this, URLPrototype);
// https://github.com/servo/rust-url/blob/1d307ae51a28fecc630ecec03380788bfb03a643/url/src/quirks.rs#L56
- return this.#serialization.slice(0, this.#schemeEnd + 1 /* : */);
+ return StringPrototypeSlice(
+ this.#serialization,
+ 0,
+ this.#schemeEnd + 1, /* : */
+ );
}
/** @param {string} value */
@@ -672,7 +702,9 @@ class URL {
const afterPath = this.#queryStart || this.#fragmentStart ||
this.#serialization.length;
const afterQuery = this.#fragmentStart || this.#serialization.length;
- return trim(this.#serialization.slice(afterPath, afterQuery));
+ return trim(
+ StringPrototypeSlice(this.#serialization, afterPath, afterQuery),
+ );
}
/** @param {string} value */
@@ -703,7 +735,8 @@ class URL {
this.#hasAuthority() &&
this.#usernameEnd > this.#schemeEnd + schemeSeperatorLen
) {
- return this.#serialization.slice(
+ return StringPrototypeSlice(
+ this.#serialization,
this.#schemeEnd + schemeSeperatorLen,
this.#usernameEnd,
);
diff --git a/ext/url/01_urlpattern.js b/ext/url/01_urlpattern.js
index 3c08bc1b8..04bb50fd7 100644
--- a/ext/url/01_urlpattern.js
+++ b/ext/url/01_urlpattern.js
@@ -13,8 +13,9 @@ import * as webidl from "ext:deno_webidl/00_webidl.js";
const primordials = globalThis.__bootstrap.primordials;
const {
ArrayPrototypeMap,
- ObjectKeys,
+ ArrayPrototypePop,
ObjectFromEntries,
+ ObjectKeys,
RegExpPrototypeExec,
RegExpPrototypeTest,
SafeRegExp,
@@ -178,7 +179,7 @@ class URLPattern {
const { 0: values, 1: inputs } = res;
if (inputs[1] === null) {
- inputs.pop();
+ ArrayPrototypePop(inputs);
}
/** @type {URLPatternResult} */
diff --git a/ext/web/06_streams.js b/ext/web/06_streams.js
index 6d390308d..c0cbb3049 100644
--- a/ext/web/06_streams.js
+++ b/ext/web/06_streams.js
@@ -19,9 +19,10 @@ import {
const primordials = globalThis.__bootstrap.primordials;
const {
ArrayBuffer,
+ ArrayBufferIsView,
ArrayBufferPrototype,
ArrayBufferPrototypeGetByteLength,
- ArrayBufferIsView,
+ ArrayBufferPrototypeSlice,
ArrayPrototypeMap,
ArrayPrototypePush,
ArrayPrototypeShift,
@@ -34,12 +35,12 @@ const {
DataViewPrototypeGetByteOffset,
Float32Array,
Float64Array,
- Int8Array,
Int16Array,
Int32Array,
+ Int8Array,
+ MathMin,
NumberIsInteger,
NumberIsNaN,
- MathMin,
ObjectCreate,
ObjectDefineProperties,
ObjectDefineProperty,
@@ -52,14 +53,13 @@ const {
PromisePrototypeThen,
PromiseReject,
PromiseResolve,
- queueMicrotask,
RangeError,
ReflectHas,
SafeFinalizationRegistry,
SafePromiseAll,
SafeWeakMap,
// TODO(lucacasonato): add SharedArrayBuffer to primordials
- // SharedArrayBufferPrototype
+ // SharedArrayBufferPrototype,
Symbol,
SymbolAsyncIterator,
SymbolFor,
@@ -70,13 +70,14 @@ const {
TypedArrayPrototypeGetSymbolToStringTag,
TypedArrayPrototypeSet,
TypedArrayPrototypeSlice,
- Uint8Array,
Uint16Array,
Uint32Array,
+ Uint8Array,
Uint8ClampedArray,
WeakMapPrototypeGet,
WeakMapPrototypeHas,
WeakMapPrototypeSet,
+ queueMicrotask,
} = primordials;
import { createFilteredInspectProxy } from "ext:deno_console/01_console.js";
import { assert, AssertionError } from "ext:deno_web/00_infra.js";
@@ -1252,7 +1253,16 @@ function readableByteStreamControllerEnqueueClonedChunkToQueue(
) {
let cloneResult;
try {
- cloneResult = buffer.slice(byteOffset, byteOffset + byteLength);
+ if (ObjectPrototypeIsPrototypeOf(ArrayBufferPrototype, buffer)) {
+ cloneResult = ArrayBufferPrototypeSlice(
+ buffer,
+ byteOffset,
+ byteOffset + byteLength,
+ );
+ } else {
+ // TODO(lucacasonato): add SharedArrayBuffer to primordials
+ cloneResult = buffer.slice(byteOffset, byteOffset + byteLength);
+ }
} catch (e) {
readableByteStreamControllerError(controller, e);
}
@@ -1864,7 +1874,7 @@ function readableByteStreamControllerPullInto(
return;
}
}
- controller[_pendingPullIntos].push(pullIntoDescriptor);
+ ArrayPrototypePush(controller[_pendingPullIntos], pullIntoDescriptor);
readableStreamAddReadIntoRequest(stream, readIntoRequest);
readableByteStreamControllerCallPullIfNeeded(controller);
}
@@ -4481,7 +4491,7 @@ function writableStreamMarkCloseRequestInFlight(stream) {
function writableStreamMarkFirstWriteRequestInFlight(stream) {
assert(stream[_inFlightWriteRequest] === undefined);
assert(stream[_writeRequests].length);
- const writeRequest = stream[_writeRequests].shift();
+ const writeRequest = ArrayPrototypeShift(stream[_writeRequests]);
stream[_inFlightWriteRequest] = writeRequest;
}
diff --git a/ext/web/13_message_port.js b/ext/web/13_message_port.js
index fdc678a4f..6d9a2c01f 100644
--- a/ext/web/13_message_port.js
+++ b/ext/web/13_message_port.js
@@ -259,7 +259,7 @@ function serializeJsMessageData(data, transferables) {
);
}
j++;
- transferredArrayBuffers.push(ab);
+ ArrayPrototypePush(transferredArrayBuffers, ab);
}
}
diff --git a/ext/websocket/02_websocketstream.js b/ext/websocket/02_websocketstream.js
index fef17b701..06f4b50d9 100644
--- a/ext/websocket/02_websocketstream.js
+++ b/ext/websocket/02_websocketstream.js
@@ -17,6 +17,7 @@ const primordials = globalThis.__bootstrap.primordials;
const {
ArrayPrototypeJoin,
ArrayPrototypeMap,
+ DateNow,
Error,
ObjectPrototypeIsPrototypeOf,
PromisePrototypeCatch,
@@ -27,8 +28,8 @@ const {
StringPrototypeToLowerCase,
Symbol,
SymbolFor,
- TypedArrayPrototypeGetByteLength,
TypeError,
+ TypedArrayPrototypeGetByteLength,
Uint8ArrayPrototype,
} = primordials;
@@ -281,7 +282,7 @@ class WebSocketStream {
this[_closed].state === "pending"
) {
if (
- new Date().getTime() - await this[_closeSent].promise <=
+ DateNow() - await this[_closeSent].promise <=
CLOSE_RESPONSE_TIMEOUT
) {
return pull(controller);
@@ -404,7 +405,7 @@ class WebSocketStream {
core.opAsync("op_ws_close", this[_rid], code, closeInfo.reason),
() => {
setTimeout(() => {
- this[_closeSent].resolve(new Date().getTime());
+ this[_closeSent].resolve(DateNow());
}, 0);
},
(err) => {
diff --git a/runtime/js/11_workers.js b/runtime/js/11_workers.js
index b08a5737e..e04690005 100644
--- a/runtime/js/11_workers.js
+++ b/runtime/js/11_workers.js
@@ -4,10 +4,11 @@ const core = globalThis.Deno.core;
const ops = core.ops;
const primordials = globalThis.__bootstrap.primordials;
const {
+ ArrayPrototypeFilter,
Error,
ObjectPrototypeIsPrototypeOf,
- StringPrototypeStartsWith,
String,
+ StringPrototypeStartsWith,
SymbolIterator,
SymbolToStringTag,
} = primordials;
@@ -192,8 +193,9 @@ class Worker extends EventTarget {
const event = new MessageEvent("message", {
cancelable: false,
data: message,
- ports: transferables.filter((t) =>
- ObjectPrototypeIsPrototypeOf(MessagePortPrototype, t)
+ ports: ArrayPrototypeFilter(
+ transferables,
+ (t) => ObjectPrototypeIsPrototypeOf(MessagePortPrototype, t),
),
});
this.dispatchEvent(event);
diff --git a/runtime/js/30_os.js b/runtime/js/30_os.js
index 3af5803ad..a5a55e19b 100644
--- a/runtime/js/30_os.js
+++ b/runtime/js/30_os.js
@@ -6,10 +6,12 @@ import { Event, EventTarget } from "ext:deno_web/02_event.js";
const primordials = globalThis.__bootstrap.primordials;
const {
Error,
+ FunctionPrototypeBind,
SymbolFor,
} = primordials;
-const windowDispatchEvent = EventTarget.prototype.dispatchEvent.bind(
+const windowDispatchEvent = FunctionPrototypeBind(
+ EventTarget.prototype.dispatchEvent,
globalThis,
);
diff --git a/runtime/js/99_main.js b/runtime/js/99_main.js
index 01cf2973c..854a0029e 100644
--- a/runtime/js/99_main.js
+++ b/runtime/js/99_main.js
@@ -12,27 +12,28 @@ const ops = core.ops;
const internals = globalThis.__bootstrap.internals;
const primordials = globalThis.__bootstrap.primordials;
const {
+ ArrayPrototypeFilter,
ArrayPrototypeIndexOf,
+ ArrayPrototypeMap,
ArrayPrototypePush,
ArrayPrototypeShift,
ArrayPrototypeSplice,
- ArrayPrototypeMap,
DateNow,
Error,
ErrorPrototype,
- FunctionPrototypeCall,
FunctionPrototypeBind,
+ FunctionPrototypeCall,
ObjectAssign,
- ObjectDefineProperty,
ObjectDefineProperties,
+ ObjectDefineProperty,
ObjectFreeze,
ObjectPrototypeIsPrototypeOf,
ObjectSetPrototypeOf,
+ PromisePrototypeThen,
PromiseResolve,
+ SafeWeakMap,
Symbol,
SymbolIterator,
- PromisePrototypeThen,
- SafeWeakMap,
TypeError,
WeakMapPrototypeDelete,
WeakMapPrototypeGet,
@@ -147,8 +148,10 @@ async function pollForMessages() {
const msgEvent = new event.MessageEvent("message", {
cancelable: false,
data: message,
- ports: transferables.filter((t) =>
- ObjectPrototypeIsPrototypeOf(messagePort.MessagePortPrototype, t)
+ ports: ArrayPrototypeFilter(
+ transferables,
+ (t) =>
+ ObjectPrototypeIsPrototypeOf(messagePort.MessagePortPrototype, t),
),
});