Browse Source

esprima parse speedup when sourcemap is disable

sanex3339 8 years ago
parent
commit
1aed037b15

+ 6 - 6
dist/index.js

@@ -320,7 +320,7 @@ var NodeUtils = function () {
         key: "parentize",
         key: "parentize",
         value: function parentize(node) {
         value: function parentize(node) {
             var isRootNode = true;
             var isRootNode = true;
-            estraverse.replace(node, {
+            estraverse.traverse(node, {
                 enter: function enter(node, parentNode) {
                 enter: function enter(node, parentNode) {
                     var value = void 0;
                     var value = void 0;
                     if (isRootNode) {
                     if (isRootNode) {
@@ -2060,7 +2060,7 @@ var JavaScriptObfuscatorInternal = JavaScriptObfuscatorInternal_1 = function ()
     (0, _createClass3.default)(JavaScriptObfuscatorInternal, [{
     (0, _createClass3.default)(JavaScriptObfuscatorInternal, [{
         key: "obfuscate",
         key: "obfuscate",
         value: function obfuscate(sourceCode) {
         value: function obfuscate(sourceCode) {
-            var astTree = esprima.parse(sourceCode, JavaScriptObfuscatorInternal_1.esprimaParams);
+            var astTree = esprima.parse(sourceCode, { loc: this.options.sourceMap });
             var obfuscatedAstTree = this.obfuscator.obfuscateAstTree(astTree);
             var obfuscatedAstTree = this.obfuscator.obfuscateAstTree(astTree);
             var generatorOutput = this.generateCode(sourceCode, obfuscatedAstTree);
             var generatorOutput = this.generateCode(sourceCode, obfuscatedAstTree);
             return this.getObfuscationResult(generatorOutput);
             return this.getObfuscationResult(generatorOutput);
@@ -2092,9 +2092,6 @@ JavaScriptObfuscatorInternal.escodegenParams = {
     verbatim: 'x-verbatim-property',
     verbatim: 'x-verbatim-property',
     sourceMapWithCode: true
     sourceMapWithCode: true
 };
 };
-JavaScriptObfuscatorInternal.esprimaParams = {
-    loc: true
-};
 JavaScriptObfuscatorInternal = JavaScriptObfuscatorInternal_1 = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IObfuscator)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.ISourceMapCorrector)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object, Object, Object])], JavaScriptObfuscatorInternal);
 JavaScriptObfuscatorInternal = JavaScriptObfuscatorInternal_1 = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IObfuscator)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.ISourceMapCorrector)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object, Object, Object])], JavaScriptObfuscatorInternal);
 exports.JavaScriptObfuscatorInternal = JavaScriptObfuscatorInternal;
 exports.JavaScriptObfuscatorInternal = JavaScriptObfuscatorInternal;
 var JavaScriptObfuscatorInternal_1;
 var JavaScriptObfuscatorInternal_1;
@@ -6320,9 +6317,12 @@ var StackTraceAnalyzer = StackTraceAnalyzer_1 = function () {
                 var blockScopeBodyNode = blockScopeBody[index];
                 var blockScopeBodyNode = blockScopeBody[index];
                 estraverse.traverse(blockScopeBodyNode, {
                 estraverse.traverse(blockScopeBodyNode, {
                     enter: function enter(node) {
                     enter: function enter(node) {
-                        if (!Node_1.Node.isCallExpressionNode(node) || blockScopeBodyNode.parentNode !== NodeUtils_1.NodeUtils.getBlockScopesOfNode(node)[0]) {
+                        if (!Node_1.Node.isCallExpressionNode(node)) {
                             return;
                             return;
                         }
                         }
+                        if (blockScopeBodyNode.parentNode !== NodeUtils_1.NodeUtils.getBlockScopesOfNode(node)[0]) {
+                            return estraverse.VisitorOption.Skip;
+                        }
                         _this.analyzeCallExpressionNode(stackTraceData, blockScopeBody, node);
                         _this.analyzeCallExpressionNode(stackTraceData, blockScopeBody, node);
                     }
                     }
                 });
                 });

+ 1 - 8
src/JavaScriptObfuscatorInternal.ts

@@ -22,13 +22,6 @@ export class JavaScriptObfuscatorInternal implements IJavaScriptObfuscator {
         sourceMapWithCode: true
         sourceMapWithCode: true
     };
     };
 
 
-    /**
-     * @type {esprima.Options}
-     */
-    private static readonly esprimaParams: esprima.Options = {
-        loc: true
-    };
-
     /**
     /**
      * @type {IObfuscator}
      * @type {IObfuscator}
      */
      */
@@ -65,7 +58,7 @@ export class JavaScriptObfuscatorInternal implements IJavaScriptObfuscator {
      */
      */
     public obfuscate (sourceCode: string): IObfuscationResult {
     public obfuscate (sourceCode: string): IObfuscationResult {
         // parse AST tree
         // parse AST tree
-        const astTree: ESTree.Program = esprima.parse(sourceCode, JavaScriptObfuscatorInternal.esprimaParams);
+        const astTree: ESTree.Program = esprima.parse(sourceCode, { loc: this.options.sourceMap });
 
 
         // obfuscate AST tree
         // obfuscate AST tree
         const obfuscatedAstTree: ESTree.Program = this.obfuscator.obfuscateAstTree(astTree);
         const obfuscatedAstTree: ESTree.Program = this.obfuscator.obfuscateAstTree(astTree);

+ 1 - 1
src/node/NodeUtils.ts

@@ -150,7 +150,7 @@ export class NodeUtils {
     public static parentize <T extends ESTree.Node> (node: T): T {
     public static parentize <T extends ESTree.Node> (node: T): T {
         let isRootNode: boolean = true;
         let isRootNode: boolean = true;
 
 
-        estraverse.replace(node, {
+        estraverse.traverse(node, {
             enter: (node: ESTree.Node, parentNode: ESTree.Node): any => {
             enter: (node: ESTree.Node, parentNode: ESTree.Node): any => {
                 let value: ESTree.Node;
                 let value: ESTree.Node;
 
 

+ 6 - 5
src/stack-trace-analyzer/StackTraceAnalyzer.ts

@@ -127,14 +127,15 @@ export class StackTraceAnalyzer implements IStackTraceAnalyzer {
             const blockScopeBodyNode: ESTree.Node = blockScopeBody[index];
             const blockScopeBodyNode: ESTree.Node = blockScopeBody[index];
 
 
             estraverse.traverse(blockScopeBodyNode, {
             estraverse.traverse(blockScopeBodyNode, {
-                enter: (node: ESTree.Node): void => {
-                    if (
-                        !Node.isCallExpressionNode(node) ||
-                        blockScopeBodyNode.parentNode !== NodeUtils.getBlockScopesOfNode(node)[0]
-                    ) {
+                enter: (node: ESTree.Node): any => {
+                    if (!Node.isCallExpressionNode(node)) {
                         return;
                         return;
                     }
                     }
 
 
+                    if (blockScopeBodyNode.parentNode !== NodeUtils.getBlockScopesOfNode(node)[0]) {
+                        return estraverse.VisitorOption.Skip;
+                    }
+
                     this.analyzeCallExpressionNode(stackTraceData, blockScopeBody, node);
                     this.analyzeCallExpressionNode(stackTraceData, blockScopeBody, node);
                 }
                 }
             });
             });