From de6a5dd6dcf773e04a764348c05a01bc64b58a20 Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Thu, 25 Sep 2014 15:00:10 +0400 Subject: [PATCH] fix KT-5866. Moved classes into inlines package Also copy-pasted static-initializer of asm.Frame.OPCODES because it package-protected --- .../codegen/inline}/MaxLocalsCalculator.java | 7 +++++- .../MaxStackFrameSizeAndLocalsCalculator.java | 25 ++++++++++++++++--- 2 files changed, 27 insertions(+), 5 deletions(-) rename compiler/backend/src/org/jetbrains/{org/objectweb/asm => jet/codegen/inline}/MaxLocalsCalculator.java (90%) rename compiler/backend/src/org/jetbrains/{org/objectweb/asm => jet/codegen/inline}/MaxStackFrameSizeAndLocalsCalculator.java (93%) diff --git a/compiler/backend/src/org/jetbrains/org/objectweb/asm/MaxLocalsCalculator.java b/compiler/backend/src/org/jetbrains/jet/codegen/inline/MaxLocalsCalculator.java similarity index 90% rename from compiler/backend/src/org/jetbrains/org/objectweb/asm/MaxLocalsCalculator.java rename to compiler/backend/src/org/jetbrains/jet/codegen/inline/MaxLocalsCalculator.java index 95ab68c61f4..ce8ed920791 100644 --- a/compiler/backend/src/org/jetbrains/org/objectweb/asm/MaxLocalsCalculator.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/inline/MaxLocalsCalculator.java @@ -14,7 +14,12 @@ * limitations under the License. */ -package org.jetbrains.org.objectweb.asm; +package org.jetbrains.jet.codegen.inline; + +import org.jetbrains.org.objectweb.asm.Label; +import org.jetbrains.org.objectweb.asm.MethodVisitor; +import org.jetbrains.org.objectweb.asm.Opcodes; +import org.jetbrains.org.objectweb.asm.Type; public class MaxLocalsCalculator extends MethodVisitor { diff --git a/compiler/backend/src/org/jetbrains/org/objectweb/asm/MaxStackFrameSizeAndLocalsCalculator.java b/compiler/backend/src/org/jetbrains/jet/codegen/inline/MaxStackFrameSizeAndLocalsCalculator.java similarity index 93% rename from compiler/backend/src/org/jetbrains/org/objectweb/asm/MaxStackFrameSizeAndLocalsCalculator.java rename to compiler/backend/src/org/jetbrains/jet/codegen/inline/MaxStackFrameSizeAndLocalsCalculator.java index feb1cd0ae13..79ef518c0df 100644 --- a/compiler/backend/src/org/jetbrains/org/objectweb/asm/MaxStackFrameSizeAndLocalsCalculator.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/inline/MaxStackFrameSizeAndLocalsCalculator.java @@ -14,14 +14,31 @@ * limitations under the License. */ -package org.jetbrains.org.objectweb.asm; +package org.jetbrains.jet.codegen.inline; import com.intellij.openapi.util.Factory; import com.intellij.util.containers.ContainerUtil; +import org.jetbrains.org.objectweb.asm.*; import java.util.*; public class MaxStackFrameSizeAndLocalsCalculator extends MaxLocalsCalculator { + private static final int[] FRAME_SIZE_CHANGE_BY_OPCODE; + static { + // copy-pasted from org.jetbrains.org.objectweb.asm.Frame + int i; + int[] b = new int[202]; + String s = "EFFFFFFFFGGFFFGGFFFEEFGFGFEEEEEEEEEEEEEEEEEEEEDEDEDDDDD" + + "CDCDEEEEEEEEEEEEEEEEEEEEBABABBBBDCFFFGGGEDCDCDCDCDCDCDCDCD" + + "CDCEEEEDDDDDDDCDCDCEFEFDDEEFFDEDEEEBDDBBDDDDDDCCCCCCCCEFED" + + "DDCDCDEEEEEEEEEEFEEEEEEDDEEDDEE"; + for (i = 0; i < b.length; ++i) { + b[i] = s.charAt(i) - 'E'; + } + + FRAME_SIZE_CHANGE_BY_OPCODE = b; + } + private final LabelWrapper firstLabel; private LabelWrapper currentBlock; @@ -69,7 +86,7 @@ public class MaxStackFrameSizeAndLocalsCalculator extends MaxLocalsCalculator { @Override public void visitInsn(int opcode) { - increaseStackSize(Frame.SIZE[opcode]); + increaseStackSize(FRAME_SIZE_CHANGE_BY_OPCODE[opcode]); // if opcode == ATHROW or xRETURN, ends current block (no successor) if ((opcode >= Opcodes.IRETURN && opcode <= Opcodes.RETURN) || opcode == Opcodes.ATHROW) { @@ -92,7 +109,7 @@ public class MaxStackFrameSizeAndLocalsCalculator extends MaxLocalsCalculator { @Override public void visitVarInsn(int opcode, int var) { - increaseStackSize(Frame.SIZE[opcode]); + increaseStackSize(FRAME_SIZE_CHANGE_BY_OPCODE[opcode]); super.visitVarInsn(opcode, var); } @@ -173,7 +190,7 @@ public class MaxStackFrameSizeAndLocalsCalculator extends MaxLocalsCalculator { // updates current stack size (max stack size unchanged // because stack size variation always negative in this // case) - stackSize += Frame.SIZE[opcode]; + stackSize += FRAME_SIZE_CHANGE_BY_OPCODE[opcode]; addSuccessor(getLabelWrapper(label), stackSize); if (opcode == Opcodes.GOTO) {