From 9fdd4c647a0817e1baa8d2527bd353e947801811 Mon Sep 17 00:00:00 2001 From: Mikhael Bogdanov Date: Fri, 12 May 2017 14:55:06 +0200 Subject: [PATCH] Clean code. Add LambdaInfo to InliningContext --- .../inline/AnonymousObjectTransformer.kt | 1 - .../kotlin/codegen/inline/InliningContext.kt | 39 ++++++++++--------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AnonymousObjectTransformer.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AnonymousObjectTransformer.kt index 80aa629de5a..bbd0aff6e42 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AnonymousObjectTransformer.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AnonymousObjectTransformer.kt @@ -22,7 +22,6 @@ import org.jetbrains.kotlin.codegen.ClassBuilder import org.jetbrains.kotlin.codegen.StackValue import org.jetbrains.kotlin.codegen.coroutines.COROUTINE_IMPL_ASM_TYPE import org.jetbrains.kotlin.codegen.inline.InlineCodegenUtil.isThis0 -import org.jetbrains.kotlin.codegen.optimization.common.InsnSequence import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin.Companion.NO_ORIGIN import org.jetbrains.org.objectweb.asm.* diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InliningContext.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InliningContext.kt index 000896b7883..7447c1ef84a 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InliningContext.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InliningContext.kt @@ -26,9 +26,12 @@ open class InliningContext( val nameGenerator: NameGenerator, val typeRemapper: TypeRemapper, val reifiedTypeInliner: ReifiedTypeInliner, - val isInliningLambda: Boolean, + val lambdaInfo: LambdaInfo?, val classRegeneration: Boolean ) { + + val isInliningLambda = lambdaInfo != null + val internalNameToAnonymousObjectTransformationInfo = hashMapOf() var isContinuation: Boolean = false @@ -38,15 +41,13 @@ open class InliningContext( val root: RootInliningContext get() = if (isRoot) this as RootInliningContext else parent!!.root - fun subInline(generator: NameGenerator): InliningContext { - return subInline(generator, emptyMap(), isInliningLambda) - } - - fun subInlineLambda(lambdaInfo: LambdaInfo): InliningContext { - val map = HashMap() - map.put(lambdaInfo.lambdaClassType.internalName, null) //mark lambda inlined - return subInline(nameGenerator.subGenerator("lambda"), map, true) - } + fun subInlineLambda(lambdaInfo: LambdaInfo): InliningContext = + subInline( + nameGenerator.subGenerator("lambda"), + //mark lambda inlined + hashMapOf(lambdaInfo.lambdaClassType.internalName to null), + lambdaInfo + ) fun subInlineWithClassRegeneration( generator: NameGenerator, @@ -59,10 +60,14 @@ open class InliningContext( ) } - private fun subInline( - generator: NameGenerator, additionalTypeMappings: Map, isInliningLambda: Boolean + @JvmOverloads + fun subInline( + generator: NameGenerator, + additionalTypeMappings: Map = emptyMap(), + lambdaInfo: LambdaInfo? = this.lambdaInfo ): InliningContext { //isInliningLambda && !this.isInliningLambda for root inline lambda + val isInliningLambda = lambdaInfo != null return InliningContext( this, expressionMap, state, generator, TypeRemapper.createFrom( @@ -71,20 +76,16 @@ open class InliningContext( //root inline lambda isInliningLambda && !this.isInliningLambda ), - reifiedTypeInliner, isInliningLambda, classRegeneration + reifiedTypeInliner, lambdaInfo, classRegeneration ) } open val callSiteInfo: InlineCallSiteInfo get() { - return parent?.callSiteInfo ?: throw AssertionError("At least root context should return proper value") + return parent!!.callSiteInfo } fun findAnonymousObjectTransformationInfo(internalName: String): AnonymousObjectTransformationInfo? { - if (root.internalNameToAnonymousObjectTransformationInfo.containsKey(internalName)) { - return root.internalNameToAnonymousObjectTransformationInfo[internalName] - } - - return null + return root.internalNameToAnonymousObjectTransformationInfo[internalName] } }