IR: introduce abstract class IrDeclarationBase
The main purpose of this class is to improve performance of IR visitors and transformers. `IrElementVisitor.visitDeclaration` now takes IrDeclarationBase as a parameter, and therefore the call to `accept` there is now a virtual class call, instead of an interface call.
This commit is contained in:
+1
-1
@@ -312,7 +312,7 @@ class CheckIrElementVisitor(
|
||||
expression.symbol.ensureBound(expression)
|
||||
}
|
||||
|
||||
override fun visitDeclaration(declaration: IrDeclaration) {
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase) {
|
||||
super.visitDeclaration(declaration)
|
||||
|
||||
if (declaration is IrOverridableDeclaration<*>) {
|
||||
|
||||
@@ -98,7 +98,7 @@ object CheckDeclarationParentsVisitor : IrElementVisitor<Unit, IrDeclarationPare
|
||||
element.acceptChildren(this, element as? IrDeclarationParent ?: data)
|
||||
}
|
||||
|
||||
override fun visitDeclaration(declaration: IrDeclaration, data: IrDeclarationParent?) {
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase, data: IrDeclarationParent?) {
|
||||
checkParent(declaration, data)
|
||||
super.visitDeclaration(declaration, data)
|
||||
}
|
||||
|
||||
@@ -127,7 +127,7 @@ fun BodyLoweringPass.runOnFilePostfix(irFile: IrFile, withLocalDeclarations: Boo
|
||||
element.acceptChildren(this, data)
|
||||
}
|
||||
|
||||
override fun visitDeclaration(declaration: IrDeclaration, data: IrDeclaration?) {
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase, data: IrDeclaration?) {
|
||||
declaration.acceptChildren(this, declaration)
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -78,7 +78,7 @@ private fun IrBody.move(
|
||||
return super.visitBlock(expression)
|
||||
}
|
||||
|
||||
override fun visitDeclaration(declaration: IrDeclaration): IrStatement {
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase): IrStatement {
|
||||
if (declaration.parent == source)
|
||||
declaration.parent = target
|
||||
return super.visitDeclaration(declaration)
|
||||
|
||||
@@ -364,7 +364,7 @@ object SetDeclarationsParentVisitor : IrElementVisitor<Unit, IrDeclarationParent
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitDeclaration(declaration: IrDeclaration, data: IrDeclarationParent) {
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase, data: IrDeclarationParent) {
|
||||
declaration.parent = data
|
||||
super.visitDeclaration(declaration, data)
|
||||
}
|
||||
|
||||
+2
-2
@@ -105,7 +105,7 @@ class InlineClassLowering(val context: CommonBackendContext) {
|
||||
return expression
|
||||
}
|
||||
|
||||
override fun visitDeclaration(declaration: IrDeclaration): IrStatement {
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase): IrStatement {
|
||||
declaration.transformChildrenVoid(this)
|
||||
if (declaration.parent == irConstructor)
|
||||
declaration.parent = staticMethod
|
||||
@@ -142,7 +142,7 @@ class InlineClassLowering(val context: CommonBackendContext) {
|
||||
statements.addAll((functionBody as IrBlockBody).statements)
|
||||
|
||||
transformChildrenVoid(object : IrElementTransformerVoid() {
|
||||
override fun visitDeclaration(declaration: IrDeclaration): IrStatement {
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase): IrStatement {
|
||||
declaration.transformChildrenVoid(this)
|
||||
if (declaration.parent == function)
|
||||
declaration.parent = staticMethod
|
||||
|
||||
+1
-1
@@ -442,7 +442,7 @@ class LocalDeclarationsLowering(
|
||||
return super.visitDeclarationReference(expression)
|
||||
}
|
||||
|
||||
override fun visitDeclaration(declaration: IrDeclaration): IrStatement {
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase): IrStatement {
|
||||
if (declaration is IrSymbolOwner && declaration in transformedDeclarations) {
|
||||
TODO()
|
||||
}
|
||||
|
||||
+1
-1
@@ -91,7 +91,7 @@ class SharedVariablesLowering(val context: BackendContext) : BodyLoweringPass {
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitDeclaration(declaration: IrDeclaration, data: IrDeclarationParent?) {
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase, data: IrDeclarationParent?) {
|
||||
super.visitDeclaration(declaration, declaration as? IrDeclarationParent ?: data)
|
||||
}
|
||||
|
||||
|
||||
+3
-6
@@ -24,10 +24,7 @@ import org.jetbrains.kotlin.ir.builders.IrBuilderWithScope
|
||||
import org.jetbrains.kotlin.ir.builders.createTmpVariable
|
||||
import org.jetbrains.kotlin.ir.builders.irCall
|
||||
import org.jetbrains.kotlin.ir.builders.irGet
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFile
|
||||
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
||||
import org.jetbrains.kotlin.ir.declarations.IrSymbolDeclaration
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||
import org.jetbrains.kotlin.ir.expressions.IrStringConcatenation
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
@@ -106,7 +103,7 @@ private class StringConcatenationTransformer(val lower: StringConcatenationLower
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitDeclaration(declaration: IrDeclaration): IrStatement {
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase): IrStatement {
|
||||
if (declaration !is IrSymbolDeclaration<*>) {
|
||||
return super.visitDeclaration(declaration)
|
||||
}
|
||||
@@ -120,4 +117,4 @@ private class StringConcatenationTransformer(val lower: StringConcatenationLower
|
||||
return this@with
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -70,7 +70,7 @@ fun dumpIrElement(actionState: ActionState, data: IrElement, context: Any?): Str
|
||||
element.acceptChildrenVoid(this)
|
||||
}
|
||||
|
||||
override fun visitDeclaration(declaration: IrDeclaration) {
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase) {
|
||||
if (declaration is IrDeclarationWithName && FqName(dumpOnlyFqName) == declaration.fqNameWhenAvailable) {
|
||||
dumpText += declaration.dump()
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user