| LEFT | RIGHT | 
|    1 // This script rewrites AST to be compatible with JavaScript 1.5 and decompiles |    1 // This script rewrites AST to be compatible with JavaScript 1.5 and decompiles | 
|    2 // the modified tree then |    2 // the modified tree then | 
|    3  |    3  | 
|    4 include("../scripts/astDecompile.js"); |    4 include("../scripts/astDecompile.js"); | 
|    5 include("../utils/beautify.js"); |    5 include("../utils/beautify.js"); | 
|    6  |    6  | 
|    7 let headerPrinted = false; |    7 let headerPrinted = false; | 
|    8  |    8  | 
|    9 // See https://developer.mozilla.org/en-US/docs/SpiderMonkey/Parser_API for |    9 // See https://developer.mozilla.org/en-US/docs/SpiderMonkey/Parser_API for | 
|   10 // AST structure. |   10 // AST structure. | 
| (...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  463   } |  463   } | 
|  464  |  464  | 
|  465   // Now convert the arrow expression into a normal |  465   // Now convert the arrow expression into a normal | 
|  466   // function expression. |  466   // function expression. | 
|  467   ast.type = "FunctionExpression"; |  467   ast.type = "FunctionExpression"; | 
|  468   ast.expression = false; |  468   ast.expression = false; | 
|  469  |  469  | 
|  470   // We want to avoid the .bind call if |this| isn't actually used. |  470   // We want to avoid the .bind call if |this| isn't actually used. | 
|  471   // This is not necessarily always correct, but should be good enough. |  471   // This is not necessarily always correct, but should be good enough. | 
|  472   var body = decompileAST(ast.body); |  472   var body = decompileAST(ast.body); | 
|  473   if (["this", "Function", "eval", "=>"].some(search => body.contains(search))) 
     { |  473   if (/((\bthis\b)|=>)/.test(body)) { | 
|  474     return { |  474     return { | 
|  475       type: "CallExpression", |  475       type: "CallExpression", | 
|  476       callee: Member(ast, "bind"), |  476       callee: Member(ast, "bind"), | 
|  477       arguments: [ |  477       arguments: [ | 
|  478         { |  478         { | 
|  479           type: "ThisExpression" |  479           type: "ThisExpression" | 
|  480         } |  480         } | 
|  481       ] |  481       ] | 
|  482     }; |  482     }; | 
|  483   } |  483   } | 
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  568     let code = 'require.scopes["' + options.filename + '"] = (function() {\n' + |  568     let code = 'require.scopes["' + options.filename + '"] = (function() {\n' + | 
|  569                'var exports = {};\n' + |  569                'var exports = {};\n' + | 
|  570                decompileAST(ast) + |  570                decompileAST(ast) + | 
|  571                'return exports;\n' + |  571                'return exports;\n' + | 
|  572                '})();\n'; |  572                '})();\n'; | 
|  573     _print(js_beautify(code, options)); |  573     _print(js_beautify(code, options)); | 
|  574   } |  574   } | 
|  575   else |  575   else | 
|  576     _print(js_beautify(decompileAST(ast), options)); |  576     _print(js_beautify(decompileAST(ast), options)); | 
|  577 } |  577 } | 
| LEFT | RIGHT |