[Common IR] Do inlining of callable references of inline functions
^KT-52805 Fixed
This commit is contained in:
committed by
Space
parent
3424e756ad
commit
bb8da65188
@@ -0,0 +1,41 @@
|
||||
typealias Callback = () -> Unit
|
||||
|
||||
class CallbackComposer {
|
||||
inline fun addTo(noinline block: Callback) {
|
||||
asDynamic().push(block)
|
||||
}
|
||||
}
|
||||
|
||||
inline fun CallbackComposer.addToExtension(noinline block: Callback) {
|
||||
asDynamic().push(block)
|
||||
}
|
||||
|
||||
fun createCallbackBuilder(builder: CallbackComposer.() -> Unit): () -> Callback = {
|
||||
val callbacks = arrayOf<Callback>()
|
||||
builder(callbacks.unsafeCast<CallbackComposer>())
|
||||
|
||||
val composed: Callback = {
|
||||
for (cb in callbacks) {
|
||||
cb()
|
||||
}
|
||||
}
|
||||
composed
|
||||
}
|
||||
|
||||
var retVal = ""
|
||||
|
||||
fun appendToRetVal(c: String): () -> Unit = {
|
||||
retVal += c
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val callbackBuilder = createCallbackBuilder {
|
||||
appendToRetVal("O").also(::addTo)
|
||||
appendToRetVal("K").also(::addToExtension)
|
||||
}
|
||||
|
||||
val callback = callbackBuilder()
|
||||
callback()
|
||||
|
||||
return retVal
|
||||
}
|
||||
@@ -14,10 +14,7 @@ public fun <T, R> apply(x: T, fn: (T)->R): R =
|
||||
|
||||
import utils.*
|
||||
|
||||
// CHECK_CONTAINS_NO_CALLS: test except=imul TARGET_BACKENDS=JS
|
||||
|
||||
// FIXME: Not inlined on IR BE
|
||||
// CHECK_CONTAINS_NO_CALLS: test except=multiplyBy2 IGNORED_BACKENDS=JS
|
||||
// CHECK_CONTAINS_NO_CALLS: test except=imul
|
||||
|
||||
internal inline fun multiplyBy2(x: Int): Int = x * 2
|
||||
|
||||
|
||||
Reference in New Issue
Block a user