IR: move IrElement.transform implementation to IrElementBase

To avoid extra indirection via `IrElement$DefaultImpls` for elements
whose `transform` uses the default implementation. And also, to simplify
migration to auto-generated IR tree.
This commit is contained in:
Alexander Udalov
2022-02-09 01:20:28 +01:00
parent 2ce91853ec
commit 4bec1b08f9
3 changed files with 10 additions and 4 deletions
@@ -27,9 +27,11 @@ class MergeCfgElement(val from: IrElement, val name: String) : CfgIrElement {
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D) = visitor.visitElement(this, data)
override fun <D> transform(transformer: IrElementTransformer<D>, data: D): IrElement = accept(transformer, data)
override fun <D> acceptChildren(visitor: IrElementVisitor<Unit, D>, data: D) = Unit
override fun <D> transformChildren(transformer: IrElementTransformer<D>, data: D) = Unit
override fun toString() = "$name: ${from.dump()}"
}
}
@@ -15,8 +15,7 @@ interface IrElement {
fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R
fun <D> transform(transformer: IrElementTransformer<D>, data: D): IrElement =
accept(transformer, data)
fun <D> transform(transformer: IrElementTransformer<D>, data: D): IrElement
fun <D> acceptChildren(visitor: IrElementVisitor<Unit, D>, data: D)
@@ -16,4 +16,9 @@
package org.jetbrains.kotlin.ir
abstract class IrElementBase : IrElement
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
abstract class IrElementBase : IrElement {
override fun <D> transform(transformer: IrElementTransformer<D>, data: D): IrElement =
accept(transformer, data)
}