Normalize names of temporary variables in IrTextTests

This commit is contained in:
Steven Schäfer
2019-11-01 12:35:22 +01:00
committed by Mikhail Glukhikh
parent 740f851a10
commit 733c7579aa
73 changed files with 666 additions and 701 deletions
@@ -27,23 +27,24 @@ import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
import org.jetbrains.kotlin.utils.Printer
fun IrElement.dump(): String =
fun IrElement.dump(normalizeNames: Boolean = false): String =
StringBuilder().also { sb ->
accept(DumpIrTreeVisitor(sb), "")
accept(DumpIrTreeVisitor(sb, normalizeNames), "")
}.toString()
fun IrFile.dumpTreesFromLineNumber(lineNumber: Int): String {
fun IrFile.dumpTreesFromLineNumber(lineNumber: Int, normalizeNames: Boolean = false): String {
val sb = StringBuilder()
accept(DumpTreeFromSourceLineVisitor(fileEntry, lineNumber, sb), null)
accept(DumpTreeFromSourceLineVisitor(fileEntry, lineNumber, sb, normalizeNames), null)
return sb.toString()
}
class DumpIrTreeVisitor(
out: Appendable
out: Appendable,
normalizeNames: Boolean = false
) : IrElementVisitor<Unit, String> {
private val printer = Printer(out, " ")
private val elementRenderer = RenderIrElementVisitor()
private val elementRenderer = RenderIrElementVisitor(normalizeNames)
private fun IrType.render() = elementRenderer.renderType(this)
override fun visitElement(element: IrElement, data: String) {
@@ -355,9 +356,10 @@ class DumpIrTreeVisitor(
class DumpTreeFromSourceLineVisitor(
val fileEntry: SourceManager.FileEntry,
private val lineNumber: Int,
out: Appendable
out: Appendable,
normalizeNames: Boolean = false
) : IrElementVisitorVoid {
private val dumper = DumpIrTreeVisitor(out)
private val dumper = DumpIrTreeVisitor(out, normalizeNames)
override fun visitElement(element: IrElement) {
if (fileEntry.getLineNumber(element.startOffset) == lineNumber) {
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol
import org.jetbrains.kotlin.ir.symbols.IrSymbol
import org.jetbrains.kotlin.ir.symbols.IrTypeAliasSymbol
import org.jetbrains.kotlin.ir.symbols.IrVariableSymbol
import org.jetbrains.kotlin.ir.types.*
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.renderer.DescriptorRenderer
@@ -35,7 +36,17 @@ import org.jetbrains.kotlin.utils.addIfNotNull
fun IrElement.render() =
accept(RenderIrElementVisitor(), null)
class RenderIrElementVisitor : IrElementVisitor<String, Nothing?> {
class RenderIrElementVisitor(private val normalizeNames: Boolean = false) : IrElementVisitor<String, Nothing?> {
private val nameMap: MutableMap<IrVariableSymbol, String> = mutableMapOf()
private var temporaryIndex: Int = 0
private val IrVariable.normalizedName: String
get() {
if (!normalizeNames || (origin != IrDeclarationOrigin.IR_TEMPORARY_VARIABLE && origin != IrDeclarationOrigin.FOR_LOOP_ITERATOR))
return name.asString()
return nameMap.getOrPut(symbol) { "tmp_${temporaryIndex++}" }
}
fun renderType(type: IrType) = type.render()
@@ -179,7 +190,7 @@ class RenderIrElementVisitor : IrElementVisitor<String, Nothing?> {
buildTrimEnd {
if (declaration.isVar) append("var ") else append("val ")
append(declaration.name.asString())
append(declaration.normalizedName)
append(": ")
append(declaration.type.render())
append(' ')
@@ -455,7 +466,7 @@ class RenderIrElementVisitor : IrElementVisitor<String, Nothing?> {
override fun visitVariable(declaration: IrVariable, data: Nothing?): String =
declaration.runTrimEnd {
"VAR ${renderOriginIfNonTrivial()}name:$name type:${type.render()} ${renderVariableFlags()}"
"VAR ${renderOriginIfNonTrivial()}name:$normalizedName type:${type.render()} ${renderVariableFlags()}"
}