Left: | ||
Right: |
OLD | NEW |
---|---|
1 // Decompile a JS file. This will be painful. | 1 // Decompile a JS file. This will be painful. |
Wladimir Palant
2016/08/24 14:21:50
I don't consider it a good measure to modify files
kzar
2016/08/24 14:43:20
Done.
| |
2 include("../utils/dumpast.js"); | 2 include("../utils/dumpast.js"); |
3 include("../utils/astml.js"); | 3 include("../utils/astml.js"); |
4 | 4 |
5 let visitor = { | 5 let visitor = { |
6 _visitArray: function (arr, pre, post, comma) { | 6 _visitArray: function (arr, pre, post, comma) { |
7 if (pre === undefined) pre = '('; | 7 if (pre === undefined) pre = '('; |
8 if (post === undefined) post = ')'; | 8 if (post === undefined) post = ')'; |
9 if (comma === undefined) comma = ', '; | 9 if (comma === undefined) comma = ', '; |
10 output(pre); | 10 output(pre); |
11 for each (let arg in arr) { | 11 for (let arg of arr) { |
12 arg.visit(this); | 12 arg.visit(this); |
13 output(comma); | 13 output(comma); |
14 } | 14 } |
15 if (arr.length > 0) | 15 if (arr.length > 0) |
16 unwrite(comma.length); | 16 unwrite(comma.length); |
17 output(post); | 17 output(post); |
18 }, | 18 }, |
19 _visitMaybeBlock: function (body) { | 19 _visitMaybeBlock: function (body) { |
20 if (body.type == "BlockStatement") { | 20 if (body.type == "BlockStatement") { |
21 output(" "); | 21 output(" "); |
22 body.visit(this); | 22 body.visit(this); |
23 } else { | 23 } else { |
24 flush().indent(); | 24 flush().indent(); |
25 body.visit(this); | 25 body.visit(this); |
26 unindent(); | 26 unindent(); |
27 } | 27 } |
28 }, | 28 }, |
29 _visitNeedBlock: function (stmt, noFlush) { | 29 _visitNeedBlock: function (stmt, noFlush) { |
30 if (stmt.type == "EmptyStatement") { | 30 if (stmt.type == "EmptyStatement") { |
31 output("{}") | 31 output("{}"); |
32 if (!noFlush) | 32 if (!noFlush) |
33 flush(); | 33 flush(); |
34 } | 34 } |
35 else if (stmt.type == "ReturnStatement") { | 35 else if (stmt.type == "ReturnStatement") { |
36 output("{").flush().indent(); | 36 output("{").flush().indent(); |
37 stmt.visit(this); | 37 stmt.visit(this); |
38 unindent().output("}"); | 38 unindent().output("}"); |
39 if (!noFlush) | 39 if (!noFlush) |
40 flush(); | 40 flush(); |
41 } | 41 } |
(...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
439 function sanitize(str, q) { | 439 function sanitize(str, q) { |
440 function replace(x) { | 440 function replace(x) { |
441 if (x == q) return '\\' + q; | 441 if (x == q) return '\\' + q; |
442 if (x == '\\') return '\\\\'; | 442 if (x == '\\') return '\\\\'; |
443 if (x == '\b') return '\\b'; | 443 if (x == '\b') return '\\b'; |
444 if (x == '\f') return '\\f'; | 444 if (x == '\f') return '\\f'; |
445 if (x == '\n') return '\\n'; | 445 if (x == '\n') return '\\n'; |
446 if (x == '\r') return '\\r'; | 446 if (x == '\r') return '\\r'; |
447 if (x == '\t') return '\\t'; | 447 if (x == '\t') return '\\t'; |
448 if (x == '\v') return '\\v'; | 448 if (x == '\v') return '\\v'; |
449 let val = x.charCodeAt(0) | 449 let val = x.charCodeAt(0); |
450 if (x < ' ') return '\\x' + (val - val % 16) / 16 + (val % 16); | 450 if (x < ' ') return '\\x' + (val - val % 16) / 16 + (val % 16); |
451 return x; | 451 return x; |
452 } | 452 } |
453 return [replace(x) for each (x in str)].join(''); | 453 |
454 let result = ""; | |
455 for (let char of str) | |
456 result += replace(char); | |
457 return result; | |
454 } | 458 } |
OLD | NEW |