Sfoglia il codice sorgente

BlockStatement control flow transformation: using index increment instead array shift

sanex3339 8 anni fa
parent
commit
412b42403e

+ 2 - 1
dist/index.js

@@ -5105,7 +5105,8 @@ var FunctionControlFlowTransformer = FunctionControlFlowTransformer_1 = function
                 functionStatements.push(Nodes_1.Nodes.getReturnStatementNode(Nodes_1.Nodes.getLiteralNode(true)));
             }
             var controllerIdentifierName = RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomString(3);
-            functionNode.body.body = [Nodes_1.Nodes.getVariableDeclarationNode([Nodes_1.Nodes.getVariableDeclaratorNode(Nodes_1.Nodes.getIdentifierNode(controllerIdentifierName), Nodes_1.Nodes.getCallExpressionNode(Nodes_1.Nodes.getMemberExpressionNode(Nodes_1.Nodes.getLiteralNode(originalKeysIndexesInShuffledArray.join('|')), Nodes_1.Nodes.getIdentifierNode('split')), [Nodes_1.Nodes.getLiteralNode('|')]))]), Nodes_1.Nodes.getWhileStatementNode(Nodes_1.Nodes.getLiteralNode(true), Nodes_1.Nodes.getBlockStatementNode([Nodes_1.Nodes.getSwitchStatementNode(Nodes_1.Nodes.getCallExpressionNode(Nodes_1.Nodes.getMemberExpressionNode(Nodes_1.Nodes.getIdentifierNode(controllerIdentifierName), Nodes_1.Nodes.getIdentifierNode('shift'))), shuffledKeys.map(function (key, index) {
+            var indexIdentifierName = RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomString(3);
+            functionNode.body.body = [Nodes_1.Nodes.getVariableDeclarationNode([Nodes_1.Nodes.getVariableDeclaratorNode(Nodes_1.Nodes.getIdentifierNode(controllerIdentifierName), Nodes_1.Nodes.getCallExpressionNode(Nodes_1.Nodes.getMemberExpressionNode(Nodes_1.Nodes.getLiteralNode(originalKeysIndexesInShuffledArray.join('|')), Nodes_1.Nodes.getIdentifierNode('split')), [Nodes_1.Nodes.getLiteralNode('|')])), Nodes_1.Nodes.getVariableDeclaratorNode(Nodes_1.Nodes.getIdentifierNode(indexIdentifierName), Nodes_1.Nodes.getLiteralNode(0))]), Nodes_1.Nodes.getWhileStatementNode(Nodes_1.Nodes.getLiteralNode(true), Nodes_1.Nodes.getBlockStatementNode([Nodes_1.Nodes.getSwitchStatementNode(Nodes_1.Nodes.getMemberExpressionNode(Nodes_1.Nodes.getIdentifierNode(controllerIdentifierName), Nodes_1.Nodes.getUpdateExpressionNode('++', Nodes_1.Nodes.getIdentifierNode(indexIdentifierName)), true), shuffledKeys.map(function (key, index) {
                 return Nodes_1.Nodes.getSwitchCaseNode(Nodes_1.Nodes.getLiteralNode(String(index)), [functionStatementsObject[key], Nodes_1.Nodes.getContinueStatement()]);
             })), Nodes_1.Nodes.getBreakStatement()]))];
             NodeUtils_1.NodeUtils.parentize(functionNode.body);

+ 12 - 5
src/node-transformers/node-control-flow-transformers/FunctionControlFlowTransformer.ts

@@ -242,6 +242,7 @@ export class FunctionControlFlowTransformer extends AbstractNodeTransformer {
         }
 
         const controllerIdentifierName: string = RandomGeneratorUtils.getRandomString(3);
+        const indexIdentifierName: string = RandomGeneratorUtils.getRandomString(3);
 
         functionNode.body.body = [
             Nodes.getVariableDeclarationNode([
@@ -258,17 +259,23 @@ export class FunctionControlFlowTransformer extends AbstractNodeTransformer {
                             Nodes.getLiteralNode('|')
                         ]
                     )
+                ),
+                Nodes.getVariableDeclaratorNode(
+                    Nodes.getIdentifierNode(indexIdentifierName),
+                    Nodes.getLiteralNode(0)
                 )
             ]),
             Nodes.getWhileStatementNode(
                 Nodes.getLiteralNode(true),
                 Nodes.getBlockStatementNode([
                     Nodes.getSwitchStatementNode(
-                        Nodes.getCallExpressionNode(
-                            Nodes.getMemberExpressionNode(
-                                Nodes.getIdentifierNode(controllerIdentifierName),
-                                Nodes.getIdentifierNode('shift')
-                            )
+                        Nodes.getMemberExpressionNode(
+                            Nodes.getIdentifierNode(controllerIdentifierName),
+                            Nodes.getUpdateExpressionNode(
+                                '++',
+                                Nodes.getIdentifierNode(indexIdentifierName)
+                            ),
+                            true
                         ),
                         shuffledKeys.map((key: number, index: number) => {
                             return Nodes.getSwitchCaseNode(

+ 1 - 1
src/node/Nodes.ts

@@ -271,7 +271,7 @@ export class Nodes {
      */
     public static getMemberExpressionNode (
         object: ESTree.Expression | ESTree.Super,
-        property: ESTree.Identifier|ESTree.Literal,
+        property: ESTree.Expression,
         computed: boolean = false
     ): ESTree.MemberExpression {
         return {