IR: rename DeclarationFactory to InnerClassesSupport, move out of context
Methods of the common interface DeclarationFactory were only used in lowerings in InnerClassesLowering, which were used in JVM and JS, not Native. Therefore, it makes sense to have this as a separate interface and pass its implementation to these lowerings directly, instead of declaring it in the common context (which is not going to be implemented in Native).
This commit is contained in:
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.ir.backend.js
|
||||
import org.jetbrains.kotlin.backend.common.atMostOne
|
||||
import org.jetbrains.kotlin.backend.common.ir.Ir
|
||||
import org.jetbrains.kotlin.backend.common.ir.Symbols
|
||||
import org.jetbrains.kotlin.backend.js.JsDeclarationFactory
|
||||
import org.jetbrains.kotlin.ir.backend.js.lower.JsInnerClassesSupport
|
||||
import org.jetbrains.kotlin.builtins.PrimitiveType
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
@@ -134,7 +134,7 @@ class JsIrBackendContext(
|
||||
get() = testContainerFuns
|
||||
|
||||
override val mapping = JsMapping()
|
||||
override val declarationFactory = JsDeclarationFactory(mapping)
|
||||
val innerClassesSupport = JsInnerClassesSupport(mapping)
|
||||
|
||||
companion object {
|
||||
val KOTLIN_PACKAGE_FQN = FqName.fromSegments(listOf("kotlin"))
|
||||
|
||||
@@ -375,20 +375,20 @@ private val localClassExtractionPhase = makeBodyLoweringPhase(
|
||||
)
|
||||
|
||||
private val innerClassesLoweringPhase = makeDeclarationTransformerPhase(
|
||||
::InnerClassesLowering,
|
||||
{ context -> InnerClassesLowering(context, context.innerClassesSupport) },
|
||||
name = "InnerClassesLowering",
|
||||
description = "Capture outer this reference to inner class"
|
||||
)
|
||||
|
||||
private val innerClassesMemberBodyLoweringPhase = makeBodyLoweringPhase(
|
||||
::InnerClassesMemberBodyLowering,
|
||||
{ context -> InnerClassesMemberBodyLowering(context, context.innerClassesSupport) },
|
||||
name = "InnerClassesMemberBody",
|
||||
description = "Replace `this` with 'outer this' field references",
|
||||
prerequisite = setOf(innerClassesLoweringPhase)
|
||||
)
|
||||
|
||||
private val innerClassConstructorCallsLoweringPhase = makeBodyLoweringPhase(
|
||||
::InnerClassConstructorCallsLowering,
|
||||
{ context -> InnerClassConstructorCallsLowering(context, context.innerClassesSupport) },
|
||||
name = "InnerClassConstructorCallsLowering",
|
||||
description = "Replace inner class constructor invocation"
|
||||
)
|
||||
|
||||
+4
-4
@@ -3,10 +3,10 @@
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.backend.js
|
||||
package org.jetbrains.kotlin.ir.backend.js.lower
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.getOrPut
|
||||
import org.jetbrains.kotlin.backend.common.ir.DeclarationFactory
|
||||
import org.jetbrains.kotlin.backend.common.lower.InnerClassesSupport
|
||||
import org.jetbrains.kotlin.backend.common.ir.copyTo
|
||||
import org.jetbrains.kotlin.backend.common.ir.copyTypeParametersFrom
|
||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.ir.util.defaultType
|
||||
import org.jetbrains.kotlin.ir.util.dump
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
class JsDeclarationFactory(mapping: JsMapping) : DeclarationFactory {
|
||||
class JsInnerClassesSupport(mapping: JsMapping) : InnerClassesSupport {
|
||||
private val outerThisFieldSymbols = mapping.outerThisFieldSymbols
|
||||
private val innerClassConstructors = mapping.innerClassConstructors
|
||||
private val originalInnerClassPrimaryConstructorByClass = mapping.originalInnerClassPrimaryConstructorByClass
|
||||
@@ -36,7 +36,7 @@ class JsDeclarationFactory(mapping: JsMapping) : DeclarationFactory {
|
||||
?: throw AssertionError("No containing class for inner class ${innerClass.dump()}")
|
||||
|
||||
buildField {
|
||||
origin = DeclarationFactory.FIELD_FOR_OUTER_THIS
|
||||
origin = InnerClassesSupport.FIELD_FOR_OUTER_THIS
|
||||
name = Name.identifier("\$this")
|
||||
type = outerClass.defaultType
|
||||
visibility = Visibilities.PROTECTED
|
||||
Reference in New Issue
Block a user