Use type from compile time value for binary expression

This commit is contained in:
Natalia Ukhorskaya
2013-12-04 18:10:37 +04:00
parent 6331dd2308
commit 53a5264aaf
42 changed files with 685 additions and 42 deletions
@@ -0,0 +1,30 @@
fun fooInt(p: Int) = p
fun fooLong(p: Long) = p
fun fooByte(p: Byte) = p
fun fooShort(p: Short) = p
fun test() {
fooInt(1 - 1)
fooInt(1 - 1.toInt())
fooInt(1 - 1.toByte())
fooInt(<!TYPE_MISMATCH!>1 - 1.toLong()<!>)
fooInt(1 - 1.toShort())
fooByte(1 - 1)
fooByte(<!TYPE_MISMATCH!>1 - 1.toInt()<!>)
fooByte(<!TYPE_MISMATCH!>1 - 1.toByte()<!>)
fooByte(<!TYPE_MISMATCH!>1 - 1.toLong()<!>)
fooByte(<!TYPE_MISMATCH!>1 - 1.toShort()<!>)
fooLong(1 - 1)
fooLong(<!TYPE_MISMATCH!>1 - 1.toInt()<!>)
fooLong(<!TYPE_MISMATCH!>1 - 1.toByte()<!>)
fooLong(1 - 1.toLong())
fooLong(<!TYPE_MISMATCH!>1 - 1.toShort()<!>)
fooShort(1 - 1)
fooShort(<!TYPE_MISMATCH!>1 - 1.toInt()<!>)
fooShort(<!TYPE_MISMATCH!>1 - 1.toByte()<!>)
fooShort(<!TYPE_MISMATCH!>1 - 1.toLong()<!>)
fooShort(<!TYPE_MISMATCH!>1 - 1.toShort()<!>)
}
@@ -0,0 +1,36 @@
val p1 = 1 - 1
val p2 = 1 - 1.toLong()
val p3 = 1 - 1.toByte()
val p4 = 1 - 1.toInt()
val p5 = 1 - 1.toShort()
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(p3)
fooInt(p4)
fooInt(p5)
fooLong(<!TYPE_MISMATCH!>p1<!>)
fooLong(p2)
fooLong(<!TYPE_MISMATCH!>p3<!>)
fooLong(<!TYPE_MISMATCH!>p4<!>)
fooLong(<!TYPE_MISMATCH!>p5<!>)
fooShort(<!TYPE_MISMATCH!>p1<!>)
fooShort(<!TYPE_MISMATCH!>p2<!>)
fooShort(<!TYPE_MISMATCH!>p3<!>)
fooShort(<!TYPE_MISMATCH!>p4<!>)
fooShort(<!TYPE_MISMATCH!>p5<!>)
fooByte(<!TYPE_MISMATCH!>p1<!>)
fooByte(<!TYPE_MISMATCH!>p2<!>)
fooByte(<!TYPE_MISMATCH!>p3<!>)
fooByte(<!TYPE_MISMATCH!>p4<!>)
fooByte(<!TYPE_MISMATCH!>p5<!>)
}
@@ -0,0 +1,24 @@
val p1: Int = 1 - 1
val p2: Long = 1 - 1
val p3: Byte = 1 - 1
val p4: Short = 1 - 1
val l1: Long = 1 - 1.toLong()
val l2: Byte = <!TYPE_MISMATCH!>1 - 1.toLong()<!>
val l3: Int = <!TYPE_MISMATCH!>1 - 1.toLong()<!>
val l4: Short = <!TYPE_MISMATCH!>1 - 1.toLong()<!>
val b1: Byte = <!TYPE_MISMATCH!>1 - 1.toByte()<!>
val b2: Int = 1 - 1.toByte()
val b3: Long = <!TYPE_MISMATCH!>1 - 1.toByte()<!>
val b4: Short = <!TYPE_MISMATCH!>1 - 1.toByte()<!>
val i1: Byte = <!TYPE_MISMATCH!>1 - 1.toInt()<!>
val i2: Int = 1 - 1.toInt()
val i3: Long = <!TYPE_MISMATCH!>1 - 1.toInt()<!>
val i4: Short = <!TYPE_MISMATCH!>1 - 1.toInt()<!>
val s1: Byte = <!TYPE_MISMATCH!>1 - 1.toShort()<!>
val s2: Int = 1 - 1.toShort()
val s3: Long = <!TYPE_MISMATCH!>1 - 1.toShort()<!>
val s4: Short = <!TYPE_MISMATCH!>1 - 1.toShort()<!>
@@ -0,0 +1,26 @@
fun fooInt(p: Int) = p
fun fooLong(p: Long) = p
fun fooByte(p: Byte) = p
fun fooShort(p: Short) = p
fun test() {
fooInt(1 + 1)
fooByte(1 + 1)
fooLong(1 + 1)
fooShort(1 + 1)
fooInt(1 * 1)
fooByte(1 * 1)
fooLong(1 * 1)
fooShort(1 * 1)
fooInt(1 / 1)
fooByte(1 / 1)
fooLong(1 / 1)
fooShort(1 / 1)
fooInt(1 % 1)
fooByte(1 % 1)
fooLong(1 % 1)
fooShort(1 % 1)
}
@@ -0,0 +1,12 @@
val p1: Byte = (1 + 2) * 2
val p2: Short = (1 + 2) * 2
val p3: Int = (1 + 2) * 2
val p4: Long = (1 + 2) * 2
val b1: Byte = <!TYPE_MISMATCH!>(1.toByte() + 2) * 2<!>
val b2: Short = <!TYPE_MISMATCH!>(1.toShort() + 2) * 2<!>
val b3: Int = (1.toInt() + 2) * 2
val b4: Long = (1.toLong() + 2) * 2
val i1: Int = (1.toByte() + 2) * 2
val i2: Int = (1.toShort() + 2) * 2