JVM_IR: omit annotations on outer this parameters

This commit is contained in:
pyos
2019-10-04 12:57:08 +02:00
committed by max-kammerer
parent 94469827ba
commit 432ba62143
11 changed files with 12 additions and 30 deletions
@@ -76,7 +76,7 @@ open class FunctionCodegen(
if (!state.classBuilderMode.generateBodies || flags.and(Opcodes.ACC_ABSTRACT) != 0 || irFunction.isExternal) {
generateAnnotationDefaultValueIfNeeded(methodVisitor)
} else {
val frameMap = createFrameMapWithReceivers(signature)
val frameMap = createFrameMapWithReceivers()
val irClass = context.suspendFunctionContinuations[irFunction]
val element = (irFunction.symbol.descriptor.psiElement
?: context.suspendLambdaToOriginalFunctionMap[irFunction.parent]?.symbol?.descriptor?.psiElement) as? KtElement
@@ -189,7 +189,7 @@ open class FunctionCodegen(
enter(parameter, type)
}
private fun createFrameMapWithReceivers(signature: JvmMethodSignature): IrFrameMap {
private fun createFrameMapWithReceivers(): IrFrameMap {
val frameMap = IrFrameMap()
val functionView = irFunction.getOrCreateSuspendFunctionViewIfNeeded(context)
@@ -198,20 +198,9 @@ open class FunctionCodegen(
} else if (functionView.dispatchReceiverParameter != null) {
frameMap.enterDispatchReceiver(functionView.dispatchReceiverParameter!!)
}
for (parameter in signature.valueParameters) {
if (parameter.kind == JvmMethodParameterKind.RECEIVER) {
val receiverParameter = functionView.extensionReceiverParameter
if (receiverParameter != null) {
frameMap.enter(receiverParameter, classCodegen.typeMapper.mapType(receiverParameter))
} else {
frameMap.enterTemp(parameter.asmType)
}
} else if (parameter.kind != JvmMethodParameterKind.VALUE) {
frameMap.enterTemp(parameter.asmType)
}
functionView.extensionReceiverParameter?.let {
frameMap.enter(it, classCodegen.typeMapper.mapType(it))
}
for (parameter in functionView.valueParameters) {
frameMap.enter(parameter, classCodegen.typeMapper.mapType(parameter.type))
}
@@ -247,15 +236,12 @@ fun generateParameterAnnotations(
kotlinParameterTypes.forEachIndexed { i, parameterSignature ->
val kind = parameterSignature.kind
if (kind.isSkippedInGenericSignature) return@forEachIndexed
val annotated = when (kind) {
JvmMethodParameterKind.VALUE -> iterator.next()
JvmMethodParameterKind.RECEIVER -> irFunction.extensionReceiverParameter
else -> null
else -> iterator.next()
}
if (annotated != null) {
if (!kind.isSkippedInGenericSignature) {
AnnotationCodegen(innerClassConsumer, context) { descriptor, visible ->
mv.visitParameterAnnotation(
if (AsmUtil.IS_BUILT_WITH_ASM6) i else i - syntheticParameterCount,
@@ -20,7 +20,7 @@ class IrCallableMethod(
val asmMethod: Method = signature.asmMethod
val valueParameterTypes: List<Type> =
signature.valueParameters.filter { it.kind == JvmMethodParameterKind.VALUE }.map { it.asmType }
signature.valueParameters.filter { it.kind != JvmMethodParameterKind.RECEIVER }.map { it.asmType }
override fun toString(): String =
"${Printer.OPCODES[invokeOpcode]} $owner.$asmMethod" + (if (isInterfaceMethod) " (itf)" else "")
@@ -224,8 +224,12 @@ class MethodSignatureMapper(private val context: JvmBackendContext) {
}
for (parameter in function.valueParameters) {
val kind = when (parameter.origin) {
JvmLoweredDeclarationOrigin.FIELD_FOR_OUTER_THIS -> JvmMethodParameterKind.OUTER
else -> JvmMethodParameterKind.VALUE
}
val type = if (forceSingleValueParameterBoxing(function.descriptor)) parameter.type.makeNullable() else parameter.type
writeParameter(sw, JvmMethodParameterKind.VALUE, type, function)
writeParameter(sw, kind, type, function)
}
sw.writeReturnType()
@@ -1,4 +1,3 @@
// IGNORE_BACKEND: JVM_IR
// TARGET_BACKEND: JVM
// FILE: JavaClass.java
@@ -1,5 +1,4 @@
// SKIP_JDK6
// IGNORE_BACKEND: JVM_IR
// TARGET_BACKEND: JVM
// WITH_RUNTIME
// FULL_JDK
@@ -1,4 +1,3 @@
// IGNORE_BACKEND: JVM_IR
// IGNORE_BACKEND: JS_IR
// TODO: investigate should it be ran for JS or not
// IGNORE_BACKEND: JS, NATIVE
@@ -1,4 +1,3 @@
// IGNORE_BACKEND: JVM_IR
// IGNORE_BACKEND: JS_IR
// TODO: muted automatically, investigate should it be ran for JS or not
// IGNORE_BACKEND: JS, NATIVE
@@ -1,4 +1,3 @@
// IGNORE_BACKEND: JVM_IR
// TARGET_BACKEND: JVM
// WITH_REFLECT
@@ -1,4 +1,3 @@
// IGNORE_BACKEND: JVM_IR
package test
class Outer {
@@ -1,4 +1,3 @@
// IGNORE_BACKEND: JVM_IR
package test
class Outer {
@@ -1,4 +1,3 @@
// IGNORE_BACKEND: JVM_IR
package test
class Outer<T> {