LEFT | RIGHT |
1 let global = this; | 1 let global = this; |
2 function decompileAST(ast) { | 2 function decompileAST(ast) { |
3 let func = global["decompile" + ast.type]; | 3 let func = global["decompile" + ast.type]; |
4 if (!func) | 4 if (!func) |
5 throw "Unknown type " + ast.type; | 5 throw "Unknown type " + ast.type; |
6 return func(ast); | 6 return func(ast); |
7 } | 7 } |
8 | 8 |
9 function decompileProgram(ast) { | 9 function decompileProgram(ast) { |
10 return ast.body.map(decompileAST).join('\n'); | 10 return ast.body.map(decompileAST).join('\n'); |
(...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
397 } | 397 } |
398 | 398 |
399 function decompileLiteral(ast) { | 399 function decompileLiteral(ast) { |
400 if (typeof ast.value == "string") | 400 if (typeof ast.value == "string") |
401 return '"' + sanitize(ast.value, '"') + '"'; | 401 return '"' + sanitize(ast.value, '"') + '"'; |
402 if (ast.value === null) | 402 if (ast.value === null) |
403 return "null"; | 403 return "null"; |
404 return ast.value; | 404 return ast.value; |
405 } | 405 } |
406 | 406 |
407 /* E4X */ | |
408 function decompileXMLDefaultDeclaration(ast) { | |
409 return "default xml namespace = " + decompileAST(ast.namespace) + ";"; | |
410 } | |
411 | |
412 function decompileXMLAnyName(ast) { | |
413 return "*"; | |
414 } | |
415 | |
416 function decompileXMLQualifiedIdentifier(ast) { | |
417 let str = decompileAST(ast.left) + "::"; | |
418 if (ast.computed) | |
419 str += "["; | |
420 str += decompileAST(ast.right); | |
421 if (ast.computed) | |
422 str += "]"; | |
423 return str; | |
424 } | |
425 | |
426 function decompileXMLFunctionQualifiedIdentifier(ast) { | |
427 let str = "function::"; | |
428 if (ast.computed) | |
429 str += "["; | |
430 str += decompileAST(ast.right); | |
431 if (ast.computed) | |
432 str += "]"; | |
433 return str; | |
434 } | |
435 | |
436 function decompileXMLAttributeSelector(ast) { | |
437 return "@" + decompileAST(ast.attribute); | |
438 } | |
439 | |
440 function decompileXMLFilterExpression(ast) { | |
441 return decompileAST(ast.left) + ".(" + decompileAST(ast.right) + ")"; | |
442 } | |
443 | |
444 function decompileXMLElement(ast) { | |
445 return ast.contents.map(decompileAST).join(''); | |
446 } | |
447 | |
448 function decompileXMLList(ast) { | |
449 return "<>" + ast.contents.map(decompileAST).join("") + "</>"; | |
450 } | |
451 | |
452 function decompileXMLEscape(ast) { | |
453 return "{" + decompileAST(ast.expression) + "}"; | |
454 } | |
455 | |
456 function decompileXMLText(ast) { | |
457 return ast.text; | |
458 } | |
459 | |
460 function tagJoin(strings) { | |
461 let str = strings[0]; | |
462 for (let i = 1; i < strings.length; i++) | |
463 str += (i % 2 ? ' ' : '=') + strings[i]; | |
464 return str; | |
465 } | |
466 | |
467 function decompileXMLStartTag(ast) { | |
468 return "<" + tagJoin(ast.contents.map(decompileAST)) + ">"; | |
469 } | |
470 | |
471 function decompileXMLEndTag(ast) { | |
472 return "</" + tagJoin(ast.contents.map(decompileAST)) + ">"; | |
473 } | |
474 | |
475 function decompileXMLPointTag(ast) { | |
476 return "<" + tagJoin(ast.contents.map(decompileAST)) + "/>"; | |
477 } | |
478 | |
479 function decompileXMLName(ast) { | |
480 if (typeof ast.contents == "string") | |
481 return ast.contents + " "; | |
482 return ast.contents.map(decompileAST).join(''); | |
483 } | |
484 | |
485 function decompileXMLAttribute(ast) { | |
486 return '"' + ast.value + '"'; | |
487 } | |
488 | |
489 function decompileXMLCdata(ast) { | |
490 return "<![CDATA[" + ast.contents + "]]>"; | |
491 } | |
492 | |
493 function decompileXMLComment(ast) { | |
494 return "<!--" + ast.comment + "-->"; | |
495 } | |
496 | |
497 function decompileXMLProcessingInstruction(ast) { | |
498 return "<?" + ast.target + (ast.contents ? " " + ast.contents : "") + "?>"; | |
499 } | |
500 | |
501 function process_js(ast) { | 407 function process_js(ast) { |
502 _print(decompileAST(ast)); | 408 _print(decompileAST(ast)); |
503 } | 409 } |
LEFT | RIGHT |