Assertion remove fix

This commit is contained in:
Mikhael Bogdanov
2014-01-29 17:06:52 +04:00
parent 074cebdaa6
commit 0ac53da2ed
@@ -371,10 +371,23 @@ public class MethodInliner {
MethodInsnNode methodInsnNode = (MethodInsnNode) next;
if (methodInsnNode.name.equals("checkParameterIsNotNull") && methodInsnNode.owner.equals("jet/runtime/Intrinsics")) {
AbstractInsnNode prev = cur.getPrevious();
assert prev.getType() == AbstractInsnNode.VAR_INSN && prev.getOpcode() == Opcodes.ALOAD;
int varIndex = ((VarInsnNode) prev).var;
LambdaInfo closure = getLambda(varIndex);
if (closure != null) {
boolean delete = false;
if (prev.getOpcode() == Opcodes.INVOKESTATIC) {
//parameter boxing
AbstractInsnNode prePrevious = cur.getPrevious();
if (prePrevious.getType() == AbstractInsnNode.VAR_INSN &&
prePrevious.getOpcode() < Opcodes.ALOAD &&
prePrevious.getOpcode() >= Opcodes.ILOAD) {
delete = true;
node.instructions.remove(prePrevious);
}
} else {
assert prev.getType() == AbstractInsnNode.VAR_INSN && prev.getOpcode() == Opcodes.ALOAD;
int varIndex = ((VarInsnNode) prev).var;
LambdaInfo closure = getLambda(varIndex);
delete = closure != null;
}
if (delete) {
node.instructions.remove(prev);
node.instructions.remove(cur);
cur = next.getNext();