Check that boxing instruction is simple call
like T.valueOf(unboxType(T)) #KT-6047 fixed
This commit is contained in:
committed by
Alexander Udalov
parent
34269e1a3e
commit
ec63394121
+6
-2
@@ -144,9 +144,13 @@ public class BoxingInterpreter extends OptimizationBasicInterpreter {
|
||||
private static boolean isBoxing(@NotNull AbstractInsnNode insn) {
|
||||
if (insn.getOpcode() != Opcodes.INVOKESTATIC) return false;
|
||||
|
||||
MethodInsnNode methodInsnNode = (MethodInsnNode) insn;
|
||||
MethodInsnNode node = (MethodInsnNode) insn;
|
||||
|
||||
return isWrapperClassName(methodInsnNode.owner) && "valueOf".equals(methodInsnNode.name);
|
||||
return isWrapperClassName(node.owner) && "valueOf".equals(node.name) &&
|
||||
Type.getMethodDescriptor(
|
||||
Type.getObjectType(node.owner),
|
||||
AsmUtil.unboxType(Type.getObjectType(node.owner))
|
||||
).equals(node.desc);
|
||||
}
|
||||
|
||||
private static boolean isNextMethodCallOfProgressionIterator(
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
fun checkLongAB5E(x: Long) = assertEquals(0xAB5EL, x)
|
||||
fun checkDouble1(y: Double) = assertEquals(1.0, y)
|
||||
fun checkByte10(z: Byte) = assertEquals(10.toByte(), z)
|
||||
|
||||
fun box(): String {
|
||||
val x = java.lang.Long.valueOf("AB5E", 16)
|
||||
checkLongAB5E(x)
|
||||
|
||||
val y = java.lang.Double.valueOf("1.0")
|
||||
checkDouble1(y)
|
||||
|
||||
val z = java.lang.Byte.valueOf("A", 16)
|
||||
checkByte10(z)
|
||||
|
||||
return "OK"
|
||||
}
|
||||
+6
@@ -181,6 +181,12 @@ public class BlackBoxWithStdlibCodegenTestGenerated extends AbstractBlackBoxCode
|
||||
doTestWithStdlib(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("kt6047.kt")
|
||||
public void testKt6047() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/boxingOptimization/kt6047.kt");
|
||||
doTestWithStdlib(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("nullCheck.kt")
|
||||
public void testNullCheck() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/boxingOptimization/nullCheck.kt");
|
||||
|
||||
Reference in New Issue
Block a user