IR: make extractedLocalClasses a JS-only field
This commit is contained in:
@@ -30,6 +30,5 @@ interface BackendContext {
|
||||
val irBuiltIns: IrBuiltIns
|
||||
val sharedVariablesManager: SharedVariablesManager
|
||||
val internalPackageFqn: FqName
|
||||
val extractedLocalClasses: MutableSet<IrClass>
|
||||
val irFactory: IrFactory
|
||||
}
|
||||
|
||||
+5
-19
@@ -8,18 +8,17 @@ package org.jetbrains.kotlin.backend.common.lower
|
||||
import org.jetbrains.kotlin.backend.common.*
|
||||
import org.jetbrains.kotlin.backend.common.ir.addChild
|
||||
import org.jetbrains.kotlin.backend.common.ir.setDeclarationsParent
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
import org.jetbrains.kotlin.ir.IrStatement
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.expressions.IrBody
|
||||
import org.jetbrains.kotlin.ir.expressions.IrStatementContainer
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.IrCompositeImpl
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
|
||||
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
|
||||
import org.jetbrains.kotlin.ir.visitors.acceptVoid
|
||||
|
||||
//This lower takes part of old LocalDeclarationLowering job to pop up local classes from functions
|
||||
open class LocalClassPopupLowering(val context: BackendContext) : BodyLoweringPass {
|
||||
open class LocalClassPopupLowering(
|
||||
val context: BackendContext,
|
||||
val recordExtractedLocalClasses: BackendContext.(IrClass) -> Unit = {},
|
||||
) : BodyLoweringPass {
|
||||
override fun lower(irFile: IrFile) {
|
||||
runOnFilePostfix(irFile, withLocalDeclarations = true, allowDeclarationModification = true)
|
||||
}
|
||||
@@ -78,20 +77,7 @@ open class LocalClassPopupLowering(val context: BackendContext) : BodyLoweringPa
|
||||
}
|
||||
else -> error("Inexpected container type $newContainer")
|
||||
}
|
||||
|
||||
local.acceptVoid(object : IrElementVisitorVoid {
|
||||
override fun visitElement(element: IrElement) {
|
||||
element.acceptChildrenVoid(this)
|
||||
}
|
||||
|
||||
override fun visitBody(body: IrBody) {
|
||||
}
|
||||
|
||||
override fun visitClass(declaration: IrClass) {
|
||||
super.visitClass(declaration)
|
||||
context.extractedLocalClasses += declaration
|
||||
}
|
||||
})
|
||||
context.recordExtractedLocalClasses(local)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+4
-1
@@ -125,7 +125,10 @@ class LocalClassesInInlineFunctionsLowering(val context: CommonBackendContext) :
|
||||
}
|
||||
}
|
||||
|
||||
class LocalClassesExtractionFromInlineFunctionsLowering(context: CommonBackendContext) : LocalClassPopupLowering(context) {
|
||||
class LocalClassesExtractionFromInlineFunctionsLowering(
|
||||
context: CommonBackendContext,
|
||||
recordExtractedLocalClasses: BackendContext.(IrClass) -> Unit = {},
|
||||
) : LocalClassPopupLowering(context, recordExtractedLocalClasses) {
|
||||
private val classesToExtract = mutableSetOf<IrClass>()
|
||||
|
||||
override fun lower(irBody: IrBody, container: IrDeclaration) {
|
||||
|
||||
Reference in New Issue
Block a user