Implement codegen for bound class reference expressions
- Inline the usage of ExpressionCodegen#generateClassLiteralReference into ClosureCodegen, simplify - Support DoubleColonLHS.Expression in generateClassLiteralReference - Substantially simplify KClass.java intrinsic by reusing generateClassLiteralReference #KT-13075 Fixed #KT-12995 In Progress
This commit is contained in:
+10
@@ -0,0 +1,10 @@
|
||||
// WITH_RUNTIME
|
||||
|
||||
fun box(): String {
|
||||
var x = 42
|
||||
val k = (x++)::class.java
|
||||
if (k != Int::class.java) return "Fail 1: $k"
|
||||
if (x != 43) return "Fail 2: $x (side effect should have taken place)"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
// WITH_RUNTIME
|
||||
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
fun box(): String {
|
||||
assertEquals(true::class, Boolean::class)
|
||||
assertEquals(42.toByte()::class, Byte::class)
|
||||
assertEquals('z'::class, Char::class)
|
||||
assertEquals(3.14::class, Double::class)
|
||||
assertEquals(2.72f::class, Float::class)
|
||||
// TODO: KT-13110
|
||||
// assertEquals(42::class, Int::class)
|
||||
assertEquals(42L::class, Long::class)
|
||||
assertEquals(42.toShort()::class, Short::class)
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
fun box(): String {
|
||||
var x = 42
|
||||
|
||||
val k1 = (x++)::class
|
||||
if (k1 != Int::class) return "Fail 1: $k1"
|
||||
if (x != 43) return "Fail 2: $x"
|
||||
|
||||
val k2 = { x *= 2; x }()::class
|
||||
// Note that k2 is the class of the wrapper type java.lang.Integer
|
||||
if (k2 != Integer::class) return "Fail 3: $k2"
|
||||
if (x != 86) return "Fail 4: $x"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
fun box(): String {
|
||||
val x: CharSequence = ""
|
||||
val klass = x::class
|
||||
return if (klass == String::class) "OK" else "Fail: $klass"
|
||||
}
|
||||
Reference in New Issue
Block a user