Add i2b cast boxing Int to Byte? or Short? (fix android tests)

This commit is contained in:
Natalia Ukhorskaya
2013-12-16 20:04:16 +04:00
parent 66effee8cd
commit dbaaa80918
3 changed files with 13 additions and 4 deletions
@@ -160,12 +160,14 @@ public abstract class StackValue {
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) {
v.cast(type, Type.BYTE_TYPE);
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) {
v.cast(type, Type.SHORT_TYPE);
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.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) {
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) {
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");
}
@TestMetadata("nullableByteAndShort.kt")
public void testNullableByteAndShort() throws Exception {
doTest("compiler/testData/codegen/bytecodeText/constants/nullableByteAndShort.kt");
}
@TestMetadata("short.kt")
public void testShort() throws Exception {
doTest("compiler/testData/codegen/bytecodeText/constants/short.kt");