diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/inline/FieldRemapper.java b/compiler/backend/src/org/jetbrains/jet/codegen/inline/FieldRemapper.java index 66bfb4e1721..c3fa207f2fa 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/inline/FieldRemapper.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/inline/FieldRemapper.java @@ -83,10 +83,13 @@ public class FieldRemapper { insnNode.name = "$$$" + insnNode.name; insnNode.setOpcode(Opcodes.GETSTATIC); - for (int i = 0; i < currentInstruction; i++) { - AbstractInsnNode toRemove = capturedFieldAccess.get(i); - node.instructions.remove(toRemove); + AbstractInsnNode next = capturedFieldAccess.get(0); + while (next != insnNode) { + AbstractInsnNode toDelete = next; + next = next.getNext(); + node.instructions.remove(toDelete); } + transformed = capturedFieldAccess.get(capturedFieldAccess.size() - 1); } } diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/inline/MethodInliner.java b/compiler/backend/src/org/jetbrains/jet/codegen/inline/MethodInliner.java index bf93e1771a4..67a1ac5256e 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/inline/MethodInliner.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/inline/MethodInliner.java @@ -429,7 +429,11 @@ public class MethodInliner { List fieldAccessChain = new ArrayList(); fieldAccessChain.add(aload0); AbstractInsnNode next = aload0.getNext(); - while (next != null && next instanceof FieldInsnNode) { + while (next != null && next instanceof FieldInsnNode || next instanceof LabelNode) { + if (next instanceof LabelNode) { + next = next.getNext(); + continue; //it will be delete on transformation + } fieldAccessChain.add(next); if ("this$0".equals(((FieldInsnNode) next).name)) { next = next.getNext();