Use type from compile time value for prefix expression

This commit is contained in:
Natalia Ukhorskaya
2013-12-02 15:01:32 +04:00
parent 9c176ddaa8
commit 2a023c16a9
49 changed files with 805 additions and 140 deletions
@@ -0,0 +1,34 @@
fun fooInt(p: Int) = p
fun fooLong(p: Long) = p
fun fooByte(p: Byte) = p
fun fooShort(p: Short) = p
fun test() {
fooInt(-1)
fooInt(<!TYPE_MISMATCH!>-1111111111111111111<!>)
fooInt(-1.toInt())
fooInt(<!TYPE_MISMATCH!>-1.toByte()<!>)
fooInt(<!TYPE_MISMATCH!>-1.toLong()<!>)
fooInt(<!TYPE_MISMATCH!>-1.toShort()<!>)
fooByte(-1)
fooByte(<!TYPE_MISMATCH!>-1111111111111111111<!>)
fooByte(<!TYPE_MISMATCH!>-1.toInt()<!>)
fooByte(-1.toByte())
fooByte(<!TYPE_MISMATCH!>-1.toLong()<!>)
fooByte(<!TYPE_MISMATCH!>-1.toShort()<!>)
fooLong(-1)
fooLong(-1111111111111111111)
fooLong(<!TYPE_MISMATCH!>-1.toInt()<!>)
fooLong(<!TYPE_MISMATCH!>-1.toByte()<!>)
fooLong(-1.toLong())
fooLong(<!TYPE_MISMATCH!>-1.toShort()<!>)
fooShort(-1)
fooShort(<!TYPE_MISMATCH!>-1111111111111111111<!>)
fooShort(<!TYPE_MISMATCH!>-1.toInt()<!>)
fooShort(<!TYPE_MISMATCH!>-1.toByte()<!>)
fooShort(<!TYPE_MISMATCH!>-1.toLong()<!>)
fooShort(-1.toShort())
}
@@ -0,0 +1,41 @@
val p1 = -1
val p2 = -1.toLong()
val p3 = -1.toByte()
val p4 = -1.toInt()
val p5 = -1.toShort()
val p6 = -1111111111111111111
fun fooInt(p: Int) = p
fun fooLong(p: Long) = p
fun fooByte(p: Byte) = p
fun fooShort(p: Short) = p
fun test() {
fooInt(p1)
fooInt(<!TYPE_MISMATCH!>p2<!>)
fooInt(<!TYPE_MISMATCH!>p3<!>)
fooInt(p4)
fooInt(<!TYPE_MISMATCH!>p5<!>)
fooInt(<!TYPE_MISMATCH!>p6<!>)
fooLong(<!TYPE_MISMATCH!>p1<!>)
fooLong(p2)
fooLong(<!TYPE_MISMATCH!>p3<!>)
fooLong(<!TYPE_MISMATCH!>p4<!>)
fooLong(<!TYPE_MISMATCH!>p5<!>)
fooLong(p6)
fooShort(<!TYPE_MISMATCH!>p1<!>)
fooShort(<!TYPE_MISMATCH!>p2<!>)
fooShort(<!TYPE_MISMATCH!>p3<!>)
fooShort(<!TYPE_MISMATCH!>p4<!>)
fooShort(p5)
fooShort(<!TYPE_MISMATCH!>p6<!>)
fooByte(<!TYPE_MISMATCH!>p1<!>)
fooByte(<!TYPE_MISMATCH!>p2<!>)
fooByte(p3)
fooByte(<!TYPE_MISMATCH!>p4<!>)
fooByte(<!TYPE_MISMATCH!>p5<!>)
fooByte(<!TYPE_MISMATCH!>p6<!>)
}
@@ -0,0 +1,29 @@
val p1: Int = -1
val p2: Long = -1
val p3: Byte = -1
val p4: Short = -1
val lp1: Int = <!TYPE_MISMATCH!>-1111111111111111111<!>
val lp2: Long = -1111111111111111111
val lp3: Byte = <!TYPE_MISMATCH!>-1111111111111111111<!>
val lp4: Short = <!TYPE_MISMATCH!>-1111111111111111111<!>
val l1: Long = -1.toLong()
val l2: Byte = <!TYPE_MISMATCH!>-1.toLong()<!>
val l3: Int = <!TYPE_MISMATCH!>-1.toLong()<!>
val l4: Short = <!TYPE_MISMATCH!>-1.toLong()<!>
val b1: Byte = -1.toByte()
val b2: Int = <!TYPE_MISMATCH!>-1.toByte()<!>
val b3: Long = <!TYPE_MISMATCH!>-1.toByte()<!>
val b4: Short = <!TYPE_MISMATCH!>-1.toByte()<!>
val i1: Byte = <!TYPE_MISMATCH!>-1.toInt()<!>
val i2: Int = -1.toInt()
val i3: Long = <!TYPE_MISMATCH!>-1.toInt()<!>
val i4: Short = <!TYPE_MISMATCH!>-1.toInt()<!>
val s1: Byte = <!TYPE_MISMATCH!>-1.toShort()<!>
val s2: Int = <!TYPE_MISMATCH!>-1.toShort()<!>
val s3: Long = <!TYPE_MISMATCH!>-1.toShort()<!>
val s4: Short = -1.toShort()
@@ -0,0 +1,19 @@
package test
// val prop1: false
val prop1 = 1 > 2
// val prop2: true
val prop2 = 1 < 2
// val prop3: true
val prop3 = 1 <= 2
// val prop4: false
val prop4 = 1 >= 2
// val prop5: -1.toInt()
val prop5 = 1.compareTo(2)
// val prop6: false
val prop6 = 1.compareTo(2) > 0
@@ -0,0 +1,4 @@
package test
// val prop4: true
val prop4 = !1.equals(2)
@@ -0,0 +1,10 @@
package test
// val prop1: 513105426295.toLong()
val prop1: Int = 0x7777777777
// val prop2: 513105426295.toLong()
val prop2: Long = 0x7777777777
// val prop3: IntegerValueType(513105426295)
val prop3 = 0x7777777777
@@ -24,3 +24,9 @@ val prop6 = "${1.0}"
// val prop7: null
val prop7 = "${javaClass<Int>()}"
// val prop8: "a1.0"
val prop8 = "a${1.toDouble()}"
// val prop9: "ab"
val prop9 = "a" + "b"
@@ -0,0 +1,16 @@
package test
// val p1: IntegerValueType(-1)
val p1 = -1
// val p2: -1.toLong()
val p2 = -1.toLong()
// val p3: -1.toByte()
val p3 = -1.toByte()
// val p4: -1.toInt()
val p4 = -1.toInt()
// val p5: -1.toShort()
val p5 = -1.toShort()
@@ -0,0 +1,63 @@
package test
// val p1: -1.toInt()
val p1: Int = -1
// val p2: -1.toLong()
val p2: Long = -1
// val p3: -1.toByte()
val p3: Byte = -1
// val p4: -1.toShort()
val p4: Short = -1
// val l1: -1.toLong()
val l1: Long = -1.toLong()
// val l2: -1.toLong()
val l2: Byte = -1.toLong()
// val l3: -1.toLong()
val l3: Int = -1.toLong()
// val l4: -1.toLong()
val l4: Short = -1.toLong()
// val b1: -1.toByte()
val b1: Byte = -1.toByte()
// val b2: -1.toByte()
val b2: Int = -1.toByte()
// val b3: -1.toByte()
val b3: Long = -1.toByte()
// val b4: -1.toByte()
val b4: Short = -1.toByte()
// val i1: -1.toInt()
val i1: Byte = -1.toInt()
// val i2: -1.toInt()
val i2: Int = -1.toInt()
// val i3: -1.toInt()
val i3: Long = -1.toInt()
// val i4: -1.toInt()
val i4: Short = -1.toInt()
// val s1: -1.toShort()
val s1: Byte = -1.toShort()
// val s2: -1.toShort()
val s2: Int = -1.toShort()
// val s3: -1.toShort()
val s3: Long = -1.toShort()
// val s4: -1.toShort()
val s4: Short = -1.toShort()
-19
View File
@@ -1,19 +0,0 @@
package test
// val prop1: 513105426295.toLong()
val prop1: Int = 0x7777777777
// val prop2: 513105426295.toLong()
val prop2: Long = 0x7777777777
// val prop3: 513105426295.toLong()
val prop3 = 0x7777777777
// val prop4: -2147483648.toInt()
val prop4: Int = Integer.MAX_VALUE + 1
// val prop5: -2147483648.toLong()
val prop5: Long = Integer.MAX_VALUE + 1
// val prop6: -2147483648.toInt()
val prop6 = Integer.MAX_VALUE + 1
@@ -0,0 +1,9 @@
package test
enum class MyEnum { A }
// val prop1: true
val prop1 = MyEnum.A
// val prop2: null
val prop2 = javaClass<MyEnum>()
@@ -0,0 +1,13 @@
package test
// val prop1: null
val prop1 = 1.toLong() + 1
// val prop2: null
val prop2 = -1.toInt()
// val prop3: null
val prop3 = 1 + 1.toByte()
// val prop4: null
val prop4 = 1 + 1.toShort() + 1
@@ -0,0 +1,16 @@
package test
// val prop1: true
val prop1 = ""
// val prop2: true
val prop2 = "a"
// val prop3: true
val prop3 = "\"a\""
// val prop5: true
val prop5 = "a${1 + 1}"
// val prop6: true
val prop6 = "a" + "b"
@@ -0,0 +1,22 @@
package test
// val prop1: null
val prop1 = 1.toLong()
// val prop2: null
val prop2 = 1.toInt()
// val prop3: null
val prop3 = 1.toByte()
// val prop4: null
val prop4 = 1.toShort()
// val prop5: null
val prop5 = 1.toChar()
// val prop6: null
val prop6 = 1.toDouble()
// val prop7: null
val prop7 = 1.toFloat()
@@ -0,0 +1,16 @@
package test
// val p1: true
val p1 = -1
// val p2: null
val p2 = -1.toLong()
// val p3: null
val p3 = -1.toByte()
// val p4: null
val p4 = -1.toInt()
// val p5: null
val p5 = -1.toShort()
@@ -0,0 +1,63 @@
package test
// val p1: true
val p1: Int = -1
// val p2: true
val p2: Long = -1
// val p3: true
val p3: Byte = -1
// val p4: true
val p4: Short = -1
// val l1: null
val l1: Long = -1.toLong()
// val l2: null
val l2: Byte = -1.toLong()
// val l3: null
val l3: Int = -1.toLong()
// val l4: null
val l4: Short = -1.toLong()
// val b1: null
val b1: Byte = -1.toByte()
// val b2: null
val b2: Int = -1.toByte()
// val b3: null
val b3: Long = -1.toByte()
// val b4: null
val b4: Short = -1.toByte()
// val i1: null
val i1: Byte = -1.toInt()
// val i2: null
val i2: Int = -1.toInt()
// val i3: null
val i3: Long = -1.toInt()
// val i4: null
val i4: Short = -1.toInt()
// val s1: null
val s1: Byte = -1.toShort()
// val s2: null
val s2: Int = -1.toShort()
// val s3: null
val s3: Long = -1.toShort()
// val s4: null
val s4: Short = -1.toShort()
@@ -7,7 +7,7 @@ internal final annotation class A : jet.Annotation {
internal final val c: jet.String
}
test.A(a = 12.toInt(): jet.Int, c = "Hello": jet.String) internal object SomeObject {
test.A(a = IntegerValueType(12): IntegerValueType(12), c = "Hello": jet.String) internal object SomeObject {
/*primary*/ private constructor SomeObject()
public class object <class-object-for-SomeObject> : test.SomeObject {
@@ -6,7 +6,7 @@ internal final annotation class BadAnnotation : jet.Annotation {
/*primary*/ public constructor BadAnnotation(/*0*/ s: jet.String)
}
test.BadAnnotation(s = 1.toInt(): jet.Int) internal object SomeObject {
test.BadAnnotation(s = IntegerValueType(1): IntegerValueType(1)) internal object SomeObject {
/*primary*/ private constructor SomeObject()
public class object <class-object-for-SomeObject> : test.SomeObject {
@@ -18,7 +18,7 @@ internal final annotation class CharAnno : jet.Annotation {
internal final fun <get-value>(): jet.Char
}
test.IntAnno(value = 42.toInt(): jet.Int) test.ShortAnno(value = 42.toShort(): jet.Short) test.ByteAnno(value = 42.toByte(): jet.Byte) test.LongAnno(value = 42.toLong(): jet.Long) test.CharAnno(value = #65(A): jet.Char) test.BooleanAnno(value = false: jet.Boolean) test.FloatAnno(value = 3.14.toFloat(): jet.Float) test.DoubleAnno(value = 3.14.toDouble(): jet.Double) internal final class Class {
test.IntAnno(value = IntegerValueType(42): IntegerValueType(42)) test.ShortAnno(value = IntegerValueType(42): IntegerValueType(42)) test.ByteAnno(value = IntegerValueType(42): IntegerValueType(42)) test.LongAnno(value = IntegerValueType(42): IntegerValueType(42)) test.CharAnno(value = #65(A): jet.Char) test.BooleanAnno(value = false: jet.Boolean) test.FloatAnno(value = 3.14.toFloat(): jet.Float) test.DoubleAnno(value = 3.14.toDouble(): jet.Double) internal final class Class {
/*primary*/ public constructor Class()
}
@@ -10,6 +10,6 @@ internal final annotation class Anno : jet.Annotation {
internal final fun <get-string>(): jet.String
}
test.Anno(double = 3.14.toDouble(): jet.Double, int = 42.toInt(): jet.Int, string = "OK": jet.String) internal final class Class {
test.Anno(double = 3.14.toDouble(): jet.Double, int = IntegerValueType(42): IntegerValueType(42), string = "OK": jet.String) internal final class Class {
/*primary*/ public constructor Class()
}
@@ -9,4 +9,4 @@ annotation class Ann(
Ann(1, 1.toByte(), 128.toByte(), 128) class MyClass
// EXPECTED: Ann[b1 = 1.toByte(): jet.Byte, b2 = 1.toByte(): jet.Byte, b3 = -128.toByte(): jet.Byte, b4 = 128.toInt(): jet.Int]
// EXPECTED: Ann[b1 = IntegerValueType(1): IntegerValueType(1), b2 = 1.toByte(): jet.Byte, b3 = -128.toByte(): jet.Byte, b4 = IntegerValueType(128): IntegerValueType(128)]
@@ -1,7 +1,7 @@
package test
annotation class Ann(i: Int)
annotation class Ann(i: Double)
Ann(@A 1) class MyClass
Ann(@A 1.0) class MyClass
// EXPECTED: Ann[i = 1.toInt(): jet.Int]
// EXPECTED: Ann[i = 1.0.toDouble(): jet.Double]
@@ -16,4 +16,4 @@ Ann(
p5 = 1.toByte() + 1.toByte()
) class MyClass
// EXPECTED: Ann[p1 = 128.toInt(): jet.Int, p2 = 2.toByte(): jet.Byte, p3 = 128.toInt(): jet.Int, p4 = 2.toInt(): jet.Int, p5 = 2.toByte(): jet.Byte]
// EXPECTED: Ann[p1 = 128.toInt(): jet.Int, p2 = 2.toByte(): jet.Byte, p3 = 128.toInt(): jet.Int, p4 = 2.toInt(): jet.Int, p5 = 2.toInt(): jet.Int]
@@ -16,4 +16,4 @@ Ann(
p5 = 1.toInt() + 1.toInt()
) class MyClass
// EXPECTED: Ann[p1 = -2147483648.toInt(): jet.Int, p2 = 2.toInt(): jet.Int, p3 = -2147483648.toLong(): jet.Long, p4 = 2.toLong(): jet.Long, p5 = 2.toInt(): jet.Int]
// EXPECTED: Ann[p1 = -2147483648.toInt(): jet.Int, p2 = 2.toInt(): jet.Int, p3 = -2147483648.toLong(): jet.Long, p4 = 2.toInt(): jet.Int, p5 = 2.toInt(): jet.Int]
@@ -12,4 +12,4 @@ annotation class Ann(
Ann(-1, -1, -1, -1, -1.0, -1.0.toFloat(), -'c') class MyClass
// EXPECTED: Ann[b1 = -1.toByte(): jet.Byte, b2 = -1.toShort(): jet.Short, b3 = -1.toInt(): jet.Int, b4 = -1.toLong(): jet.Long, b5 = -1.0.toDouble(): jet.Double, b6 = -1.0.toFloat(): jet.Float, b7 = -99.toInt(): jet.Int]
// EXPECTED: Ann[b1 = IntegerValueType(-1): IntegerValueType(-1), b2 = IntegerValueType(-1): IntegerValueType(-1), b3 = IntegerValueType(-1): IntegerValueType(-1), b4 = IntegerValueType(-1): IntegerValueType(-1), b5 = -1.0.toDouble(): jet.Double, b6 = -1.0.toFloat(): jet.Float, b7 = IntegerValueType(-99): IntegerValueType(-99)]
@@ -12,4 +12,4 @@ annotation class Ann(
Ann(+1, +1, +1, +1, +1.0, +1.0.toFloat(), +'c') class MyClass
// EXPECTED: Ann[b1 = 1.toByte(): jet.Byte, b2 = 1.toShort(): jet.Short, b3 = 1.toInt(): jet.Int, b4 = 1.toLong(): jet.Long, b5 = 1.0.toDouble(): jet.Double, b6 = 1.0.toFloat(): jet.Float, b7 = 99.toInt(): jet.Int]
// EXPECTED: Ann[b1 = IntegerValueType(1): IntegerValueType(1), b2 = IntegerValueType(1): IntegerValueType(1), b3 = IntegerValueType(1): IntegerValueType(1), b4 = IntegerValueType(1): IntegerValueType(1), b5 = 1.0.toDouble(): jet.Double, b6 = 1.0.toFloat(): jet.Float, b7 = IntegerValueType(99): IntegerValueType(99)]
@@ -9,4 +9,4 @@ annotation class Ann(
Ann(1, 1.toInt(), 2147483648.toInt(), 2147483648) class MyClass
// EXPECTED: Ann[b1 = 1.toInt(): jet.Int, b2 = 1.toInt(): jet.Int, b3 = -2147483648.toInt(): jet.Int, b4 = 2147483648.toLong(): jet.Long]
// EXPECTED: Ann[b1 = IntegerValueType(1): IntegerValueType(1), b2 = 1.toInt(): jet.Int, b3 = -2147483648.toInt(): jet.Int, b4 = IntegerValueType(2147483648): IntegerValueType(2147483648)]
@@ -7,4 +7,4 @@ annotation class Ann(
Ann(1, 1.toLong()) class MyClass
// EXPECTED: Ann[b1 = 1.toLong(): jet.Long, b2 = 1.toLong(): jet.Long]
// EXPECTED: Ann[b1 = IntegerValueType(1): IntegerValueType(1), b2 = 1.toLong(): jet.Long]
@@ -9,4 +9,4 @@ annotation class Ann(
Ann(1, 1.toShort(), 32768.toShort(), 32768) class MyClass
// EXPECTED: Ann[b1 = 1.toShort(): jet.Short, b2 = 1.toShort(): jet.Short, b3 = -32768.toShort(): jet.Short, b4 = 32768.toInt(): jet.Int]
// EXPECTED: Ann[b1 = IntegerValueType(1): IntegerValueType(1), b2 = 1.toShort(): jet.Short, b3 = -32768.toShort(): jet.Short, b4 = IntegerValueType(32768): IntegerValueType(32768)]