Skip to content

Commit

Permalink
perf: partially replace .concat with .push (#13609)
Browse files Browse the repository at this point in the history
  • Loading branch information
fedeci committed Aug 14, 2021
1 parent 6a651e4 commit 10640b2
Show file tree
Hide file tree
Showing 18 changed files with 93 additions and 74 deletions.
6 changes: 5 additions & 1 deletion packages/babel-cli/src/babel-external-helpers.ts
Expand Up @@ -10,7 +10,11 @@ function collect(

const values = value.split(",");

return previousValue ? previousValue.concat(values) : values;
if (previousValue) {
previousValue.push(...values);
return previousValue;
}
return values;
}

commander.option(
Expand Down
9 changes: 7 additions & 2 deletions packages/babel-cli/src/babel/options.ts
Expand Up @@ -192,7 +192,8 @@ export default function parseArgv(args: Array<string>): CmdOptions | null {
let filenames = commander.args.reduce(function (globbed, input) {
let files = glob.sync(input);
if (!files.length) files = [input];
return globbed.concat(files);
globbed.push(...files);
return globbed;
}, []);

filenames = Array.from(new Set(filenames));
Expand Down Expand Up @@ -353,5 +354,9 @@ function collect(

const values = value.split(",");

return previousValue ? previousValue.concat(values) : values;
if (previousValue) {
previousValue.push(...values);
return previousValue;
}
return values;
}
4 changes: 2 additions & 2 deletions packages/babel-helper-define-map/src/index.js
Expand Up @@ -42,8 +42,8 @@ export function push(
if (node.decorators) {
const decorators = (map.decorators =
map.decorators || t.arrayExpression([]));
decorators.elements = decorators.elements.concat(
node.decorators.map(dec => dec.expression).reverse(),
decorators.elements.push(
...node.decorators.map(dec => dec.expression).reverse(),
);
}

Expand Down
4 changes: 2 additions & 2 deletions packages/babel-helpers/src/helpers.js
Expand Up @@ -316,7 +316,7 @@ helpers.extends = helper("7.0.0-beta.0")`
}
`;

// This old helper can be removed in babel v8
// TODO(babel-8): This old helper can be removed in babel v8
helpers.objectSpread = helper("7.0.0-beta.0")`
import defineProperty from "defineProperty";
Expand All @@ -325,7 +325,7 @@ helpers.objectSpread = helper("7.0.0-beta.0")`
var source = (arguments[i] != null) ? Object(arguments[i]) : {};
var ownKeys = Object.keys(source);
if (typeof Object.getOwnPropertySymbols === 'function') {
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
ownKeys.push.apply(ownKeys, Object.getOwnPropertySymbols(source).filter(function(sym) {
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
}));
}
Expand Down
8 changes: 6 additions & 2 deletions packages/babel-node/src/_babel-node.js
Expand Up @@ -21,7 +21,11 @@ function collect(value, previousValue): Array<string> {

const values = value.split(",");

return previousValue ? previousValue.concat(values) : values;
if (previousValue) {
previousValue.push(...values);
return previousValue;
}
return values;
}

program.option("-e, --eval [script]", "Evaluate script");
Expand Down Expand Up @@ -197,7 +201,7 @@ if (program.eval || program.print) {
}

// add back on node and concat the sliced args
process.argv = ["node"].concat(args);
process.argv = ["node", ...args];
process.execArgv.push(fileURLToPath(import.meta.url));

Module.runMain();
Expand Down
4 changes: 2 additions & 2 deletions packages/babel-node/src/babel-node.js
Expand Up @@ -8,7 +8,7 @@ import path from "path";
import child_process from "child_process";
import { fileURLToPath } from "url";

let args = [
const args = [
path.join(path.dirname(fileURLToPath(import.meta.url)), "_babel-node"),
];

Expand Down Expand Up @@ -69,7 +69,7 @@ getV8Flags(async function (err, v8Flags) {

// append arguments passed after --
if (argSeparator > -1) {
args = args.concat(userArgs);
args.push(...userArgs);
}

try {
Expand Down
3 changes: 2 additions & 1 deletion packages/babel-parser/src/plugins/flow/index.js
Expand Up @@ -1961,7 +1961,8 @@ export default (superClass: Class<Parser>): Class<Parser> =>

if (failed && valid.length === 1) {
this.state = state;
this.state.noArrowAt = noArrowAt.concat(valid[0].start);
noArrowAt.push(valid[0].start);
this.state.noArrowAt = noArrowAt;
({ consequent, failed } = this.tryParseConditionalConsequent());
}
}
Expand Down
Expand Up @@ -47,7 +47,7 @@ export default declare(api => {
}

// push the rest of the original loop body onto our new body
block.body = block.body.concat(node.body.body);
block.body.push(...node.body.body);

t.inherits(loop, node);
t.inherits(loop.body, node.body);
Expand Down
Expand Up @@ -157,7 +157,7 @@ function applyTargetDecorators(path, state, decoratedProps) {

WARNING_CALLS.add(node.value);

acc = acc.concat([
acc.push(
t.assignmentExpression(
"=",
t.cloneNode(descriptor),
Expand All @@ -184,9 +184,9 @@ function applyTargetDecorators(path, state, decoratedProps) {
]),
]),
),
]);
);
} else {
acc = acc.concat(
acc.push(
t.callExpression(state.addHelper("applyDecoratedDescriptor"), [
t.cloneNode(target),
t.cloneNode(property),
Expand Down
13 changes: 7 additions & 6 deletions packages/babel-plugin-transform-classes/src/transformClass.ts
Expand Up @@ -136,9 +136,8 @@ export default function transformClass(

if (classState.userConstructor) {
const { constructorBody, userConstructor, construct } = classState;
constructorBody.body = constructorBody.body.concat(
userConstructor.body.body,
);

constructorBody.body.push(...userConstructor.body.body);
t.inherits(construct, userConstructor);
t.inherits(constructorBody, userConstructor.body);
}
Expand Down Expand Up @@ -695,7 +694,7 @@ export default function transformClass(

extractDynamicKeys();

let { body } = classState;
const { body } = classState;
const { closureParams, closureArgs } = setupClosureParamsArgs();

buildBody();
Expand All @@ -712,8 +711,10 @@ export default function transformClass(
);
}

body = body.concat(
classState.staticPropBody.map(fn => fn(t.cloneNode(classState.classRef))),
body.push(
...classState.staticPropBody.map(fn =>
fn(t.cloneNode(classState.classRef)),
),
);

const isStrict = path.isInStrictMode();
Expand Down
Expand Up @@ -24,7 +24,7 @@ export default function transformWithoutHelper(loose, path, state) {
}

// push the rest of the original loop body onto our new body
block.body = block.body.concat(node.body.body);
block.body.push(...node.body.body);

t.inherits(loop, node);
t.inherits(loop.body, node.body);
Expand Down
12 changes: 6 additions & 6 deletions packages/babel-plugin-transform-modules-systemjs/src/index.js
Expand Up @@ -295,7 +295,7 @@ export default declare((api, options) => {
const exportMap = Object.create(null);
const modules = [];

let beforeBody = [];
const beforeBody = [];
const setters = [];
const sources = [];
const variableIds = [];
Expand Down Expand Up @@ -475,7 +475,7 @@ export default declare((api, options) => {
}

modules.forEach(function (specifiers) {
let setterBody = [];
const setterBody = [];
const target = scope.generateUid(specifiers.key);

for (let specifier of specifiers.imports) {
Expand Down Expand Up @@ -540,8 +540,8 @@ export default declare((api, options) => {
}
}

setterBody = setterBody.concat(
constructExportCall(
setterBody.push(
...constructExportCall(
path,
t.identifier(exportIdent),
exportNames,
Expand Down Expand Up @@ -589,8 +589,8 @@ export default declare((api, options) => {
}

if (exportNames.length) {
beforeBody = beforeBody.concat(
constructExportCall(
beforeBody.push(
...constructExportCall(
path,
t.identifier(exportIdent),
exportNames,
Expand Down
4 changes: 1 addition & 3 deletions packages/babel-plugin-transform-parameters/src/rest.js
Expand Up @@ -305,9 +305,7 @@ export default function convertFunctionRest(path) {
return true;
}

state.references = state.references.concat(
state.candidates.map(({ path }) => path),
);
state.references.push(...state.candidates.map(({ path }) => path));

const start = t.numericLiteral(paramsCount);
const key = scope.generateUidIdentifier("key");
Expand Down
70 changes: 37 additions & 33 deletions packages/babel-traverse/src/path/family.ts
Expand Up @@ -46,7 +46,9 @@ function addCompletionRecords(
records: Completion[],
context: CompletionContext,
): Completion[] {
if (path) return records.concat(_getCompletionRecords(path, context));
if (path) {
records.push(..._getCompletionRecords(path, context));
}
return records;
}

Expand All @@ -73,9 +75,9 @@ function completionRecordForSwitch(
if (normalCompletions.length) {
lastNormalCompletions = normalCompletions;
}
records = records.concat(breakCompletions);
records.push(...breakCompletions);
}
records = records.concat(lastNormalCompletions);
records.push(...lastNormalCompletions);
return records;
}

Expand Down Expand Up @@ -117,7 +119,7 @@ function getStatementListCompletion(
paths: NodePath[],
context: CompletionContext,
): Completion[] {
let completions = [];
const completions = [];
if (context.canHaveBreak) {
let lastNormalCompletions = [];
for (let i = 0; i < paths.length; i++) {
Expand Down Expand Up @@ -155,11 +157,11 @@ function getStatementListCompletion(
// When we have seen normal completions from the last statement
// it is safe to stop populating break and mark normal completions as break
normalCompletionToBreak(lastNormalCompletions);
completions = completions.concat(lastNormalCompletions);
completions.push(...lastNormalCompletions);
// Declarations have empty completion record, however they can not be nested
// directly in return statement, i.e. `return (var a = 1)` is invalid.
if (lastNormalCompletions.some(c => c.path.isDeclaration())) {
completions = completions.concat(statementCompletions);
completions.push(...statementCompletions);
replaceBreakStatementInBreakCompletion(
statementCompletions,
/* reachable */ true,
Expand All @@ -170,7 +172,7 @@ function getStatementListCompletion(
/* reachable */ false,
);
} else {
completions = completions.concat(statementCompletions);
completions.push(...statementCompletions);
if (!context.shouldPopulateBreak) {
replaceBreakStatementInBreakCompletion(
statementCompletions,
Expand All @@ -181,14 +183,18 @@ function getStatementListCompletion(
break;
}
if (i === paths.length - 1) {
completions = completions.concat(statementCompletions);
completions.push(...statementCompletions);
} else {
completions = completions.concat(
statementCompletions.filter(c => c.type === BREAK_COMPLETION),
);
lastNormalCompletions = statementCompletions.filter(
c => c.type === NORMAL_COMPLETION,
);
lastNormalCompletions = [];
for (let i = 0; i < statementCompletions.length; i++) {
const c = statementCompletions[i];
if (c.type === BREAK_COMPLETION) {
completions.push(c);
}
if (c.type === NORMAL_COMPLETION) {
lastNormalCompletions.push(c);
}
}
}
}
} else if (paths.length) {
Expand All @@ -202,7 +208,7 @@ function getStatementListCompletion(
(pathCompletions.length === 1 &&
!pathCompletions[0].path.isVariableDeclaration())
) {
completions = completions.concat(pathCompletions);
completions.push(...pathCompletions);
break;
}
}
Expand All @@ -225,29 +231,25 @@ function _getCompletionRecords(
path.isLabeledStatement()
) {
// @ts-expect-error(flow->ts): todo
records = addCompletionRecords(path.get("body"), records, context);
return addCompletionRecords(path.get("body"), records, context);
} else if (path.isProgram() || path.isBlockStatement()) {
records = records.concat(
// @ts-expect-error(flow->ts): todo
getStatementListCompletion(path.get("body"), context),
);
// @ts-expect-error(flow->ts): todo
return getStatementListCompletion(path.get("body"), context);
} else if (path.isFunction()) {
return _getCompletionRecords(path.get("body"), context);
} else if (path.isTryStatement()) {
records = addCompletionRecords(path.get("block"), records, context);
records = addCompletionRecords(path.get("handler"), records, context);
} else if (path.isCatchClause()) {
records = addCompletionRecords(path.get("body"), records, context);
return addCompletionRecords(path.get("body"), records, context);
} else if (path.isSwitchStatement()) {
records = completionRecordForSwitch(path.get("cases"), records, context);
return completionRecordForSwitch(path.get("cases"), records, context);
} else if (path.isSwitchCase()) {
records = records.concat(
getStatementListCompletion(path.get("consequent"), {
canHaveBreak: true,
shouldPopulateBreak: false,
inCaseClause: true,
}),
);
return getStatementListCompletion(path.get("consequent"), {
canHaveBreak: true,
shouldPopulateBreak: false,
inCaseClause: true,
});
} else if (path.isBreakStatement()) {
records.push(BreakCompletion(path));
} else {
Expand Down Expand Up @@ -495,7 +497,7 @@ export function getBindingIdentifierPaths(
[x: string]: NodePath;
} {
const path = this;
let search = [].concat(path);
const search = [path];
const ids = Object.create(null);

while (search.length) {
Expand All @@ -517,7 +519,7 @@ export function getBindingIdentifierPaths(

if (id.isExportDeclaration()) {
const declaration = id.get("declaration");
if (declaration.isDeclaration()) {
if (t.isDeclaration(declaration)) {
search.push(declaration);
}
continue;
Expand All @@ -537,8 +539,10 @@ export function getBindingIdentifierPaths(
for (let i = 0; i < keys.length; i++) {
const key = keys[i];
const child = id.get(key);
if (Array.isArray(child) || child.node) {
search = search.concat(child);
if (Array.isArray(child)) {
search.push(...child);
} else if (child.node) {
search.push(child);
}
}
}
Expand Down

0 comments on commit 10640b2

Please sign in to comment.