Expect/actual support in klibs under -Xklib-mpp
This commit is contained in:
committed by
alexander-gorshenev
parent
218d7c31ed
commit
dc8240c24e
@@ -0,0 +1,60 @@
|
||||
// !LANGUAGE: +MultiPlatformProjects
|
||||
// KJS_WITH_FULL_RUNTIME
|
||||
// KLIB_BASED_MPP
|
||||
// IGNORE_BACKEND: JS
|
||||
// IGNORE_BACKEND: JVM
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
|
||||
// MODULE: A
|
||||
// FILE: a.kt
|
||||
@file:Suppress("NO_ACTUAL_FOR_EXPECT")
|
||||
package foo
|
||||
|
||||
expect fun foo1(): String
|
||||
expect fun foo2(): String
|
||||
expect fun foo3(): String
|
||||
expect fun foo4(): String
|
||||
expect fun foo5(): String
|
||||
expect fun foo6(): String
|
||||
|
||||
actual fun foo1() = "1"
|
||||
actual fun foo2() = "2"
|
||||
|
||||
fun use1() = foo1()
|
||||
fun use3() = foo3()
|
||||
|
||||
|
||||
// MODULE: B(A)
|
||||
// FILE: b.kt
|
||||
@file:Suppress("ACTUAL_WITHOUT_EXPECT")
|
||||
package foo
|
||||
|
||||
actual fun foo3() = "3"
|
||||
actual fun foo4() = "4"
|
||||
actual fun foo5() = "5"
|
||||
|
||||
fun use2() = foo2()
|
||||
fun use4() = foo4()
|
||||
fun use6() = foo6()
|
||||
|
||||
|
||||
// MODULE: C(B)
|
||||
// FILE: c.kt
|
||||
@file:Suppress("ACTUAL_WITHOUT_EXPECT")
|
||||
package foo
|
||||
|
||||
actual fun foo6() = "6"
|
||||
|
||||
fun use5() = foo5()
|
||||
|
||||
|
||||
// MODULE: main(C)
|
||||
// FILE: main.kt
|
||||
package main
|
||||
|
||||
import foo.*
|
||||
|
||||
fun box(): String {
|
||||
return if (use1() + use2() + use3() + use4() + use5() + use6() == "123456") "OK" else "FAIL"
|
||||
}
|
||||
|
||||
+84
@@ -0,0 +1,84 @@
|
||||
// !LANGUAGE: +MultiPlatformProjects
|
||||
// KJS_WITH_FULL_RUNTIME
|
||||
// KLIB_BASED_MPP
|
||||
// IGNORE_BACKEND: JS
|
||||
// IGNORE_BACKEND: JVM
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
|
||||
// MODULE: A
|
||||
// FILE: a.kt
|
||||
@file:Suppress("NO_ACTUAL_FOR_EXPECT")
|
||||
package foo
|
||||
|
||||
expect class C1() {
|
||||
fun foo1(): String
|
||||
}
|
||||
expect class C2() {
|
||||
fun foo2(): String
|
||||
}
|
||||
expect class C3() {
|
||||
fun foo3(): String
|
||||
}
|
||||
expect class C4() {
|
||||
fun foo4(): String
|
||||
}
|
||||
expect class C5() {
|
||||
fun foo5(): String
|
||||
}
|
||||
expect class C6() {
|
||||
fun foo6(): String
|
||||
}
|
||||
|
||||
actual class C1 {
|
||||
actual fun foo1() = "1"
|
||||
}
|
||||
actual class C2 {
|
||||
actual fun foo2() = "2"
|
||||
}
|
||||
|
||||
fun use1() = C1().foo1()
|
||||
fun use3() = C3().foo3()
|
||||
|
||||
|
||||
// MODULE: B(A)
|
||||
// FILE: b.kt
|
||||
@file:Suppress("ACTUAL_WITHOUT_EXPECT")
|
||||
package foo
|
||||
|
||||
actual class C3 {
|
||||
actual fun foo3() = "3"
|
||||
}
|
||||
actual class C4 {
|
||||
actual fun foo4() = "4"
|
||||
}
|
||||
actual class C5 {
|
||||
actual fun foo5() = "5"
|
||||
}
|
||||
|
||||
fun use2() = C2().foo2()
|
||||
fun use4() = C4().foo4()
|
||||
fun use6() = C6().foo6()
|
||||
|
||||
|
||||
// MODULE: C(B)
|
||||
// FILE: c.kt
|
||||
@file:Suppress("ACTUAL_WITHOUT_EXPECT")
|
||||
package foo
|
||||
|
||||
actual class C6 {
|
||||
actual fun foo6() = "6"
|
||||
}
|
||||
|
||||
fun use5() = C5().foo5()
|
||||
|
||||
|
||||
// MODULE: main(C)
|
||||
// FILE: main.kt
|
||||
package main
|
||||
|
||||
import foo.*
|
||||
|
||||
fun box(): String {
|
||||
return if (use1() + use2() + use3() + use4() + use5() + use6() == "123456") "OK" else "FAIL"
|
||||
}
|
||||
|
||||
+91
@@ -0,0 +1,91 @@
|
||||
// !LANGUAGE: +MultiPlatformProjects
|
||||
// KJS_WITH_FULL_RUNTIME
|
||||
// KLIB_BASED_MPP
|
||||
// IGNORE_BACKEND: JS
|
||||
// IGNORE_BACKEND: JVM
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
|
||||
// MODULE: A
|
||||
// FILE: a.kt
|
||||
@file:Suppress("NO_ACTUAL_FOR_EXPECT")
|
||||
package foo
|
||||
|
||||
expect class C1() {
|
||||
fun foo1(): String
|
||||
}
|
||||
expect class C2() {
|
||||
fun foo2(): String
|
||||
}
|
||||
expect class C3() {
|
||||
fun foo3(): String
|
||||
}
|
||||
expect class C4() {
|
||||
fun foo4(): String
|
||||
}
|
||||
expect class C5() {
|
||||
fun foo5(): String
|
||||
}
|
||||
expect class C6() {
|
||||
fun foo6(): String
|
||||
}
|
||||
|
||||
class D1 {
|
||||
fun foo1() = "1"
|
||||
}
|
||||
class D2 {
|
||||
fun foo2() = "2"
|
||||
}
|
||||
|
||||
fun use1() = C1().foo1()
|
||||
fun use3() = C3().foo3()
|
||||
|
||||
|
||||
// MODULE: B(A)
|
||||
// FILE: b.kt
|
||||
@file:Suppress("ACTUAL_WITHOUT_EXPECT")
|
||||
package foo
|
||||
|
||||
class D3 {
|
||||
fun foo3() = "3"
|
||||
}
|
||||
class D4 {
|
||||
fun foo4() = "4"
|
||||
}
|
||||
class D5 {
|
||||
fun foo5() = "5"
|
||||
}
|
||||
|
||||
fun use2() = C2().foo2()
|
||||
fun use4() = C4().foo4()
|
||||
fun use6() = C6().foo6()
|
||||
|
||||
|
||||
// MODULE: C(B)
|
||||
// FILE: c.kt
|
||||
@file:Suppress("ACTUAL_WITHOUT_EXPECT")
|
||||
package foo
|
||||
|
||||
class D6 {
|
||||
fun foo6() = "6"
|
||||
}
|
||||
|
||||
fun use5() = C5().foo5()
|
||||
|
||||
actual typealias C1 = D1
|
||||
actual typealias C2 = D2
|
||||
actual typealias C3 = D3
|
||||
actual typealias C4 = D4
|
||||
actual typealias C5 = D5
|
||||
actual typealias C6 = D6
|
||||
|
||||
|
||||
// MODULE: main(C)
|
||||
// FILE: main.kt
|
||||
package main
|
||||
|
||||
import foo.*
|
||||
|
||||
fun box(): String {
|
||||
return if (use1() + use2() + use3() + use4() + use5() + use6() == "123456") "OK" else "FAIL"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user