Add i2b cast boxing Int to Byte? or Short? (fix android tests)
This commit is contained in:
@@ -160,12 +160,14 @@ public abstract class StackValue {
|
|||||||
|
|
||||||
private static void box(Type type, Type toType, InstructionAdapter v) {
|
private static void box(Type type, Type toType, InstructionAdapter v) {
|
||||||
if (type == Type.BYTE_TYPE || toType.getInternalName().equals(NULLABLE_BYTE_TYPE_NAME) && type == Type.INT_TYPE) {
|
if (type == Type.BYTE_TYPE || toType.getInternalName().equals(NULLABLE_BYTE_TYPE_NAME) && type == Type.INT_TYPE) {
|
||||||
|
v.cast(type, Type.BYTE_TYPE);
|
||||||
v.invokestatic(NULLABLE_BYTE_TYPE_NAME, "valueOf", "(B)L" + NULLABLE_BYTE_TYPE_NAME + ";");
|
v.invokestatic(NULLABLE_BYTE_TYPE_NAME, "valueOf", "(B)L" + NULLABLE_BYTE_TYPE_NAME + ";");
|
||||||
}
|
}
|
||||||
else if (type == Type.SHORT_TYPE || toType.getInternalName().equals(NULLABLE_SHORT_TYPE_NAME) && type == Type.INT_TYPE) {
|
else if (type == Type.SHORT_TYPE || toType.getInternalName().equals(NULLABLE_SHORT_TYPE_NAME) && type == Type.INT_TYPE) {
|
||||||
|
v.cast(type, Type.SHORT_TYPE);
|
||||||
v.invokestatic(NULLABLE_SHORT_TYPE_NAME, "valueOf", "(S)L" + NULLABLE_SHORT_TYPE_NAME + ";");
|
v.invokestatic(NULLABLE_SHORT_TYPE_NAME, "valueOf", "(S)L" + NULLABLE_SHORT_TYPE_NAME + ";");
|
||||||
}
|
}
|
||||||
else if (toType.getInternalName().equals(NULLABLE_LONG_TYPE_NAME) && type == Type.INT_TYPE) {
|
else if (type == Type.LONG_TYPE || toType.getInternalName().equals(NULLABLE_LONG_TYPE_NAME) && type == Type.INT_TYPE) {
|
||||||
v.cast(type, Type.LONG_TYPE);
|
v.cast(type, Type.LONG_TYPE);
|
||||||
v.invokestatic(NULLABLE_LONG_TYPE_NAME, "valueOf", "(J)L" + NULLABLE_LONG_TYPE_NAME +";");
|
v.invokestatic(NULLABLE_LONG_TYPE_NAME, "valueOf", "(J)L" + NULLABLE_LONG_TYPE_NAME +";");
|
||||||
}
|
}
|
||||||
@@ -178,9 +180,6 @@ public abstract class StackValue {
|
|||||||
else if (type == Type.CHAR_TYPE) {
|
else if (type == Type.CHAR_TYPE) {
|
||||||
v.invokestatic("java/lang/Character", "valueOf", "(C)Ljava/lang/Character;");
|
v.invokestatic("java/lang/Character", "valueOf", "(C)Ljava/lang/Character;");
|
||||||
}
|
}
|
||||||
else if (type == Type.LONG_TYPE) {
|
|
||||||
v.invokestatic("java/lang/Long", "valueOf", "(J)Ljava/lang/Long;");
|
|
||||||
}
|
|
||||||
else if (type == Type.FLOAT_TYPE) {
|
else if (type == Type.FLOAT_TYPE) {
|
||||||
v.invokestatic("java/lang/Float", "valueOf", "(F)Ljava/lang/Float;");
|
v.invokestatic("java/lang/Float", "valueOf", "(F)Ljava/lang/Float;");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
val a: Byte? = -1
|
||||||
|
val b: Short? = -1
|
||||||
|
|
||||||
|
// 1 I2B
|
||||||
|
// 1 I2S
|
||||||
@@ -113,6 +113,11 @@ public class BytecodeTextTestGenerated extends AbstractBytecodeTextTest {
|
|||||||
doTest("compiler/testData/codegen/bytecodeText/constants/byte.kt");
|
doTest("compiler/testData/codegen/bytecodeText/constants/byte.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("nullableByteAndShort.kt")
|
||||||
|
public void testNullableByteAndShort() throws Exception {
|
||||||
|
doTest("compiler/testData/codegen/bytecodeText/constants/nullableByteAndShort.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("short.kt")
|
@TestMetadata("short.kt")
|
||||||
public void testShort() throws Exception {
|
public void testShort() throws Exception {
|
||||||
doTest("compiler/testData/codegen/bytecodeText/constants/short.kt");
|
doTest("compiler/testData/codegen/bytecodeText/constants/short.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user