Left: | ||
Right: |
OLD | NEW |
---|---|
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. |
11 | 11 |
12 let options = { | 12 let options = { |
13 filename: null, | 13 filename: null, |
14 module: false, | 14 module: false, |
15 autoload: "", | 15 autoload: "", |
16 varIndex: 0, | 16 varIndex: 0, |
17 indent_size: 2, | 17 indent_size: 2, |
18 preserve_newlines: false, | 18 preserve_newlines: false, |
19 brace_style: "expand", | 19 brace_style: "expand", |
20 source_repo: "" | 20 source_repo: "" |
21 }; | 21 }; |
22 let global = this; | |
23 | 22 |
24 function Literal(value) | 23 function Literal(value) |
25 { | 24 { |
26 return { | 25 return { |
27 type: "Literal", | 26 type: "Literal", |
28 value: value | 27 value: value |
29 }; | 28 }; |
30 } | 29 } |
31 | 30 |
32 function Identifier(varname) | 31 function Identifier(varname) |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
122 return ast; | 121 return ast; |
123 else | 122 else |
124 return {type: "BlockStatement", body: (ast.type == "EmptyStatement" ? [] : [ ast])}; | 123 return {type: "BlockStatement", body: (ast.type == "EmptyStatement" ? [] : [ ast])}; |
125 } | 124 } |
126 | 125 |
127 function modifyAST(ast) | 126 function modifyAST(ast) |
128 { | 127 { |
129 // Do the necessary modifications | 128 // Do the necessary modifications |
130 let func = "modify" + ast.type; | 129 let func = "modify" + ast.type; |
131 if (typeof global[func] == "function") | 130 if (typeof global[func] == "function") |
132 ast = global[func](ast); | 131 ast = global[func](ast); |
Wladimir Palant
2016/08/24 14:08:36
How is this working now? You removed the `global`
kzar
2016/08/24 14:25:20
`global` is already defined in astDecompile.js whi
Wladimir Palant
2016/08/24 14:45:17
Ok, this is really awkward... This should really b
kzar
2016/09/13 13:35:20
I agree this is awkward, but I don't understand wh
Wladimir Palant
2016/09/13 14:22:59
I'm not actually suggesting anything at this point
| |
133 | 132 |
134 // Recursive calls for any AST in properties of the current one | 133 // Recursive calls for any AST in properties of the current one |
135 if (ast) | 134 if (ast) |
136 { | 135 { |
137 let props = []; | 136 let props = []; |
138 for (let prop in ast) | 137 for (let prop in ast) |
139 props.push(prop); | 138 props.push(prop); |
140 for (let i = 0; i < props.length; i++) | 139 for (let i = 0; i < props.length; i++) |
141 { | 140 { |
142 let value = ast[props[i]]; | 141 let value = ast[props[i]]; |
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
429 } | 428 } |
430 | 429 |
431 return ast; | 430 return ast; |
432 } | 431 } |
433 | 432 |
434 function modifyFunctionDeclaration(ast) | 433 function modifyFunctionDeclaration(ast) |
435 { | 434 { |
436 return modifyFunctionExpression(ast); | 435 return modifyFunctionExpression(ast); |
437 } | 436 } |
438 | 437 |
439 function modifyArrowExpression(ast) | 438 function modifyArrowFunctionExpression(ast) |
440 { | 439 { |
441 if (ast.body.type != "BlockStatement") { | 440 if (ast.body.type != "BlockStatement") { |
442 // Convert expressions to block statements. | 441 // Convert expressions to block statements. |
443 // (a) => a + 1 | 442 // (a) => a + 1 |
444 // | 443 // |
445 // Change into: | 444 // Change into: |
446 // (a) => { return a + 1; } | 445 // (a) => { return a + 1; } |
447 ast.body = { | 446 ast.body = { |
448 type: "BlockStatement", | 447 type: "BlockStatement", |
449 body: [ | 448 body: [ |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
580 _print(decompileAST({ | 579 _print(decompileAST({ |
581 type: "ExpressionStatement", | 580 type: "ExpressionStatement", |
582 expression: { | 581 expression: { |
583 type: "CallExpression", | 582 type: "CallExpression", |
584 callee: Identifier("require"), | 583 callee: Identifier("require"), |
585 arguments: [Literal(module)] | 584 arguments: [Literal(module)] |
586 } | 585 } |
587 })); | 586 })); |
588 } | 587 } |
589 }; | 588 }; |
OLD | NEW |