Support secondary constructors for inline classes
#KT-25614 Fixed #KT-25246 Fixed KT-25599 Will be fixed after recompilation of unsigned classes
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
// !LANGUAGE: +InlineClasses
|
||||
// IGNORE_BACKEND: JVM_IR, JS_IR
|
||||
|
||||
inline class Rgba(val value: Int) {
|
||||
inline val r: Int get() = (value shr 0) and 0xFF
|
||||
inline val g: Int get() = (value shr 8) and 0xFF
|
||||
inline val b: Int get() = (value shr 16) and 0xFF
|
||||
inline val a: Int get() = (value shr 24) and 0xFF
|
||||
}
|
||||
|
||||
fun Rgba(r: Int, g: Int, b: Int, a: Int): Rgba {
|
||||
return Rgba(
|
||||
((r and 0xFF) shl 0) or ((g and 0xFF) shl 8) or ((b and 0xFF) shl 16) or ((a and 0xFF) shl 24)
|
||||
)
|
||||
}
|
||||
|
||||
fun Rgba.withR(r: Int) = Rgba(r, g, b, a)
|
||||
fun Rgba.withG(g: Int) = Rgba(r, g, b, a)
|
||||
fun Rgba.withB(b: Int) = Rgba(r, g, b, a)
|
||||
fun Rgba.withA(a: Int) = Rgba(r, g, b, a)
|
||||
|
||||
inline class RgbaArray(val array: IntArray) {
|
||||
constructor(size: Int) : this(IntArray(size))
|
||||
operator fun get(index: Int): Rgba = Rgba(array[index])
|
||||
operator fun set(index: Int, color: Rgba) {
|
||||
array[index] = color.value
|
||||
}
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val result1 = RgbaArray(32)
|
||||
val result2 = RgbaArray(IntArray(32))
|
||||
val color = Rgba(128, 128, 0, 255)
|
||||
result1[0] = color.withG(64).withA(0)
|
||||
result2[0] = color.withG(64).withA(0)
|
||||
if (result1[0].value != result2[0].value) return "Fail 1"
|
||||
if (result1[0].value != 16512) return "Fail 2"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
// !LANGUAGE: +InlineClasses
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
|
||||
var global = "wrong"
|
||||
|
||||
inline class Foo(val x: String) {
|
||||
constructor(y: Int) : this(y.toString())
|
||||
constructor(z: Long) : this(z.toInt() + 1)
|
||||
constructor(other: Char) : this(other.toInt().toString()) {
|
||||
global = "OK"
|
||||
}
|
||||
constructor(a: Int, b: Int) : this((a + b).toString())
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
var f = Foo(42)
|
||||
if (f.x != "42") return "Fail 1: ${f.x}"
|
||||
|
||||
f = Foo(43L)
|
||||
if (f.x != "44") return "Fail 2: ${f.x}"
|
||||
|
||||
f = Foo('a')
|
||||
if (f.x != "97") return "Fail 3: ${f.x}"
|
||||
|
||||
f = Foo(1, 2)
|
||||
if (f.x != "3") return "Fail 4: ${f.x}"
|
||||
|
||||
return global
|
||||
}
|
||||
Reference in New Issue
Block a user