JS/Inlining: in expression like f(g()), where *f* is inline, don't treat g() as a lambda constructor
This commit is contained in:
@@ -19,9 +19,7 @@ package org.jetbrains.kotlin.js.inline.context
|
||||
import com.google.dart.compiler.backend.js.ast.*
|
||||
import com.google.dart.compiler.backend.js.ast.metadata.descriptor
|
||||
import org.jetbrains.kotlin.js.inline.FunctionReader
|
||||
import org.jetbrains.kotlin.js.inline.util.getSimpleName
|
||||
import org.jetbrains.kotlin.js.inline.util.isCallInvocation
|
||||
import org.jetbrains.kotlin.js.inline.util.transitiveStaticRef
|
||||
import org.jetbrains.kotlin.js.inline.util.*
|
||||
|
||||
abstract class FunctionContext(
|
||||
private val function: JsFunction,
|
||||
@@ -86,7 +84,7 @@ abstract class FunctionContext(
|
||||
/** process cases 2, 3 */
|
||||
val qualifier = callQualifier.transitiveStaticRef
|
||||
return when (qualifier) {
|
||||
is JsInvocation -> lookUpStaticFunction(getSimpleName(qualifier)!!)
|
||||
is JsInvocation -> lookUpStaticFunction(getSimpleName(qualifier)!!)?.let { if (isFunctionCreator(it)) it else null }
|
||||
is JsNameRef -> lookUpStaticFunction(qualifier.name)
|
||||
is JsFunction -> qualifier
|
||||
else -> null
|
||||
|
||||
@@ -89,6 +89,12 @@ public class InlineJsTestGenerated extends AbstractInlineJsTest {
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("dontInlineFunctionCall.kt")
|
||||
public void testDontInlineFunctionCall() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/inline/cases/dontInlineFunctionCall.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("expressionBodyWithLambdaCall.kt")
|
||||
public void testExpressionBodyWithLambdaCall() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/inline/cases/expressionBodyWithLambdaCall.kt");
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
package foo
|
||||
|
||||
inline fun block(p: () -> Int) = p()
|
||||
|
||||
fun createFunction(x: Int): () -> Int = { x }
|
||||
|
||||
fun box(): String {
|
||||
assertEquals(23, block(createFunction(23)))
|
||||
return "OK"
|
||||
}
|
||||
Reference in New Issue
Block a user