Analyzer Frame patching cause exception on void non local returns

This commit is contained in:
Michael Bogdanov
2014-07-04 13:46:04 +04:00
parent 14788213a2
commit 48d92b9bbc
@@ -307,7 +307,26 @@ public class MethodInliner {
protected MethodNode markPlacesForInlineAndRemoveInlinable(@NotNull MethodNode node) {
node = prepareNode(node);
Analyzer<SourceValue> analyzer = new Analyzer<SourceValue>(new SourceInterpreter());
Analyzer<SourceValue> analyzer = new Analyzer<SourceValue>(new SourceInterpreter()) {
@NotNull
@Override
protected Frame<SourceValue> newFrame(
int nLocals, int nStack
) {
return new Frame<SourceValue>(nLocals, nStack) {
@Override
public void execute(
@NotNull AbstractInsnNode insn, Interpreter<SourceValue> interpreter
) throws AnalyzerException {
if (insn.getOpcode() == Opcodes.RETURN) {
//there is exception on void non local return in frame
return;
}
super.execute(insn, interpreter);
}
};
}
};
Frame<SourceValue>[] sources;
try {