JS: fix inlining of callable references

This commit is contained in:
Alexey Andreev
2017-01-16 19:23:38 +03:00
parent 7a0f75f164
commit dcb8b7b92c
8 changed files with 23 additions and 13 deletions
@@ -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)
@@ -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)