[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
|
||||
}
|
||||
Reference in New Issue
Block a user