IR: minor, give names to anonymous lowering visitors

To improve stacktraces and make the code a bit more readable.
This commit is contained in:
Alexander Udalov
2020-10-09 20:03:08 +02:00
parent 3979cde738
commit 2be7afc7f9
@@ -76,29 +76,37 @@ fun FileLoweringPass.lower(moduleFragment: IrModuleFragment) = moduleFragment.fi
//} //}
fun ClassLoweringPass.runOnFilePostfix(irFile: IrFile) { fun ClassLoweringPass.runOnFilePostfix(irFile: IrFile) {
irFile.acceptVoid(object : IrElementVisitorVoid { irFile.acceptVoid(ClassLoweringVisitor(this))
}
private class ClassLoweringVisitor(
private val loweringPass: ClassLoweringPass
) : IrElementVisitorVoid {
override fun visitElement(element: IrElement) { override fun visitElement(element: IrElement) {
element.acceptChildrenVoid(this) element.acceptChildrenVoid(this)
} }
override fun visitClass(declaration: IrClass) { override fun visitClass(declaration: IrClass) {
declaration.acceptChildrenVoid(this) declaration.acceptChildrenVoid(this)
lower(declaration) loweringPass.lower(declaration)
} }
})
} }
fun ScriptLoweringPass.runOnFilePostfix(irFile: IrFile) { fun ScriptLoweringPass.runOnFilePostfix(irFile: IrFile) {
irFile.acceptVoid(object : IrElementVisitorVoid { irFile.acceptVoid(ScriptLoweringVisitor(this))
}
private class ScriptLoweringVisitor(
private val loweringPass: ScriptLoweringPass
) : IrElementVisitorVoid {
override fun visitElement(element: IrElement) { override fun visitElement(element: IrElement) {
element.acceptChildrenVoid(this) element.acceptChildrenVoid(this)
} }
override fun visitScript(declaration: IrScript) { override fun visitScript(declaration: IrScript) {
declaration.acceptChildrenVoid(this) declaration.acceptChildrenVoid(this)
lower(declaration) loweringPass.lower(declaration)
} }
})
} }
fun DeclarationContainerLoweringPass.asClassLoweringPass() = object : ClassLoweringPass { fun DeclarationContainerLoweringPass.asClassLoweringPass() = object : ClassLoweringPass {
@@ -125,8 +133,17 @@ fun BodyLoweringPass.runOnFilePostfix(
withLocalDeclarations: Boolean = false, withLocalDeclarations: Boolean = false,
allowDeclarationModification: Boolean = false allowDeclarationModification: Boolean = false
) { ) {
ArrayList(irFile.declarations).forEach { val visitor = BodyLoweringVisitor(this, withLocalDeclarations, allowDeclarationModification)
it.accept(object : IrElementVisitor<Unit, IrDeclaration?> { for (declaration in ArrayList(irFile.declarations)) {
declaration.accept(visitor, null)
}
}
private class BodyLoweringVisitor(
private val loweringPass: BodyLoweringPass,
private val withLocalDeclarations: Boolean,
private val allowDeclarationModification: Boolean,
) : IrElementVisitor<Unit, IrDeclaration?> {
override fun visitElement(element: IrElement, data: IrDeclaration?) { override fun visitElement(element: IrElement, data: IrDeclaration?) {
element.acceptChildren(this, data) element.acceptChildren(this, data)
} }
@@ -144,10 +161,10 @@ fun BodyLoweringPass.runOnFilePostfix(
override fun visitBody(body: IrBody, data: IrDeclaration?) { override fun visitBody(body: IrBody, data: IrDeclaration?) {
if (withLocalDeclarations) body.acceptChildren(this, null) if (withLocalDeclarations) body.acceptChildren(this, null)
if (allowDeclarationModification) { if (allowDeclarationModification) {
lower(body, data!!) loweringPass.lower(body, data!!)
} else { } else {
stageController.bodyLowering { stageController.bodyLowering {
lower(body, data!!) loweringPass.lower(body, data!!)
} }
} }
} }
@@ -159,9 +176,6 @@ fun BodyLoweringPass.runOnFilePostfix(
} }
declaration.thisReceiver.accept(this, declaration) declaration.thisReceiver.accept(this, declaration)
} }
}, null)
}
} }
fun FunctionLoweringPass.runOnFilePostfix(irFile: IrFile) { fun FunctionLoweringPass.runOnFilePostfix(irFile: IrFile) {