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