Merge ConstantExpressionEvaluator and CompileTimeConstantResolver

This commit is contained in:
Natalia Ukhorskaya
2013-11-22 16:13:26 +04:00
parent e6923ba29e
commit d63f6843c8
55 changed files with 296 additions and 355 deletions
@@ -4,7 +4,7 @@ val zbyte : Byte? = 3
val zshort : Short? = 4
val zchar : Char? = 'c'
val zdouble : Double? = 1.0
val zfloat : Float? = 2.0
val zfloat : Float? = 2.0.toFloat()
fun box(): String {
return "OK"
@@ -1,6 +1,6 @@
object TestObject {
val testFloat: Float = 0.9999
val otherFloat: Float = 1.01
val testFloat: Float = 0.9999.toFloat()
val otherFloat: Float = 1.01.toFloat()
}
fun box(): String {
@@ -35,7 +35,7 @@ class Foo {
class object {
val i: Int = 2
val s: Short = 2
val f: Float = 2.0
val f: Float = 2.0.toFloat()
val d: Double = 2.0
val l: Long = 2
val b: Byte = 2
@@ -33,7 +33,7 @@ annotation class Ann(
val i: Int = 2
val s: Short = 2
val f: Float = 2.0
val f: Float = 2.0.toFloat()
val d: Double = 2.0
val l: Long = 2
val b: Byte = 2
@@ -27,4 +27,4 @@ fun box(): String {
return "OK"
}
Ann(1, 1, 1, 1.0, 1.0, 1, 'c', true) class MyClass
Ann(1, 1, 1, 1.0.toFloat(), 1.0, 1, 'c', true) class MyClass
@@ -69,7 +69,7 @@ fun box(): String {
list7.add(i)
if (list7.size() > 23) break
}
if (list7 != listOf<Float>(5.5, 5.0, 4.5, 4.0)) {
if (list7 != listOf<Float>(5.5.toFloat(), 5.0.toFloat(), 4.5.toFloat(), 4.0.toFloat())) {
return "Wrong elements for 5.5.toFloat() downTo 3.7.toFloat() step 0.5.toFloat(): $list7"
}
@@ -69,7 +69,7 @@ fun box(): String {
list7.add(i)
if (list7.size() > 23) break
}
if (list7 != listOf<Float>(4.0, 4.5, 5.0, 5.5)) {
if (list7 != listOf<Float>(4.0.toFloat(), 4.5.toFloat(), 5.0.toFloat(), 5.5.toFloat())) {
return "Wrong elements for 4.0.toFloat()..5.8.toFloat() step 0.5.toFloat(): $list7"
}
@@ -19,7 +19,7 @@ fun box(): String {
list2.add(i)
if (list2.size() > 23) break
}
if (list2 != listOf<Float>(0.0)) {
if (list2 != listOf<Float>(0.0.toFloat())) {
return "Wrong elements for 0.0.toFloat()..5.0.toFloat() step j.Float.POSITIVE_INFINITY: $list2"
}
@@ -39,7 +39,7 @@ fun box(): String {
list4.add(i)
if (list4.size() > 23) break
}
if (list4 != listOf<Float>(5.0)) {
if (list4 != listOf<Float>(5.0.toFloat())) {
return "Wrong elements for 5.0.toFloat() downTo 0.0.toFloat() step j.Float.POSITIVE_INFINITY: $list4"
}
@@ -69,7 +69,7 @@ fun box(): String {
list7.add(i)
if (list7.size() > 23) break
}
if (list7 != listOf<Float>(3.0, 4.0, 5.0)) {
if (list7 != listOf<Float>(3.0.toFloat(), 4.0.toFloat(), 5.0.toFloat())) {
return "Wrong elements for (5.0.toFloat() downTo 3.0.toFloat()).reversed(): $list7"
}
@@ -64,13 +64,13 @@ fun box(): String {
}
val list7 = ArrayList<Float>()
val range7 = (5.8.toFloat() downTo 4.0.toFloat() step 0.5).reversed()
val range7 = (5.8.toFloat() downTo 4.0.toFloat() step 0.5.toFloat()).reversed()
for (i in range7) {
list7.add(i)
if (list7.size() > 23) break
}
if (list7 != listOf<Float>(4.0, 4.5, 5.0, 5.5)) {
return "Wrong elements for (5.8.toFloat() downTo 4.0.toFloat() step 0.5).reversed(): $list7"
if (list7 != listOf<Float>(4.0.toFloat(), 4.5.toFloat(), 5.0.toFloat(), 5.5.toFloat())) {
return "Wrong elements for (5.8.toFloat() downTo 4.0.toFloat() step 0.5.toFloat()).reversed(): $list7"
}
return "OK"
@@ -69,7 +69,7 @@ fun box(): String {
list7.add(i)
if (list7.size() > 23) break
}
if (list7 != listOf<Float>(5.0, 4.0, 3.0)) {
if (list7 != listOf<Float>(5.0.toFloat(), 4.0.toFloat(), 3.0.toFloat())) {
return "Wrong elements for (3.0.toFloat()..5.0.toFloat()).reversed(): $list7"
}
@@ -64,13 +64,13 @@ fun box(): String {
}
val list7 = ArrayList<Float>()
val range7 = (4.0.toFloat()..6.0.toFloat() step 0.5).reversed()
val range7 = (4.0.toFloat()..6.0.toFloat() step 0.5.toFloat()).reversed()
for (i in range7) {
list7.add(i)
if (list7.size() > 23) break
}
if (list7 != listOf<Float>(6.0, 5.5, 5.0, 4.5, 4.0)) {
return "Wrong elements for (4.0.toFloat()..6.0.toFloat() step 0.5).reversed(): $list7"
if (list7 != listOf<Float>(6.0.toFloat(), 5.5.toFloat(), 5.0.toFloat(), 4.5.toFloat(), 4.0.toFloat())) {
return "Wrong elements for (4.0.toFloat()..6.0.toFloat() step 0.5.toFloat()).reversed(): $list7"
}
return "OK"
@@ -69,7 +69,7 @@ fun box(): String {
list7.add(i)
if (list7.size() > 23) break
}
if (list7 != listOf<Float>(9.0, 8.0, 7.0, 6.0, 5.0, 4.0, 3.0)) {
if (list7 != listOf<Float>(9.0.toFloat(), 8.0.toFloat(), 7.0.toFloat(), 6.0.toFloat(), 5.0.toFloat(), 4.0.toFloat(), 3.0.toFloat())) {
return "Wrong elements for 9.0.toFloat() downTo 3.0.toFloat(): $list7"
}
@@ -69,7 +69,7 @@ fun box(): String {
list7.add(i)
if (list7.size() > 23) break
}
if (list7 != listOf<Float>(3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0)) {
if (list7 != listOf<Float>(3.0.toFloat(), 4.0.toFloat(), 5.0.toFloat(), 6.0.toFloat(), 7.0.toFloat(), 8.0.toFloat(), 9.0.toFloat())) {
return "Wrong elements for 3.0.toFloat()..9.0.toFloat(): $list7"
}
@@ -69,7 +69,7 @@ fun box(): String {
list7.add(i)
if (list7.size() > 23) break
}
if (list7 != listOf<Float>(3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0)) {
if (list7 != listOf<Float>(3.0.toFloat(), 4.0.toFloat(), 5.0.toFloat(), 6.0.toFloat(), 7.0.toFloat(), 8.0.toFloat(), 9.0.toFloat())) {
return "Wrong elements for (1.5.toFloat() * 2.toFloat())..(3.0.toFloat() * 3.0.toFloat()): $list7"
}
@@ -69,7 +69,7 @@ fun box(): String {
list7.add(i)
if (list7.size() > 23) break
}
if (list7 != listOf<Float>(6.0, 5.5, 5.0, 4.5, 4.0)) {
if (list7 != listOf<Float>(6.0.toFloat(), 5.5.toFloat(), 5.0.toFloat(), 4.5.toFloat(), 4.0.toFloat())) {
return "Wrong elements for 6.0.toFloat() downTo 4.0.toFloat() step 0.5.toFloat(): $list7"
}
@@ -69,7 +69,7 @@ fun box(): String {
list7.add(i)
if (list7.size() > 23) break
}
if (list7 != listOf<Float>(4.0, 4.5, 5.0, 5.5, 6.0)) {
if (list7 != listOf<Float>(4.0.toFloat(), 4.5.toFloat(), 5.0.toFloat(), 5.5.toFloat(), 6.0.toFloat())) {
return "Wrong elements for 4.0.toFloat()..6.0.toFloat() step 0.5.toFloat(): $list7"
}
@@ -62,7 +62,7 @@ fun box(): String {
list7.add(i)
if (list7.size() > 23) break
}
if (list7 != listOf<Float>(5.5, 5.0, 4.5, 4.0)) {
if (list7 != listOf<Float>(5.5.toFloat(), 5.0.toFloat(), 4.5.toFloat(), 4.0.toFloat())) {
return "Wrong elements for 5.5.toFloat() downTo 3.7.toFloat() step 0.5.toFloat(): $list7"
}
@@ -62,7 +62,7 @@ fun box(): String {
list7.add(i)
if (list7.size() > 23) break
}
if (list7 != listOf<Float>(4.0, 4.5, 5.0, 5.5)) {
if (list7 != listOf<Float>(4.0.toFloat(), 4.5.toFloat(), 5.0.toFloat(), 5.5.toFloat())) {
return "Wrong elements for 4.0.toFloat()..5.8.toFloat() step 0.5.toFloat(): $list7"
}
@@ -17,7 +17,7 @@ fun box(): String {
list2.add(i)
if (list2.size() > 23) break
}
if (list2 != listOf<Float>(0.0)) {
if (list2 != listOf<Float>(0.0.toFloat())) {
return "Wrong elements for 0.0.toFloat()..5.0.toFloat() step j.Float.POSITIVE_INFINITY: $list2"
}
@@ -35,7 +35,7 @@ fun box(): String {
list4.add(i)
if (list4.size() > 23) break
}
if (list4 != listOf<Float>(5.0)) {
if (list4 != listOf<Float>(5.0.toFloat())) {
return "Wrong elements for 5.0.toFloat() downTo 0.0.toFloat() step j.Float.POSITIVE_INFINITY: $list4"
}
@@ -62,7 +62,7 @@ fun box(): String {
list7.add(i)
if (list7.size() > 23) break
}
if (list7 != listOf<Float>(3.0, 4.0, 5.0)) {
if (list7 != listOf<Float>(3.0.toFloat(), 4.0.toFloat(), 5.0.toFloat())) {
return "Wrong elements for (5.0.toFloat() downTo 3.0.toFloat()).reversed(): $list7"
}
@@ -58,12 +58,12 @@ fun box(): String {
}
val list7 = ArrayList<Float>()
for (i in (5.8.toFloat() downTo 4.0.toFloat() step 0.5).reversed()) {
for (i in (5.8.toFloat() downTo 4.0.toFloat() step 0.5.toFloat()).reversed()) {
list7.add(i)
if (list7.size() > 23) break
}
if (list7 != listOf<Float>(4.0, 4.5, 5.0, 5.5)) {
return "Wrong elements for (5.8.toFloat() downTo 4.0.toFloat() step 0.5).reversed(): $list7"
if (list7 != listOf<Float>(4.0.toFloat(), 4.5.toFloat(), 5.0.toFloat(), 5.5.toFloat())) {
return "Wrong elements for (5.8.toFloat() downTo 4.0.toFloat() step 0.5.toFloat()).reversed(): $list7"
}
return "OK"
@@ -62,7 +62,7 @@ fun box(): String {
list7.add(i)
if (list7.size() > 23) break
}
if (list7 != listOf<Float>(5.0, 4.0, 3.0)) {
if (list7 != listOf<Float>(5.0.toFloat(), 4.0.toFloat(), 3.0.toFloat())) {
return "Wrong elements for (3.0.toFloat()..5.0.toFloat()).reversed(): $list7"
}
@@ -58,12 +58,12 @@ fun box(): String {
}
val list7 = ArrayList<Float>()
for (i in (4.0.toFloat()..6.0.toFloat() step 0.5).reversed()) {
for (i in (4.0.toFloat()..6.0.toFloat() step 0.5.toFloat()).reversed()) {
list7.add(i)
if (list7.size() > 23) break
}
if (list7 != listOf<Float>(6.0, 5.5, 5.0, 4.5, 4.0)) {
return "Wrong elements for (4.0.toFloat()..6.0.toFloat() step 0.5).reversed(): $list7"
if (list7 != listOf<Float>(6.0.toFloat(), 5.5.toFloat(), 5.0.toFloat(), 4.5.toFloat(), 4.0.toFloat())) {
return "Wrong elements for (4.0.toFloat()..6.0.toFloat() step 0.5.toFloat()).reversed(): $list7"
}
return "OK"
@@ -62,7 +62,7 @@ fun box(): String {
list7.add(i)
if (list7.size() > 23) break
}
if (list7 != listOf<Float>(9.0, 8.0, 7.0, 6.0, 5.0, 4.0, 3.0)) {
if (list7 != listOf<Float>(9.0.toFloat(), 8.0.toFloat(), 7.0.toFloat(), 6.0.toFloat(), 5.0.toFloat(), 4.0.toFloat(), 3.0.toFloat())) {
return "Wrong elements for 9.0.toFloat() downTo 3.0.toFloat(): $list7"
}
@@ -62,7 +62,7 @@ fun box(): String {
list7.add(i)
if (list7.size() > 23) break
}
if (list7 != listOf<Float>(3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0)) {
if (list7 != listOf<Float>(3.0.toFloat(), 4.0.toFloat(), 5.0.toFloat(), 6.0.toFloat(), 7.0.toFloat(), 8.0.toFloat(), 9.0.toFloat())) {
return "Wrong elements for 3.0.toFloat()..9.0.toFloat(): $list7"
}
@@ -62,7 +62,7 @@ fun box(): String {
list7.add(i)
if (list7.size() > 23) break
}
if (list7 != listOf<Float>(3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0)) {
if (list7 != listOf<Float>(3.0.toFloat(), 4.0.toFloat(), 5.0.toFloat(), 6.0.toFloat(), 7.0.toFloat(), 8.0.toFloat(), 9.0.toFloat())) {
return "Wrong elements for (1.5.toFloat() * 2.toFloat())..(3.0.toFloat() * 3.0.toFloat()): $list7"
}
@@ -62,7 +62,7 @@ fun box(): String {
list7.add(i)
if (list7.size() > 23) break
}
if (list7 != listOf<Float>(6.0, 5.5, 5.0, 4.5, 4.0)) {
if (list7 != listOf<Float>(6.0.toFloat(), 5.5.toFloat(), 5.0.toFloat(), 4.5.toFloat(), 4.0.toFloat())) {
return "Wrong elements for 6.0.toFloat() downTo 4.0.toFloat() step 0.5.toFloat(): $list7"
}
@@ -62,7 +62,7 @@ fun box(): String {
list7.add(i)
if (list7.size() > 23) break
}
if (list7 != listOf<Float>(4.0, 4.5, 5.0, 5.5, 6.0)) {
if (list7 != listOf<Float>(4.0.toFloat(), 4.5.toFloat(), 5.0.toFloat(), 5.5.toFloat(), 6.0.toFloat())) {
return "Wrong elements for 4.0.toFloat()..6.0.toFloat() step 0.5.toFloat(): $list7"
}
@@ -15,7 +15,7 @@ class Test {
val vbyte: Byte = 11
val vlong: Long = 12
val vdouble: Double = 1.2
val vfloat: Float = 1.3
val vfloat: Float = 1.3.toFloat()
}
}
@@ -15,7 +15,7 @@ trait Test {
val vbyte: Byte = 11
val vlong: Long = 12
val vdouble: Double = 1.2
val vfloat: Float = 1.3
val vfloat: Float = 1.3.toFloat()
}
}
@@ -10,6 +10,8 @@ fun varargFloat(vararg v: Float) = v
fun varargDouble(vararg v: Double) = v
fun <T> testFun(<!UNUSED_PARAMETER!>p<!>: T) {}
fun test() {
1: Byte
1: Short
@@ -20,10 +22,10 @@ fun test() {
0b001: Int
0.1: Double
0.1: Float
0.1.toFloat(): Float
1e5: Double
1e-5: Float
1e-5.toFloat(): Float
<!CONSTANT_EXPECTED_TYPE_MISMATCH!>1<!>: Double
<!CONSTANT_EXPECTED_TYPE_MISMATCH!>1<!>: Float
@@ -39,6 +41,11 @@ fun test() {
varargShort(0x777, 1, 2, 3, <!CONSTANT_EXPECTED_TYPE_MISMATCH!>200000<!>, 0b111)
varargInt(0x77777777, <!CONSTANT_EXPECTED_TYPE_MISMATCH!>0x7777777777<!>, 1, 2, 3, 2000000000, 0b111)
varargLong(0x777777777777, 1, 2, 3, 200000, 0b111)
varargFloat(<!CONSTANT_EXPECTED_TYPE_MISMATCH!>1<!>, 1.0, <!TYPE_MISMATCH!>-0.1<!>, 1e4, 1e-4, <!TYPE_MISMATCH!>-1e4<!>)
varargFloat(<!CONSTANT_EXPECTED_TYPE_MISMATCH!>1<!>, <!CONSTANT_EXPECTED_TYPE_MISMATCH!>1.0<!>, <!TYPE_MISMATCH!>-0.1<!>, <!CONSTANT_EXPECTED_TYPE_MISMATCH!>1e4<!>, <!CONSTANT_EXPECTED_TYPE_MISMATCH!>1e-4<!>, <!TYPE_MISMATCH!>-1e4<!>)
varargDouble(<!CONSTANT_EXPECTED_TYPE_MISMATCH!>1<!>, 1.0, -0.1, 1e4, 1e-4, -1e4)
testFun(1.0)
testFun<Float>(<!CONSTANT_EXPECTED_TYPE_MISMATCH!>1.0<!>)
testFun(1.0.toFloat())
testFun<Float>(1.0.toFloat())
}
@@ -5,7 +5,7 @@ fun <T> id(t: T): T = t
fun <T> either(t1: T, <!UNUSED_PARAMETER!>t2<!>: T): T = t1
fun test() {
val <!UNUSED_VARIABLE!>a<!>: Float = id(2.0)
val <!UNUSED_VARIABLE!>a<!>: Float = id(2.0.toFloat())
val b = id(2.0)
b: Double
@@ -0,0 +1,28 @@
package test
// val prop1: 3.4028235E38.toFloat()
val prop1: Float = java.lang.Float.MAX_VALUE + 1
// val prop2: 3.4028234663852886E38.toDouble()
val prop2: Double = java.lang.Float.MAX_VALUE + 1.0
// val prop3: 3.4028235E38.toFloat()
val prop3 = java.lang.Float.MAX_VALUE + 1
// val prop4: 3.4028235E38.toFloat()
val prop4 = java.lang.Float.MAX_VALUE - 1
// val prop5: 3.4028235E38.toFloat()
val prop5: Int = java.lang.Float.MAX_VALUE + 1
// val prop6: 2.0.toFloat()
val prop6: Float = 1.0.toFloat() + 1
// val prop7: 2.0.toDouble()
val prop7: Double = 1.0 + 1.0
// val prop8: 2.0.toDouble()
val prop8: Float = 1.0.toDouble() + 1.0
// val prop9: -2.0.toDouble()
val prop9: Double = -2.0
+19
View File
@@ -0,0 +1,19 @@
package test
// _ prop1: 513105426295.toLong()
val prop1: Int = 0x7777777777
// _ prop2: 513105426295.toLong()
val prop2: Long = 0x7777777777
// _ prop3: 513105426295.toLong()
val prop3 = 0x7777777777
// _ prop4: -2147483648.toInt()
val prop4: Int = Integer.MAX_VALUE + 1
// _ prop5: -2147483648.toLong()
val prop5: Long = Integer.MAX_VALUE + 1
// _ prop6: -2147483648.toInt()
val prop6 = Integer.MAX_VALUE + 1
@@ -15,6 +15,6 @@ ByteAnno(42)
LongAnno(42)
CharAnno('A')
BooleanAnno(false)
FloatAnno(3.14)
FloatAnno(3.14.toFloat())
DoubleAnno(3.14)
class Class
@@ -10,6 +10,6 @@ annotation class Ann(
val b7: Char
)
Ann(-1, -1, -1, -1, -1.0, -1.0, -'c') class MyClass
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.toDouble(): jet.Double, b7 = -99.toInt(): jet.Int]
// 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]
@@ -10,6 +10,6 @@ annotation class Ann(
val b7: Char
)
Ann(+1, +1, +1, +1, +1.0, +1.0, +'c') class MyClass
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.toDouble(): jet.Double, b7 = 99.toInt(): jet.Int]
// 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]
@@ -2,11 +2,9 @@ package test
annotation class Ann(
val b1: Float,
val b2: Float,
val b3: Float,
val b4: Float
val b2: Float
)
Ann(1.0, 1.toFloat(), 1.0.toFloat()) class MyClass
Ann(1.toFloat(), 1.0.toFloat()) class MyClass
// EXPECTED: Ann[b1 = 1.0.toFloat(): jet.Float, b2 = 1.0.toFloat(): jet.Float, b3 = 1.0.toFloat(): jet.Float]
// EXPECTED: Ann[b1 = 1.0.toFloat(): jet.Float, b2 = 1.0.toFloat(): jet.Float]