AA: introduce KtConstantEvaluationMode

This commit is contained in:
Jinseong Jeon
2022-03-10 00:16:14 -08:00
committed by Ilya Kirillov
parent ee23a52e54
commit 606033e1e6
58 changed files with 350 additions and 63 deletions
@@ -0,0 +1,3 @@
fun box(msg: String): String {
return <expr>"message" + msg</expr>
}
@@ -0,0 +1,3 @@
expression: "message" + msg
constant: NOT_EVALUATED
constantValueKind: NOT_EVALUATED
@@ -0,0 +1,8 @@
class Test {
const val bar : Int = 42
}
fun box() {
val t = Test()
t.<expr>bar</expr>
}
@@ -0,0 +1,3 @@
expression: bar
constant: 42
constantValueKind: Int
@@ -0,0 +1,8 @@
class Test {
val bar : Int = 42
}
fun box() {
val t = Test()
t.<expr>bar</expr>
}
@@ -0,0 +1,3 @@
expression: bar
constant: 42
constantValueKind: Int
@@ -0,0 +1,8 @@
class Test {
var bar : Int = 42
}
fun box() {
val t = Test()
t.<expr>bar</expr>
}
@@ -0,0 +1,3 @@
expression: bar
constant: NOT_EVALUATED
constantValueKind: NOT_EVALUATED
@@ -0,0 +1,11 @@
package prop.`in`.`companion`
class Test {
fun test() {
val x = <expr>someField</expr>
}
companion object {
// effectively constant
val someField = "something"
}
}
@@ -0,0 +1,3 @@
expression: someField
constant: "something"
constantValueKind: String
@@ -0,0 +1,12 @@
package prop.`in`.`companion`.indirect
class Test {
fun test() {
val x = <expr>indirectPointer</expr>
}
companion object {
// effectively constant
val someField = "something"
val indirectPointer = someField
}
}
@@ -0,0 +1,3 @@
expression: indirectPointer
constant: "something"
constantValueKind: String
@@ -0,0 +1,13 @@
package prop.`in`.`companion`.indirect.twice
class Test {
fun test() {
val x = <expr>oneMore</expr>
}
companion object {
// effectively constant
val someField = "something"
val indirectPointer = someField
val oneMore = indirectPointer
}
}
@@ -0,0 +1,3 @@
expression: oneMore
constant: "something"
constantValueKind: String
@@ -0,0 +1 @@
val p : Byte = <expr>42</expr>
@@ -0,0 +1,3 @@
expression: 42
constant: 42
constantValueKind: Byte
@@ -0,0 +1,3 @@
expression: 42 / d
constant: 42
constantValueKind: Int
@@ -0,0 +1,2 @@
const val d = 1
val p = <expr>42 / d</expr>
@@ -0,0 +1,3 @@
expression: 42 / d
constant: NOT_EVALUATED
constantValueKind: NOT_EVALUATED
@@ -0,0 +1,3 @@
expression: 42 / d
constant: 42
constantValueKind: Int
@@ -0,0 +1,2 @@
val d = 1
val p = <expr>42 / d</expr>
@@ -0,0 +1,3 @@
expression: 42 / d
constant: NOT_EVALUATED
constantValueKind: NOT_EVALUATED
@@ -0,0 +1,3 @@
expression: 42 / 0
constant: error("Division by zero")
constantValueKind: Error
@@ -0,0 +1,3 @@
expression: 42 / 0
constant: error("/ by zero")
constantValueKind: Error
@@ -0,0 +1 @@
val p : Double = <expr>3.14</expr>
@@ -0,0 +1,3 @@
expression: 3.14
constant: 3.14
constantValueKind: Double
@@ -0,0 +1 @@
val p = <expr>3.14f</expr>
@@ -0,0 +1,3 @@
expression: 3.14f
constant: 3.14f
constantValueKind: Float
@@ -0,0 +1 @@
val p : Int = <expr>42</expr>
@@ -0,0 +1,3 @@
expression: 42
constant: 42
constantValueKind: Int
@@ -0,0 +1 @@
val p : Long = <expr>42</expr>
@@ -0,0 +1,3 @@
expression: 42
constant: 42
constantValueKind: Long
@@ -0,0 +1,3 @@
// WITH_STDLIB
val p : UInt = <expr>42u</expr>
@@ -0,0 +1,3 @@
expression: 42u
constant: 42u
constantValueKind: UInt
@@ -0,0 +1,4 @@
annotation class Annotation(vararg val values: String)
@Annotation(<expr>"42"</expr>)
class C
@@ -0,0 +1,3 @@
expression: "42"
constant: "42"
constantValueKind: String