JVM_IR make proxy funs for inline and arrayOf funs non-synthetic
This commit is contained in:
committed by
teamcityserver
parent
fcb8f331dc
commit
2a00def84e
+5
-1
@@ -338,7 +338,11 @@ internal class FunctionReferenceLowering(private val context: JvmBackendContext)
|
|||||||
modality = Modality.FINAL
|
modality = Modality.FINAL
|
||||||
isSuspend = false
|
isSuspend = false
|
||||||
isInline = false
|
isInline = false
|
||||||
origin = JvmLoweredDeclarationOrigin.PROXY_FUN_FOR_INDY_SAM_CONVERSION
|
origin =
|
||||||
|
if (targetFun.isInline || targetFun.isArrayOf())
|
||||||
|
JvmLoweredDeclarationOrigin.PROXY_FUN_FOR_METAFACTORY
|
||||||
|
else
|
||||||
|
JvmLoweredDeclarationOrigin.SYNTHETIC_PROXY_FUN_FOR_METAFACTORY
|
||||||
}.also { proxyFun ->
|
}.also { proxyFun ->
|
||||||
proxyFun.parent = currentDeclarationParent
|
proxyFun.parent = currentDeclarationParent
|
||||||
?: throw AssertionError("No declaration parent when processing $reference")
|
?: throw AssertionError("No declaration parent when processing $reference")
|
||||||
|
|||||||
+2
-1
@@ -382,7 +382,8 @@ internal class LambdaMetafactoryArgumentsBuilder(
|
|||||||
|
|
||||||
private val adaptableFunctionOrigins = setOf(
|
private val adaptableFunctionOrigins = setOf(
|
||||||
IrDeclarationOrigin.LOCAL_FUNCTION_FOR_LAMBDA,
|
IrDeclarationOrigin.LOCAL_FUNCTION_FOR_LAMBDA,
|
||||||
JvmLoweredDeclarationOrigin.PROXY_FUN_FOR_INDY_SAM_CONVERSION
|
JvmLoweredDeclarationOrigin.PROXY_FUN_FOR_METAFACTORY,
|
||||||
|
JvmLoweredDeclarationOrigin.SYNTHETIC_PROXY_FUN_FOR_METAFACTORY
|
||||||
)
|
)
|
||||||
|
|
||||||
private fun adaptLambdaSignature(
|
private fun adaptLambdaSignature(
|
||||||
|
|||||||
+2
-1
@@ -48,5 +48,6 @@ interface JvmLoweredDeclarationOrigin : IrDeclarationOrigin {
|
|||||||
object ABSTRACT_BRIDGE_STUB : IrDeclarationOriginImpl("ABSTRACT_BRIDGE_STUB")
|
object ABSTRACT_BRIDGE_STUB : IrDeclarationOriginImpl("ABSTRACT_BRIDGE_STUB")
|
||||||
object INVOKEDYNAMIC_CALL_TARGET : IrDeclarationOriginImpl("INVOKEDYNAMIC_CALL_TARGET")
|
object INVOKEDYNAMIC_CALL_TARGET : IrDeclarationOriginImpl("INVOKEDYNAMIC_CALL_TARGET")
|
||||||
object INLINE_LAMBDA : IrDeclarationOriginImpl("INLINE_LAMBDA")
|
object INLINE_LAMBDA : IrDeclarationOriginImpl("INLINE_LAMBDA")
|
||||||
object PROXY_FUN_FOR_INDY_SAM_CONVERSION : IrDeclarationOriginImpl("PROXY_FUN_FOR_INDY_SAM_CONVERSION", isSynthetic = true)
|
object PROXY_FUN_FOR_METAFACTORY : IrDeclarationOriginImpl("PROXY_FUN_FOR_METAFACTORY")
|
||||||
|
object SYNTHETIC_PROXY_FUN_FOR_METAFACTORY : IrDeclarationOriginImpl("SYNTHETIC_PROXY_FUN_FOR_METAFACTORY", isSynthetic = true)
|
||||||
}
|
}
|
||||||
|
|||||||
+25
-6
@@ -1,15 +1,34 @@
|
|||||||
// IGNORE_BACKEND: JVM
|
// IGNORE_BACKEND: JVM
|
||||||
|
|
||||||
// FILE: indySamConversionViaProxyFun.kt.kt
|
// FILE: indySamConversionViaProxyFun.kt.kt
|
||||||
|
inline fun ifn() {}
|
||||||
|
|
||||||
fun test() {
|
fun test() {
|
||||||
use(Sam(String?::plus))
|
// Proxy functions shouldn't clash
|
||||||
use(Sam(String?::plus))
|
use(Sam1(String?::plus))
|
||||||
use(Sam(String?::plus))
|
use(Sam1(String?::plus))
|
||||||
|
use(Sam1(String?::plus))
|
||||||
|
|
||||||
|
// Proxy function for inline fun should be non-synthetic
|
||||||
|
use(Sam2(::ifn))
|
||||||
|
|
||||||
|
// Proxy function for arrayOf fun should be non-synthetic
|
||||||
|
use(Sam3(::intArrayOf))
|
||||||
}
|
}
|
||||||
|
|
||||||
fun use(s: Sam) {}
|
fun use(x: Any) {}
|
||||||
|
|
||||||
// FILE: Sam.java
|
// FILE: Sam1.java
|
||||||
public interface Sam {
|
public interface Sam1 {
|
||||||
String get(String x, Object y);
|
String get(String x, Object y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FILE: Sam2.java
|
||||||
|
public interface Sam2 {
|
||||||
|
void run();
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: Sam3.java
|
||||||
|
public interface Sam3 {
|
||||||
|
int[] get(int[] s);
|
||||||
|
}
|
||||||
+4
-1
@@ -1,9 +1,12 @@
|
|||||||
@kotlin.Metadata
|
@kotlin.Metadata
|
||||||
public final class IndySamConversionViaProxyFun_ktKt {
|
public final class IndySamConversionViaProxyFun_ktKt {
|
||||||
// source: 'indySamConversionViaProxyFun.kt.kt'
|
// source: 'indySamConversionViaProxyFun.kt.kt'
|
||||||
|
public final static method ifn(): void
|
||||||
|
private final static method test$ifn__proxy(): void
|
||||||
|
private varargs final static method test$intArrayOf__proxy(p0: int[]): int[]
|
||||||
private synthetic final static method test$plus__proxy(p0: java.lang.String, p1: java.lang.Object): java.lang.String
|
private synthetic final static method test$plus__proxy(p0: java.lang.String, p1: java.lang.Object): java.lang.String
|
||||||
private synthetic final static method test$plus__proxy-0(p0: java.lang.String, p1: java.lang.Object): java.lang.String
|
private synthetic final static method test$plus__proxy-0(p0: java.lang.String, p1: java.lang.Object): java.lang.String
|
||||||
private synthetic final static method test$plus__proxy-1(p0: java.lang.String, p1: java.lang.Object): java.lang.String
|
private synthetic final static method test$plus__proxy-1(p0: java.lang.String, p1: java.lang.Object): java.lang.String
|
||||||
public final static method test(): void
|
public final static method test(): void
|
||||||
public final static method use(@org.jetbrains.annotations.NotNull p0: Sam): void
|
public final static method use(@org.jetbrains.annotations.NotNull p0: java.lang.Object): void
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user