Clean code. Add LambdaInfo to InliningContext

This commit is contained in:
Mikhael Bogdanov
2017-05-12 14:55:06 +02:00
parent 9dae183e3a
commit 9fdd4c647a
2 changed files with 20 additions and 20 deletions
@@ -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.*
@@ -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<String, AnonymousObjectTransformationInfo>()
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<String, String?>()
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<String, String?>, isInliningLambda: Boolean
@JvmOverloads
fun subInline(
generator: NameGenerator,
additionalTypeMappings: Map<String, String?> = 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]
}
}