BlockStatementControlFlowTransformers small performance fix

This commit is contained in:
sanex3339
2017-01-10 19:04:49 +03:00
parent a8339bc4ae
commit 326f4c0268
4 changed files with 12 additions and 38 deletions
+5 -14
View File
@@ -201,6 +201,7 @@ var esprima = __webpack_require__(49);
var estraverse = __webpack_require__(18);
var NodeType_1 = __webpack_require__(15);
var Node_1 = __webpack_require__(12);
var Nodes_1 = __webpack_require__(22);
var NodeUtils = function () {
function NodeUtils() {
@@ -333,7 +334,7 @@ var NodeUtils = function () {
if (node.type === NodeType_1.NodeType.Program) {
value = node;
} else {
value = Node_1.Node.getProgramNode([node]);
value = Nodes_1.Nodes.getProgramNode([node]);
value.parentNode = value;
}
isRootNode = false;
@@ -562,16 +563,6 @@ var Node = function () {
}
(0, _createClass3.default)(Node, null, [{
key: "getProgramNode",
value: function getProgramNode(bodyNode) {
return {
'type': NodeType_1.NodeType.Program,
'body': bodyNode,
'sourceType': 'script',
'obfuscated': false
};
}
}, {
key: "isArrowFunctionExpressionNode",
value: function isArrowFunctionExpressionNode(node) {
return node.type === NodeType_1.NodeType.ArrowFunctionExpression;
@@ -5117,14 +5108,14 @@ var BlockStatementControlFlowTransformer = BlockStatementControlFlowTransformer_
return blockStatementNode;
}
var blockStatementBody = blockStatementNode.body;
if (blockStatementBody.length <= 4) {
return blockStatementNode;
}
var originalKeys = [].concat((0, _toConsumableArray3.default)(Array(blockStatementBody.length).keys()));
var shuffledKeys = Utils_1.Utils.arrayShuffle(originalKeys);
var originalKeysIndexesInShuffledArray = originalKeys.map(function (key) {
return shuffledKeys.indexOf(key);
});
if (blockStatementBody.length <= 4) {
return blockStatementNode;
}
var blockStatementControlFlowFlatteningCustomNode = this.customNodeFactory(CustomNodes_1.CustomNodes.BlockStatementControlFlowFlatteningNode);
blockStatementControlFlowFlatteningCustomNode.initialize(blockStatementBody, shuffledKeys, originalKeysIndexesInShuffledArray);
return blockStatementControlFlowFlatteningCustomNode.getNode()[0];
@@ -62,14 +62,14 @@ export class BlockStatementControlFlowTransformer extends AbstractNodeTransforme
}
const blockStatementBody: ESTree.Statement[] = blockStatementNode.body;
const originalKeys: number[] = [...Array(blockStatementBody.length).keys()];
const shuffledKeys: number[] = Utils.arrayShuffle(originalKeys);
const originalKeysIndexesInShuffledArray: number[] = originalKeys.map((key: number) => shuffledKeys.indexOf(key));
if (blockStatementBody.length <= 4) {
return blockStatementNode;
}
const originalKeys: number[] = [...Array(blockStatementBody.length).keys()];
const shuffledKeys: number[] = Utils.arrayShuffle(originalKeys);
const originalKeysIndexesInShuffledArray: number[] = originalKeys.map((key: number) => shuffledKeys.indexOf(key));
const blockStatementControlFlowFlatteningCustomNode: ICustomNode = this.customNodeFactory(
CustomNodes.BlockStatementControlFlowFlatteningNode
);
+2 -20
View File
@@ -1,24 +1,10 @@
import * as ESTree from 'estree';
import { TNodeWithBlockStatement } from '../types/node/TNodeWithBlockStatement';
import { TStatement } from '../types/node/TStatement';
import { NodeType } from '../enums/NodeType';
export class Node {
/**
* @param bodyNode
* @returns ESTree.Program
*/
public static getProgramNode (bodyNode: TStatement[]): ESTree.Program {
return {
'type': NodeType.Program,
'body': bodyNode,
'sourceType': 'script',
'obfuscated': false
};
}
/**
* @param node
* @returns {boolean}
@@ -109,9 +95,7 @@ export class Node {
const parentNodeIsContinueStatementNode: boolean = Node.isContinueStatementNode(parentNode) && parentNode.label === node;
const parentNodeIsBreakStatementNode: boolean = Node.isBreakStatementNode(parentNode) && parentNode.label === node;
return parentNodeIsLabeledStatementNode ||
parentNodeIsContinueStatementNode ||
parentNodeIsBreakStatementNode;
return parentNodeIsLabeledStatementNode || parentNodeIsContinueStatementNode || parentNodeIsBreakStatementNode;
}
/**
@@ -181,9 +165,7 @@ export class Node {
parentNode.property === node
);
return !parentNodeIsPropertyNode &&
!parentNodeIsMemberExpressionNode &&
!Node.isLabelIdentifierNode(node, parentNode);
return !parentNodeIsPropertyNode && !parentNodeIsMemberExpressionNode && !Node.isLabelIdentifierNode(node, parentNode);
}
/**
+2 -1
View File
@@ -9,6 +9,7 @@ import { TStatement } from '../types/node/TStatement';
import { NodeType } from '../enums/NodeType';
import { Node } from './Node';
import { Nodes } from './Nodes';
export class NodeUtils {
/**
@@ -166,7 +167,7 @@ export class NodeUtils {
if (node.type === NodeType.Program) {
value = node;
} else {
value = Node.getProgramNode(<TStatement[]>[node]);
value = Nodes.getProgramNode(<TStatement[]>[node]);
value.parentNode = value;
}