Temporarily disable inline for bound function references

This commit is contained in:
Alexander Udalov
2016-06-06 14:41:19 +03:00
parent b9e61f035f
commit 61290d1225
3 changed files with 22 additions and 0 deletions
@@ -47,6 +47,7 @@ import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodParameterKind;
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodParameterSignature;
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature;
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedSimpleFunctionDescriptor;
import org.jetbrains.kotlin.types.expressions.DoubleColonLHS;
import org.jetbrains.kotlin.types.expressions.LabelResolver;
import org.jetbrains.org.objectweb.asm.Label;
import org.jetbrains.org.objectweb.asm.MethodVisitor;
@@ -699,6 +700,13 @@ public class InlineCodegen extends CallGenerator {
// TODO: support inline of property references passed to inlinable function parameters
SimpleFunctionDescriptor functionReference = state.getBindingContext().get(BindingContext.FUNCTION, deparenthesized);
if (functionReference == null) return false;
KtExpression receiverExpression = ((KtCallableReferenceExpression) deparenthesized).getReceiverExpression();
if (receiverExpression != null) {
// TODO (!): support inline for bound function references
DoubleColonLHS lhs = state.getBindingContext().get(BindingContext.DOUBLE_COLON_LHS, receiverExpression);
if (lhs instanceof DoubleColonLHS.Expression) return false;
}
}
return InlineUtil.isInlineLambdaParameter(valueParameterDescriptor) &&
@@ -0,0 +1,8 @@
inline fun go(f: () -> String) = f()
fun String.id(): String = this
fun box(): String {
val x = "OK"
return go(x::id)
}
@@ -1471,6 +1471,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/callableReference/bound/inline/simple.kt");
doTest(fileName);
}
@TestMetadata("simpleVal.kt")
public void testSimpleVal() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/callableReference/bound/inline/simpleVal.kt");
doTest(fileName);
}
}
}