Skip to content

Commit b8918b0

Browse files
committed
Precompute concatenated strings where possible
1 parent 7d45dfc commit b8918b0

File tree

4 files changed

+228
-425
lines changed

4 files changed

+228
-425
lines changed

lib/constructs/iterable.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,10 @@ class Iterable {
3939
throw new TypeError("Illegal invocation");
4040
}
4141
if (arguments.length < 1) {
42-
throw new TypeError("Failed to execute 'forEach' on '${this.name}': 1 argument required, " +
43-
"but only 0 present.");
42+
throw new TypeError("Failed to execute 'forEach' on '${this.name}': 1 argument required, but only 0 present.");
4443
}
4544
if (typeof callback !== "function") {
46-
throw new TypeError("Failed to execute 'forEach' on '${this.name}': The callback provided " +
47-
"as parameter 1 is not a function.");
45+
throw new TypeError("Failed to execute 'forEach' on '${this.name}': The callback provided as parameter 1 is not a function.");
4846
}
4947
const thisArg = arguments[1];
5048
let pairs = Array.from(this[implSymbol]);

lib/parameters.js

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ function generateVarConversion(ctx, overload, i, parent, errPrefix, targetIdx =
2222
`;
2323
}
2424
const msg = typeof targetIdx === "string" ?
25-
`"${errPrefix}parameter " + (${targetIdx} + 1)` : `"${errPrefix}parameter ${i + 1}"`;
25+
`\`${errPrefix}parameter \${${targetIdx} + 1}\`` : `"${errPrefix}parameter ${i + 1}"`;
2626
const conv = Types.generateTypeConversion(
2727
ctx, "curArg", idlType, [], parent.name, msg);
2828
requires.merge(conv.requires);
@@ -58,8 +58,7 @@ module.exports.generateOverloadConversions = function (ctx, typeOfOp, name, pare
5858
const plural = minArgs > 1 ? "s" : "";
5959
str += `
6060
if (arguments.length < ${minArgs}) {
61-
throw new TypeError("${errPrefix}${minArgs} argument${plural} required, but only " + arguments.length +
62-
" present.");
61+
throw new TypeError(\`${errPrefix}${minArgs} argument${plural} required, but only \${arguments.length} present.\`);
6362
}
6463
`;
6564
}
@@ -72,7 +71,7 @@ module.exports.generateOverloadConversions = function (ctx, typeOfOp, name, pare
7271
.filter(o => o.typeList.length === numArgs);
7372
if (S.length === 0) {
7473
switchCases.push(`
75-
throw new TypeError("${errPrefix}only " + arguments.length + " arguments present.");
74+
throw new TypeError(\`${errPrefix}only \${arguments.length} arguments present.\`);
7675
`);
7776
continue;
7877
}

lib/types.js

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,18 @@ function deepClone(obj) {
8383
return JSON.parse(JSON.stringify(obj));
8484
}
8585

86+
function appendToErrorPrefix(errPrefix, appended) {
87+
if (errPrefix.endsWith('"')) {
88+
return errPrefix.slice(0, -1) + appended + '"';
89+
} else if (errPrefix.endsWith("'")) {
90+
return errPrefix.slice(0, -1) + appended + "'";
91+
} else if (errPrefix.endsWith("`")) {
92+
return errPrefix.slice(0, -1) + appended + "`";
93+
}
94+
95+
return `\`\${${errPrefix}}${appended}\``;
96+
}
97+
8698
function generateTypeConversion(ctx, name, idlType, argAttrs = [], parentName, errPrefix = '"The provided value"') {
8799
const requires = new utils.RequiresMap(ctx);
88100
let str = "";
@@ -211,25 +223,25 @@ function generateTypeConversion(ctx, name, idlType, argAttrs = [], parentName, e
211223
if (union.sequenceLike) {
212224
code += `if (${name}[Symbol.iterator] !== undefined) {`;
213225
const conv = generateTypeConversion(ctx, name, union.sequenceLike, [], parentName,
214-
`${errPrefix} + " sequence"`);
226+
appendToErrorPrefix(errPrefix, " sequence"));
215227
requires.merge(conv.requires);
216228
code += conv.body;
217229
code += `} else {`;
218230
}
219231

220232
if (union.dictionary) {
221233
const conv = generateTypeConversion(ctx, name, union.dictionary, [], parentName,
222-
`${errPrefix} + " dictionary"`);
234+
appendToErrorPrefix(errPrefix, " dictionary"));
223235
requires.merge(conv.requires);
224236
code += conv.body;
225237
} else if (union.record) {
226238
const conv = generateTypeConversion(ctx, name, union.record, [], parentName,
227-
`${errPrefix} + " record"`);
239+
appendToErrorPrefix(errPrefix, " record"));
228240
requires.merge(conv.requires);
229241
code += conv.body;
230242
} else if (union.callbackInterface) {
231243
const conv = generateTypeConversion(ctx, name, union.callbackInterface, [], parentName,
232-
`${errPrefix} + " callback interface"`);
244+
appendToErrorPrefix(errPrefix, " callback interface"));
233245
requires.merge(conv.requires);
234246
code += conv.body;
235247
} else if (union.object) {
@@ -269,7 +281,7 @@ function generateTypeConversion(ctx, name, idlType, argAttrs = [], parentName, e
269281
code += conv.body;
270282
requires.merge(conv.requires);
271283
} else {
272-
code += `throw new TypeError(${errPrefix} + " is not of any supported type.")`;
284+
code += `throw new TypeError(${appendToErrorPrefix(errPrefix, " is not of any supported type.")})`;
273285
}
274286
code += "}";
275287
output.push(code);
@@ -280,12 +292,12 @@ function generateTypeConversion(ctx, name, idlType, argAttrs = [], parentName, e
280292

281293
function generateSequence() {
282294
const conv = generateTypeConversion(ctx, "nextItem", idlType.idlType[0], [], parentName,
283-
`${errPrefix} + "'s element"`);
295+
appendToErrorPrefix(errPrefix, "'s element"));
284296
requires.merge(conv.requires);
285297

286298
str += `
287299
if (!utils.isObject(${name})) {
288-
throw new TypeError(${errPrefix} + " is not an iterable object.");
300+
throw new TypeError(${appendToErrorPrefix(errPrefix, " is not an iterable object.")});
289301
} else {
290302
const V = [];
291303
const tmp = ${name};
@@ -300,15 +312,15 @@ function generateTypeConversion(ctx, name, idlType, argAttrs = [], parentName, e
300312

301313
function generateRecord() {
302314
const keyConv = generateTypeConversion(ctx, "typedKey", idlType.idlType[0], [], parentName,
303-
`${errPrefix} + "'s key"`);
315+
appendToErrorPrefix(errPrefix, "'s key"));
304316
requires.merge(keyConv.requires);
305317
const valConv = generateTypeConversion(ctx, "typedValue", idlType.idlType[1], [], parentName,
306-
`${errPrefix} + "'s value"`);
318+
appendToErrorPrefix(errPrefix, "'s value"));
307319
requires.merge(valConv.requires);
308320

309321
str += `
310322
if (!utils.isObject(${name})) {
311-
throw new TypeError(${errPrefix} + " is not an object.");
323+
throw new TypeError(${appendToErrorPrefix(errPrefix, " is not an object.")});
312324
} else {
313325
const result = Object.create(null);
314326
for (const key of Reflect.ownKeys(${name})) {
@@ -334,7 +346,7 @@ function generateTypeConversion(ctx, name, idlType, argAttrs = [], parentName, e
334346
handler = "";
335347
} else {
336348
const conv = generateTypeConversion(ctx, "value", idlType.idlType[0], [], parentName,
337-
`${errPrefix} + " promise value"`);
349+
appendToErrorPrefix(errPrefix, " promise value"));
338350
requires.merge(conv.requires);
339351
handler = `
340352
${conv.body}

0 commit comments

Comments
 (0)