[K/N][IR] Moved local declarations names invention down the pipeline
This commit is contained in:
+2
-2
@@ -133,7 +133,7 @@ private val extractLocalClassesFromInlineBodies = createFileLoweringPhase(
|
||||
},
|
||||
name = "ExtractLocalClassesFromInlineBodies",
|
||||
description = "Extraction of local classes from inline bodies",
|
||||
prerequisite = setOf(sharedVariablesPhase), // TODO: add "soft" dependency on inventNamesForLocalClasses
|
||||
prerequisite = setOf(sharedVariablesPhase),
|
||||
)
|
||||
|
||||
private val wrapInlineDeclarationsWithReifiedTypeParametersLowering = createFileLoweringPhase(
|
||||
@@ -509,7 +509,6 @@ private fun PhaseEngine<NativeGenerationState>.getAllLowerings() = listOfNotNull
|
||||
lateinitPhase,
|
||||
sharedVariablesPhase,
|
||||
lowerOuterThisInInlineFunctionsPhase,
|
||||
inventNamesForLocalClasses,
|
||||
extractLocalClassesFromInlineBodies,
|
||||
wrapInlineDeclarationsWithReifiedTypeParametersLowering,
|
||||
inlinePhase,
|
||||
@@ -528,6 +527,7 @@ private fun PhaseEngine<NativeGenerationState>.getAllLowerings() = listOfNotNull
|
||||
stringConcatenationTypeNarrowingPhase.takeIf { context.config.optimizationsEnabled },
|
||||
enumConstructorsPhase,
|
||||
initializersPhase,
|
||||
inventNamesForLocalClasses,
|
||||
localFunctionsPhase,
|
||||
volatilePhase,
|
||||
tailrecPhase,
|
||||
|
||||
+4
-1
@@ -12,7 +12,10 @@ import org.jetbrains.kotlin.ir.declarations.IrAttributeContainer
|
||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||
|
||||
// TODO: consider replacing '$' by another delimeter that can't be used in class name specified with backticks (``)
|
||||
internal class NativeInventNamesForLocalClasses(val generationState: NativeGenerationState) : InventNamesForLocalClasses(allowTopLevelCallables = true) {
|
||||
internal class NativeInventNamesForLocalClasses(val generationState: NativeGenerationState) : InventNamesForLocalClasses(
|
||||
allowTopLevelCallables = true,
|
||||
generateNamesForRegeneratedObjects = true
|
||||
) {
|
||||
override fun computeTopLevelClassName(clazz: IrClass): String = clazz.name.asString()
|
||||
override fun sanitizeNameIfNeeded(name: String) = name
|
||||
|
||||
|
||||
@@ -147,7 +147,7 @@ private fun checkLocalClasses(args: Array<String>) {
|
||||
clazz = Local::class,
|
||||
expectedQualifiedName = null,
|
||||
expectedSimpleName = "Local",
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkLocalClasses\$3\$Local",
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkLocalClasses\$Local",
|
||||
expectedInstance = Local(),
|
||||
expectedNotInstance = Any()
|
||||
)
|
||||
@@ -155,7 +155,7 @@ private fun checkLocalClasses(args: Array<String>) {
|
||||
clazz = Local.Inner::class,
|
||||
expectedQualifiedName = null,
|
||||
expectedSimpleName = "Inner",
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkLocalClasses\$3\$Local\$Inner",
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkLocalClasses\$Local\$Inner",
|
||||
expectedInstance = Local().Inner(),
|
||||
expectedNotInstance = Any()
|
||||
)
|
||||
@@ -171,7 +171,7 @@ private fun checkLocalClasses(args: Array<String>) {
|
||||
clazz = Local::class,
|
||||
expectedQualifiedName = null,
|
||||
expectedSimpleName = "Local",
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkLocalClasses\$4\$Local",
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkLocalClasses\$3\$Local",
|
||||
expectedInstance = Local(),
|
||||
expectedNotInstance = Any()
|
||||
)
|
||||
@@ -179,7 +179,7 @@ private fun checkLocalClasses(args: Array<String>) {
|
||||
clazz = Local.Inner::class,
|
||||
expectedQualifiedName = null,
|
||||
expectedSimpleName = "Inner",
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkLocalClasses\$4\$Local\$Inner",
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkLocalClasses\$3\$Local\$Inner",
|
||||
expectedInstance = Local().Inner(),
|
||||
expectedNotInstance = Any()
|
||||
)
|
||||
@@ -249,7 +249,7 @@ private fun checkAnonymousObjects(args: Array<String>) {
|
||||
clazz = this::class,
|
||||
expectedQualifiedName = null,
|
||||
expectedSimpleName = null,
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkAnonymousObjects\$3\$1",
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkAnonymousObjects\$2\$1",
|
||||
expectedInstance = this,
|
||||
expectedNotInstance = Any()
|
||||
)
|
||||
@@ -257,7 +257,7 @@ private fun checkAnonymousObjects(args: Array<String>) {
|
||||
clazz = this.innerKClass,
|
||||
expectedQualifiedName = null,
|
||||
expectedSimpleName = "Inner",
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkAnonymousObjects\$3\$1\$Inner",
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkAnonymousObjects\$2\$1\$Inner",
|
||||
expectedInstance = this.Inner(),
|
||||
expectedNotInstance = Any()
|
||||
)
|
||||
@@ -275,7 +275,7 @@ private fun checkAnonymousObjects(args: Array<String>) {
|
||||
clazz = this::class,
|
||||
expectedQualifiedName = null,
|
||||
expectedSimpleName = null,
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkAnonymousObjects\$4\$1",
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkAnonymousObjects\$3\$1",
|
||||
expectedInstance = this,
|
||||
expectedNotInstance = Any()
|
||||
)
|
||||
@@ -283,7 +283,7 @@ private fun checkAnonymousObjects(args: Array<String>) {
|
||||
clazz = this.innerKClass,
|
||||
expectedQualifiedName = null,
|
||||
expectedSimpleName = "Inner",
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkAnonymousObjects\$4\$1\$Inner",
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkAnonymousObjects\$3\$1\$Inner",
|
||||
expectedInstance = this.Inner(),
|
||||
expectedNotInstance = Any()
|
||||
)
|
||||
@@ -292,6 +292,32 @@ private fun checkAnonymousObjects(args: Array<String>) {
|
||||
|
||||
// Anonymous object inside of inlined lambda.
|
||||
run {
|
||||
with(object : Any() {
|
||||
val captured = args
|
||||
inner class Inner
|
||||
val innerKClass = Inner::class
|
||||
}) {
|
||||
checkClass(
|
||||
clazz = this::class,
|
||||
expectedQualifiedName = null,
|
||||
expectedSimpleName = null,
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkAnonymousObjects\$4",
|
||||
expectedInstance = this,
|
||||
expectedNotInstance = Any()
|
||||
)
|
||||
checkClass(
|
||||
clazz = this.innerKClass,
|
||||
expectedQualifiedName = null,
|
||||
expectedSimpleName = "Inner",
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkAnonymousObjects\$4\$Inner",
|
||||
expectedInstance = this.Inner(),
|
||||
expectedNotInstance = Any()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// Anonymous object inside of suspend lambda.
|
||||
suspend {
|
||||
with(object : Any() {
|
||||
val captured = args
|
||||
inner class Inner
|
||||
@@ -314,32 +340,6 @@ private fun checkAnonymousObjects(args: Array<String>) {
|
||||
expectedNotInstance = Any()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// Anonymous object inside of suspend lambda.
|
||||
suspend {
|
||||
with(object : Any() {
|
||||
val captured = args
|
||||
inner class Inner
|
||||
val innerKClass = Inner::class
|
||||
}) {
|
||||
checkClass(
|
||||
clazz = this::class,
|
||||
expectedQualifiedName = null,
|
||||
expectedSimpleName = null,
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkAnonymousObjects\$6\$1",
|
||||
expectedInstance = this,
|
||||
expectedNotInstance = Any()
|
||||
)
|
||||
checkClass(
|
||||
clazz = this.innerKClass,
|
||||
expectedQualifiedName = null,
|
||||
expectedSimpleName = "Inner",
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkAnonymousObjects\$6\$1\$Inner",
|
||||
expectedInstance = this.Inner(),
|
||||
expectedNotInstance = Any()
|
||||
)
|
||||
}
|
||||
}.runCoroutine()
|
||||
|
||||
// Anonymous object inside of suspend function.
|
||||
@@ -383,7 +383,7 @@ private fun checkAnonymousObjectsAssignedToProperty(args: Array<String>) {
|
||||
clazz = obj::class,
|
||||
expectedQualifiedName = null,
|
||||
expectedSimpleName = null,
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkAnonymousObjectsAssignedToProperty\$obj\$1",
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkAnonymousObjectsAssignedToProperty\$1",
|
||||
expectedInstance = obj,
|
||||
expectedNotInstance = Any()
|
||||
)
|
||||
@@ -391,7 +391,7 @@ private fun checkAnonymousObjectsAssignedToProperty(args: Array<String>) {
|
||||
clazz = obj.innerKClass,
|
||||
expectedQualifiedName = null,
|
||||
expectedSimpleName = "Inner",
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkAnonymousObjectsAssignedToProperty\$obj\$1\$Inner",
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkAnonymousObjectsAssignedToProperty\$1\$Inner",
|
||||
expectedInstance = obj.Inner(),
|
||||
expectedNotInstance = Any()
|
||||
)
|
||||
@@ -407,7 +407,7 @@ private fun checkAnonymousObjectsAssignedToProperty(args: Array<String>) {
|
||||
clazz = obj::class,
|
||||
expectedQualifiedName = null,
|
||||
expectedSimpleName = null,
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkAnonymousObjectsAssignedToProperty\$1\$obj\$1",
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkAnonymousObjectsAssignedToProperty\$2\$1",
|
||||
expectedInstance = obj,
|
||||
expectedNotInstance = Any()
|
||||
)
|
||||
@@ -415,7 +415,7 @@ private fun checkAnonymousObjectsAssignedToProperty(args: Array<String>) {
|
||||
clazz = obj.innerKClass,
|
||||
expectedQualifiedName = null,
|
||||
expectedSimpleName = "Inner",
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkAnonymousObjectsAssignedToProperty\$1\$obj\$1\$Inner",
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkAnonymousObjectsAssignedToProperty\$2\$1\$Inner",
|
||||
expectedInstance = obj.Inner(),
|
||||
expectedNotInstance = Any()
|
||||
)
|
||||
@@ -432,7 +432,7 @@ private fun checkAnonymousObjectsAssignedToProperty(args: Array<String>) {
|
||||
clazz = obj::class,
|
||||
expectedQualifiedName = null,
|
||||
expectedSimpleName = null,
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkAnonymousObjectsAssignedToProperty\$2\$obj\$1",
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkAnonymousObjectsAssignedToProperty\$3\$1",
|
||||
expectedInstance = obj,
|
||||
expectedNotInstance = Any()
|
||||
)
|
||||
@@ -440,7 +440,7 @@ private fun checkAnonymousObjectsAssignedToProperty(args: Array<String>) {
|
||||
clazz = obj.innerKClass,
|
||||
expectedQualifiedName = null,
|
||||
expectedSimpleName = "Inner",
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkAnonymousObjectsAssignedToProperty\$2\$obj\$1\$Inner",
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkAnonymousObjectsAssignedToProperty\$3\$1\$Inner",
|
||||
expectedInstance = obj.Inner(),
|
||||
expectedNotInstance = Any()
|
||||
)
|
||||
@@ -457,7 +457,7 @@ private fun checkAnonymousObjectsAssignedToProperty(args: Array<String>) {
|
||||
clazz = obj::class,
|
||||
expectedQualifiedName = null,
|
||||
expectedSimpleName = null,
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkAnonymousObjectsAssignedToProperty\$3\$obj\$1",
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkAnonymousObjectsAssignedToProperty\$4",
|
||||
expectedInstance = obj,
|
||||
expectedNotInstance = Any()
|
||||
)
|
||||
@@ -465,7 +465,7 @@ private fun checkAnonymousObjectsAssignedToProperty(args: Array<String>) {
|
||||
clazz = obj.innerKClass,
|
||||
expectedQualifiedName = null,
|
||||
expectedSimpleName = "Inner",
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkAnonymousObjectsAssignedToProperty\$3\$obj\$1\$Inner",
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkAnonymousObjectsAssignedToProperty\$4\$Inner",
|
||||
expectedInstance = obj.Inner(),
|
||||
expectedNotInstance = Any()
|
||||
)
|
||||
@@ -482,7 +482,7 @@ private fun checkAnonymousObjectsAssignedToProperty(args: Array<String>) {
|
||||
clazz = obj::class,
|
||||
expectedQualifiedName = null,
|
||||
expectedSimpleName = null,
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkAnonymousObjectsAssignedToProperty\$4\$obj\$1",
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkAnonymousObjectsAssignedToProperty\$5\$1",
|
||||
expectedInstance = obj,
|
||||
expectedNotInstance = Any()
|
||||
)
|
||||
@@ -490,7 +490,7 @@ private fun checkAnonymousObjectsAssignedToProperty(args: Array<String>) {
|
||||
clazz = obj.innerKClass,
|
||||
expectedQualifiedName = null,
|
||||
expectedSimpleName = "Inner",
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkAnonymousObjectsAssignedToProperty\$4\$obj\$1\$Inner",
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkAnonymousObjectsAssignedToProperty\$5\$1\$Inner",
|
||||
expectedInstance = obj.Inner(),
|
||||
expectedNotInstance = Any()
|
||||
)
|
||||
@@ -509,7 +509,7 @@ private fun checkAnonymousObjectsAssignedToProperty(args: Array<String>) {
|
||||
clazz = obj::class,
|
||||
expectedQualifiedName = null,
|
||||
expectedSimpleName = null,
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkAnonymousObjectsAssignedToProperty\$suspendFunWithAnonymousObject\$obj\$1",
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkAnonymousObjectsAssignedToProperty\$suspendFunWithAnonymousObject\$2",
|
||||
expectedInstance = obj,
|
||||
expectedNotInstance = Any()
|
||||
)
|
||||
@@ -517,7 +517,7 @@ private fun checkAnonymousObjectsAssignedToProperty(args: Array<String>) {
|
||||
clazz = obj.innerKClass,
|
||||
expectedQualifiedName = null,
|
||||
expectedSimpleName = "Inner",
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkAnonymousObjectsAssignedToProperty\$suspendFunWithAnonymousObject\$obj\$1\$Inner",
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkAnonymousObjectsAssignedToProperty\$suspendFunWithAnonymousObject\$2\$Inner",
|
||||
expectedInstance = obj.Inner(),
|
||||
expectedNotInstance = Any()
|
||||
)
|
||||
@@ -533,7 +533,7 @@ private fun checkFunctionReferences() {
|
||||
clazz = ref::class,
|
||||
expectedQualifiedName = null,
|
||||
expectedSimpleName = null,
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkFunctionReferences\$ref\$1",
|
||||
expectedToStringName = "class codegen.kclass.kclass0.checkFunctionReferences\$1",
|
||||
expectedInstance = ref,
|
||||
expectedNotInstance = Any()
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user