You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
1.2 KiB
37 lines
1.2 KiB
package jode;
|
|
import java.util.Vector;
|
|
import sun.tools.java.Identifier;
|
|
|
|
public class CombineCatchLocal implements Transformation{
|
|
|
|
static Identifier idException = Identifier.lookup("exception");
|
|
|
|
public InstructionHeader transform(InstructionHeader ih) {
|
|
CatchInstructionHeader catchIH;
|
|
LocalInfo local;
|
|
try {
|
|
catchIH = (CatchInstructionHeader)ih;
|
|
ih = ih.nextInstruction;
|
|
if (ih.getPredecessors().size() != 1)
|
|
return null;
|
|
Instruction instr = ih.getInstruction();
|
|
if (instr instanceof PopOperator) {
|
|
local = new LocalInfo(99);
|
|
local.setName(idException);
|
|
} else if (instr instanceof LocalStoreOperator) {
|
|
local = ((LocalStoreOperator) instr).getLocalInfo();
|
|
local.setName(idException);
|
|
} else
|
|
return null;
|
|
} catch (ClassCastException ex) {
|
|
return null;
|
|
} catch (NullPointerException ex) {
|
|
return null;
|
|
}
|
|
if (!catchIH.combineWithLocal(local))
|
|
return null;
|
|
if(Decompiler.isVerbose)
|
|
System.err.print("c");
|
|
return catchIH;
|
|
}
|
|
}
|
|
|