📄 jasmparser.java
字号:
instructionHandleList.add(ih);
labels++;
} else if (instrName.equals("ixor")) {
ih = instructions.append(new IXOR());
instructionHandleList.add(ih);
labels++;
} else if (instrName.equals("l2d")) {
ih = instructions.append(new L2D());
instructionHandleList.add(ih);
labels++;
} else if (instrName.equals("l2f")) {
ih = instructions.append(new L2F());
instructionHandleList.add(ih);
labels++;
} else if (instrName.equals("l2i")) {
ih = instructions.append(new L2I());
instructionHandleList.add(ih);
labels++;
} else if (instrName.equals("ladd")) {
ih = instructions.append(new LADD());
instructionHandleList.add(ih);
labels++;
} else if (instrName.equals("laload")) {
ih = instructions.append(new LALOAD());
instructionHandleList.add(ih);
labels++;
} else if (instrName.equals("land")) {
ih = instructions.append(new LAND());
instructionHandleList.add(ih);
labels++;
} else if (instrName.equals("lastore")) {
ih = instructions.append(new LASTORE());
instructionHandleList.add(ih);
labels++;
} else if (instrName.equals("lcmp")) {
ih = instructions.append(new LCMP());
instructionHandleList.add(ih);
labels++;
} else if (instrName.equals("lconst_0")) {
ih = instructions.append(new LCONST(0));
instructionHandleList.add(ih);
labels++;
} else if (instrName.equals("lconst_1")) {
ih = instructions.append(new LCONST(1));
instructionHandleList.add(ih);
labels++;
} else if (instrName.equals("ldiv")) {
ih = instructions.append(new LDIV());
instructionHandleList.add(ih);
labels++;
} else if (instrName.equals("lload_0")) {
ih = instructions.append(new LLOAD(0));
instructionHandleList.add(ih);
labels++;
} else if (instrName.equals("lload_1")) {
ih = instructions.append(new LLOAD(1));
instructionHandleList.add(ih);
labels++;
} else if (instrName.equals("lload_2")) {
ih = instructions.append(new LLOAD(2));
instructionHandleList.add(ih);
labels++;
} else if (instrName.equals("lload_3")) {
ih = instructions.append(new LLOAD(3));
instructionHandleList.add(ih);
labels++;
} else if (instrName.equals("lmul")) {
ih = instructions.append(new LMUL());
instructionHandleList.add(ih);
labels++;
} else if (instrName.equals("lneg")) {
ih = instructions.append(new LNEG());
instructionHandleList.add(ih);
labels++;
} else if (instrName.equals("lor")) {
ih = instructions.append(new LOR());
instructionHandleList.add(ih);
labels++;
} else if (instrName.equals("lrem")) {
ih = instructions.append(new LREM());
instructionHandleList.add(ih);
labels++;
} else if (instrName.equals("lreturn")) {
ih = instructions.append(new LRETURN());
instructionHandleList.add(ih);
labels++;
} else if (instrName.equals("lshl")) {
ih = instructions.append(new LSHL());
instructionHandleList.add(ih);
labels++;
} else if (instrName.equals("lshr")) {
ih = instructions.append(new LSHR());
instructionHandleList.add(ih);
labels++;
} else if (instrName.equals("lstore_0")) {
ih = instructions.append(new LSTORE(0));
instructionHandleList.add(ih);
labels++;
} else if (instrName.equals("lstore_1")) {
ih = instructions.append(new LSTORE(1));
instructionHandleList.add(ih);
labels++;
} else if (instrName.equals("lstore_2")) {
ih = instructions.append(new LSTORE(2));
instructionHandleList.add(ih);
labels++;
} else if (instrName.equals("lstore_3")) {
ih = instructions.append(new LSTORE(3));
instructionHandleList.add(ih);
labels++;
} else if (instrName.equals("lsub")) {
ih = instructions.append(new LSUB());
instructionHandleList.add(ih);
labels++;
} else if (instrName.equals("lushr")) {
ih = instructions.append(new LUSHR());
instructionHandleList.add(ih);
labels++;
} else if (instrName.equals("lxor")) {
ih = instructions.append(new LXOR());
instructionHandleList.add(ih);
labels++;
} else if (instrName.equals("monitorenter")) {
ih = instructions.append(new MONITORENTER());
instructionHandleList.add(ih);
labels++;
} else if (instrName.equals("monitorexit")) {
ih = instructions.append(new MONITOREXIT());
instructionHandleList.add(ih);
labels++;
} else if (instrName.equals("nop")) {
ih = instructions.append(new NOP());
instructionHandleList.add(ih);
labels++;
} else if (instrName.equals("pop")) {
ih = instructions.append(new POP());
instructionHandleList.add(ih);
labels++;
} else if (instrName.equals("pop2")) {
ih = instructions.append(new POP2());
instructionHandleList.add(ih);
labels++;
} else if (instrName.equals("return")) {
ih = instructions.append(new RETURN());
instructionHandleList.add(ih);
labels++;
} else if (instrName.equals("saload")) {
ih = instructions.append(new SALOAD());
instructionHandleList.add(ih);
labels++;
} else if (instrName.equals("sastore")) {
ih = instructions.append(new SASTORE());
instructionHandleList.add(ih);
labels++;
} else if (instrName.equals("swap")) {
ih = instructions.append(new SWAP());
instructionHandleList.add(ih);
labels++;
}
// Jump instructions
else if (instrName.equals("goto")) {
int arg = getJumpArg(instrElems, labels, codeLength);
ih = instructions.append(new GOTO(null));
instructionHandleList.add(ih);
branches.add(new BranchPair(labels, arg));
labels++;
} else if (instrName.equals("goto_w")) {
int arg = getJumpArg(instrElems, labels, codeLength);
ih = instructions.append(new GOTO_W(null));
instructionHandleList.add(ih);
branches.add(new BranchPair(labels, arg));
labels++;
} else if (instrName.equals("if_acmpeq")) {
int arg = getJumpArg(instrElems, labels, codeLength);
ih = instructions.append(new IF_ACMPEQ(null));
instructionHandleList.add(ih);
branches.add(new BranchPair(labels, arg));
labels++;
} else if (instrName.equals("if_acmpne")) {
int arg = getJumpArg(instrElems, labels, codeLength);
ih = instructions.append(new IF_ACMPNE(null));
instructionHandleList.add(ih);
branches.add(new BranchPair(labels, arg));
labels++;
} else if (instrName.equals("if_icmpeq")) {
int arg = getJumpArg(instrElems, labels, codeLength);
ih = instructions.append(new IF_ICMPEQ(null));
instructionHandleList.add(ih);
branches.add(new BranchPair(labels, arg));
labels++;
} else if (instrName.equals("if_icmpge")) {
int arg = getJumpArg(instrElems, labels, codeLength);
ih = instructions.append(new IF_ICMPGE(null));
instructionHandleList.add(ih);
branches.add(new BranchPair(labels, arg));
labels++;
} else if (instrName.equals("if_icmpgt")) {
int arg = getJumpArg(instrElems, labels, codeLength);
ih = instructions.append(new IF_ICMPGT(null));
instructionHandleList.add(ih);
branches.add(new BranchPair(labels, arg));
labels++;
} else if (instrName.equals("if_icmple")) {
int arg = getJumpArg(instrElems, labels, codeLength);
ih = instructions.append(new IF_ICMPLE(null));
instructionHandleList.add(ih);
branches.add(new BranchPair(labels, arg));
labels++;
} else if (instrName.equals("if_icmplt")) {
int arg = getJumpArg(instrElems, labels, codeLength);
ih = instructions.append(new IF_ICMPLT(null));
instructionHandleList.add(ih);
branches.add(new BranchPair(labels, arg));
labels++;
} else if (instrName.equals("if_icmpne")) {
int arg = getJumpArg(instrElems, labels, codeLength);
ih = instructions.append(new IF_ICMPNE(null));
instructionHandleList.add(ih);
branches.add(new BranchPair(labels, arg));
labels++;
} else if (instrName.equals("ifeq")) {
int arg = getJumpArg(instrElems, labels, codeLength);
ih = instructions.append(new IFEQ(null));
instructionHandleList.add(ih);
branches.add(new BranchPair(labels, arg));
labels++;
} else if (instrName.equals("ifge")) {
int arg = getJumpArg(instrElems, labels, codeLength);
ih = instructions.append(new IFGE(null));
instructionHandleList.add(ih);
branches.add(new BranchPair(labels, arg));
labels++;
} else if (instrName.equals("ifgt")) {
int arg = getJumpArg(instrElems, labels, codeLength);
;
ih = instructions.append(new IFGT(null));
instructionHandleList.add(ih);
branches.add(new BranchPair(labels, arg));
labels++;
} else if (instrName.equals("ifle")) {
int arg = getJumpArg(instrElems, labels, codeLength);
ih = instructions.append(new IFLE(null));
instructionHandleList.add(ih);
branches.add(new BranchPair(labels, arg));
labels++;
} else if (instrName.equals("iflt")) {
int arg = getJumpArg(instrElems, labels, codeLength);
ih = instructions.append(new IFLT(null));
instructionHandleList.add(ih);
branches.add(new BranchPair(labels, arg));
labels++;
} else if (instrName.equals("ifne")) {
int arg = getJumpArg(instrElems, labels, codeLength);
ih = instructions.append(new IFNE(null));
instructionHandleList.add(ih);
branches.add(new BranchPair(labels, arg));
labels++;
} else if (instrName.equals("ifnonnull")) {
int arg = getJumpArg(instrElems, labels, codeLength);
ih = instructions.append(new IFNONNULL(null));
instructionHandleList.add(ih);
branches.add(new BranchPair(labels, arg));
labels++;
} else if (instrName.equals("ifnull")) {
int arg = getJumpArg(instrElems, labels, codeLength);
ih = instructions.append(new IFNULL(null));
instructionHandleList.add(ih);
branches.add(new BranchPair(labels, arg));
labels++;
} else if (instrName.equals("jsr")) {
int arg = getJumpArg(instrElems, labels, codeLength);
ih = instructions.append(new JSR(null));
instructionHandleList.add(ih);
branches.add(new BranchPair(labels, arg));
labels++;
} else if (instrName.equals("jsr_w")) {
int arg = getJumpArg(instrElems, labels, codeLength);
ih = instructions.append(new JSR_W(null));
instructionHandleList.add(ih);
branches.add(new BranchPair(labels, arg));
labels++;
} else {
parseException.addError(JAsmParseException.SYNTAX_ERROR,
fullInstr, labels);
labels++;
}
}
}
if (parseException.errorCount() > 0) {
throw parseException;
}
for (int i = 0; i < lookupSwitches.size(); i++) {
TempSwitchData tsd = (TempSwitchData) lookupSwitches.get(i);
int targetArrSize = 0;
for (int j = 0; j < tsd.getBranchPairs().size(); j++) {
BranchPair bp = (BranchPair) tsd.getBranchPairs().get(j);
if (bp.source != -1) {
targetArrSize++;
}
}
int[] targets = new int[targetArrSize];
InstructionHandle[] targetInstrs = new InstructionHandle[targetArrSize];
int count = 0;
InstructionHandle defaultTarget = null;
for (int j = 0; j < tsd.getBranchPairs().size(); j++) {
BranchPair bp = (BranchPair) tsd.getBranchPairs().get(j);
if (bp.source != -1) {
targets[count] = bp.source;
targetInstrs[count] = (InstructionHandle) instructionHandleList
.get(bp.target - 1);
count++;
} else {
defaultTarget = (InstructionHandle) instructionHandleList
.get(bp.target - 1);
}
}
LOOKUPSWITCH lus = (LOOKUPSWITCH) tsd.ih.getInstruction();
lus.setMatchesTargets(targets, targetInstrs);
lus.setTarget(defaultTarget);
}
for (int i = 0; i < tableSwitches.size(); i++) {
TempSwitchData tsd = (TempSwitchData) tableSwitches.get(i);
int targetArrSize = 0;
for (int j = 0; j < tsd.getBranchPairs().size(); j++) {
BranchPair bp = (BranchPair) tsd.getBranchPairs().get(j);
if (bp.source != -1) {
targetArrSize++;
}
}
int[] targets = new int[targetArrSize];
InstructionHandle[] targetInstrs = new InstructionHandle[targetArrSize];
int count = 0;
InstructionHandle defaultTarget = null;
for (int j = 0; j < tsd.getBranchPairs().size(); j++) {
BranchPair bp = (BranchPair) tsd.getBranchPairs().get(j);
if (bp.source != -1) {
targets[count] = bp.source;
targetInstrs[count] = (InstructionHandle) instructionHandleList
.get(bp.target - 1);
count++;
} else {
defaultTarget = (InstructionHandle) instructionHandleList
.get(bp.target - 1);
}
}
TABLESWITCH ts = (TABLESWITCH) tsd.ih.getInstruction();
ts.setMatchesTargets(targets, targetInstrs);
ts.setTarget(defaultTarget);
}
for (int i = 0; i < branches.size(); i++) {
BranchPair bp = (BranchPair) branches.get(i);
ih = (InstructionHandle) instructionHandleList.get(bp.source);
if (ih.getInstruction() instanceof GotoInstruction) {
GotoInstruction jInst = (GotoInstruction) ih.getInstruction();
jInst.setTarget((InstructionHandle) instructionHandleList
.get(bp.target - 1));
} else {
IfInstruction jInst = (IfInstruction) ih.getInstruction();
jInst.setTarget((InstructionHandle) instructionHandleList
.get(bp.target - 1));
}
}
return instructions;
}
private boolean isDefaultLine(String arg) {
String[] args = arg.split(":");
if (args.length == 2 & args[0].trim().equals("default")) {
return true;
}
return false;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -