JS: fix inlining of callable references
This commit is contained in:
+6
@@ -22,6 +22,9 @@ import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||
import org.jetbrains.kotlin.js.backend.ast.*
|
||||
import org.jetbrains.kotlin.js.backend.ast.metadata.SideEffectKind
|
||||
import org.jetbrains.kotlin.js.backend.ast.metadata.isCallableReference
|
||||
import org.jetbrains.kotlin.js.backend.ast.metadata.sideEffects
|
||||
import org.jetbrains.kotlin.js.translate.callTranslator.CallTranslator
|
||||
import org.jetbrains.kotlin.js.translate.context.Namer
|
||||
import org.jetbrains.kotlin.js.translate.context.TranslationContext
|
||||
@@ -226,7 +229,10 @@ object CallableReferenceTranslator {
|
||||
val nameLiteral = context.program().getStringLiteral(name)
|
||||
val invokeName = Namer.FUNCTION_CALLABLE_REF
|
||||
val invokeFun = JsNameRef(invokeName, Namer.kotlinObject())
|
||||
invokeFun.sideEffects = SideEffectKind.PURE
|
||||
val invocation = JsInvocation(invokeFun, nameLiteral, function)
|
||||
invocation.isCallableReference = true
|
||||
invocation.sideEffects = SideEffectKind.PURE
|
||||
return invocation
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ import utils.*
|
||||
|
||||
// CHECK_CONTAINS_NO_CALLS: test except=imul
|
||||
|
||||
internal fun multiplyBy2(x: Int): Int = x * 2
|
||||
internal inline fun multiplyBy2(x: Int): Int = x * 2
|
||||
|
||||
internal fun test(x: Int): Int = apply(x, ::multiplyBy2)
|
||||
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@ package foo
|
||||
// CHECK_NOT_CALLED_IN_SCOPE: scope=test function=even
|
||||
// CHECK_NOT_CALLED_IN_SCOPE: scope=test function=filter_azvtw4$
|
||||
|
||||
internal fun even(x: Int) = x % 2 == 0
|
||||
internal inline fun even(x: Int) = x % 2 == 0
|
||||
|
||||
internal fun test(a: List<Int>) = a.filter(::even)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user