Skip to content

Commit e053c8c

Browse files
committed
MapleIR plugin is a go!
1 parent 6925d09 commit e053c8c

File tree

14 files changed

+263
-301
lines changed

14 files changed

+263
-301
lines changed

mapleir/src/IRDecompiler.java

Lines changed: 0 additions & 48 deletions
This file was deleted.

mapleir/src/MaplePlugin.java

Lines changed: 0 additions & 183 deletions
This file was deleted.

mapleir/src/ILDecompiler.java renamed to mapleir/src/org/mapleir/jda/ILDecompiler.java

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1+
package org.mapleir.jda;
2+
13
import club.bytecode.the.jda.FileContainer;
24
import club.bytecode.the.jda.decompilers.JDADecompiler;
5+
import org.mapleir.ir.algorithms.BoissinotDestructor;
36
import org.mapleir.ir.cfg.ControlFlowGraph;
47
import org.mapleir.ir.printer.ClassPrinter;
58
import org.mapleir.ir.printer.FieldNodePrinter;
@@ -16,20 +19,21 @@ public String decompileClassNode(FileContainer container, ClassNode cn) {
1619
TabbedStringWriter sw = new TabbedStringWriter();
1720
sw.setTabString(" ");
1821
IPropertyDictionary settings = PropertyHelper.createDictionary();
19-
// settings.put(new BooleanProperty(ASMPrinter.PROP_ACCESS_FLAG_SAFE, true));
20-
ClassPrinter cp = new ClassPrinter(sw, settings,
21-
new FieldNodePrinter(sw, settings),
22-
new MethodNodePrinter(sw, settings) {
23-
@Override
24-
protected ControlFlowGraph getCfg(MethodNode mn) {
25-
return MaplePlugin.cxt.getIRCache().getFor(mn);
26-
}
27-
28-
});
22+
final FieldNodePrinter fieldPrinter = new FieldNodePrinter(sw, settings);
23+
final MethodNodePrinter methodPrinter = new MethodNodePrinter(sw, settings) {
24+
@Override
25+
protected ControlFlowGraph getCfg(MethodNode mn) {
26+
ControlFlowGraph cfg = MaplePlugin.cxts.get(container).getIRCache().getFor(mn);
27+
BoissinotDestructor.leaveSSA(cfg);
28+
cfg.getLocals().realloc(cfg);
29+
return cfg;
30+
}
31+
};
32+
ClassPrinter cp = new ClassPrinter(sw, settings, fieldPrinter, methodPrinter);
2933
cp.print(cn);
3034
return sw.toString();
3135
}
32-
36+
3337
@Override
3438
public void decompileToZip(String zipName) {
3539

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package org.mapleir.jda;
2+
3+
import club.bytecode.the.jda.decompilers.bytecode.*;
4+
import org.mapleir.ir.algorithms.BoissinotDestructor;
5+
import org.mapleir.ir.cfg.ControlFlowGraph;
6+
import org.mapleir.ir.cfg.builder.ControlFlowGraphBuilder;
7+
import org.objectweb.asm.tree.ClassNode;
8+
import org.objectweb.asm.tree.MethodNode;
9+
10+
import java.util.ArrayList;
11+
import java.util.Arrays;
12+
import java.util.Iterator;
13+
14+
public class IRDecompiler extends BytecodeDecompiler {
15+
@Override
16+
protected MethodNodeDecompiler getMethodNodeDecompiler(PrefixedStringBuilder sb, ClassNode cn, Iterator<MethodNode> it) {
17+
return new IRMethodDecompiler(this, sb, it.next(), cn);
18+
}
19+
20+
@Override
21+
public void decompileToZip(String zipName) {
22+
}
23+
24+
@Override
25+
public String getName() {
26+
return "MapleIR";
27+
}
28+
}
29+
30+
class IRMethodDecompiler extends MethodNodeDecompiler {
31+
public IRMethodDecompiler(BytecodeDecompiler parent, PrefixedStringBuilder sb, MethodNode mn, ClassNode cn) {
32+
super(parent, sb, mn, cn);
33+
}
34+
35+
@Override
36+
protected InstructionPrinter getInstructionPrinter(MethodNode m, TypeAndName[] args) {
37+
return new IRInstructionPrinter(this, m, args);
38+
}
39+
}
40+
41+
class IRInstructionPrinter extends InstructionPrinter {
42+
public IRInstructionPrinter(MethodNodeDecompiler parent, MethodNode m, TypeAndName[] args) {
43+
super(parent, m, args);
44+
}
45+
46+
@Override
47+
public ArrayList<String> createPrint() {
48+
ControlFlowGraph cfg = ControlFlowGraphBuilder.build(mNode);
49+
BoissinotDestructor.leaveSSA(cfg);
50+
cfg.getLocals().realloc(cfg);
51+
String result = cfg.toString();
52+
return new ArrayList<>(Arrays.asList(result.split("\n")));
53+
}
54+
}

0 commit comments

Comments
 (0)