Assertion remove fix
This commit is contained in:
@@ -371,10 +371,23 @@ public class MethodInliner {
|
|||||||
MethodInsnNode methodInsnNode = (MethodInsnNode) next;
|
MethodInsnNode methodInsnNode = (MethodInsnNode) next;
|
||||||
if (methodInsnNode.name.equals("checkParameterIsNotNull") && methodInsnNode.owner.equals("jet/runtime/Intrinsics")) {
|
if (methodInsnNode.name.equals("checkParameterIsNotNull") && methodInsnNode.owner.equals("jet/runtime/Intrinsics")) {
|
||||||
AbstractInsnNode prev = cur.getPrevious();
|
AbstractInsnNode prev = cur.getPrevious();
|
||||||
assert prev.getType() == AbstractInsnNode.VAR_INSN && prev.getOpcode() == Opcodes.ALOAD;
|
boolean delete = false;
|
||||||
int varIndex = ((VarInsnNode) prev).var;
|
if (prev.getOpcode() == Opcodes.INVOKESTATIC) {
|
||||||
LambdaInfo closure = getLambda(varIndex);
|
//parameter boxing
|
||||||
if (closure != null) {
|
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(prev);
|
||||||
node.instructions.remove(cur);
|
node.instructions.remove(cur);
|
||||||
cur = next.getNext();
|
cur = next.getNext();
|
||||||
|
|||||||
Reference in New Issue
Block a user