[IR] KotlinLikeDumper: WIP

* rearrange some declarations
* add space for before "BLOCK"
* add comment for "RETURNABLE BLOCK"
This commit is contained in:
Zalim Bashorov
2020-11-05 23:40:10 +03:00
committed by teamcityserver
parent 0294ff4f10
commit 6a1ab1b325
@@ -424,19 +424,6 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
p(isNoinline, "noinline")
}
private val INAPPLICABLE = false
private val INAPPLICABLE_N = null
override fun visitSimpleFunction(declaration: IrSimpleFunction) {
declaration.printSimpleFunction(
"fun ",
declaration.name.asString(),
printTypeParametersAndExtensionReceiver = true,
printSignatureAndBody = true
)
p.printlnWithNoIndent()
}
private fun IrValueParameter.printExtensionReceiverParameter() {
type.printTypeWithNoIndent()
p.printWithNoIndent(".")
@@ -513,6 +500,16 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
}
}
override fun visitSimpleFunction(declaration: IrSimpleFunction) {
declaration.printSimpleFunction(
"fun ",
declaration.name.asString(),
printTypeParametersAndExtensionReceiver = true,
printSignatureAndBody = true
)
p.printlnWithNoIndent()
}
override fun visitConstructor(declaration: IrConstructor) {
// TODO primary!!!
// TODO name?
@@ -557,9 +554,6 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
p.printlnWithNoIndent()
}
private fun commentBlock(text: String) = "/* $text */"
private fun commentBlockH(text: String) = "/* $text */"
override fun visitProperty(declaration: IrProperty) {
if (options.printFakeOverridesStrategy == FakeOverridesStrategy.NONE && declaration.isFakeOverride) return
@@ -792,7 +786,20 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
p.printlnWithNoIndent()
}
override fun visitComposite(expression: IrComposite) {
expression.printStatementContainer("// COMPOSITE {", "// }", withIndentation = false)
}
override fun visitBlock(expression: IrBlock) {
// TODO special blocks using `origin`
// TODO inlineFunctionSymbol for IrReturnableBlock
// TODO no tests for IrReturnableBlock?
val kind = if (expression is IrReturnableBlock) "RETURNABLE BLOCK" else "BLOCK"
expression.printStatementContainer("{ // $kind", "}")
}
private fun IrStatementContainer.printStatementContainer(before: String, after: String, withIndentation: Boolean = true) {
// TODO type for IrContainerExpression
p.printlnWithNoIndent(before)
if (withIndentation) p.pushIndent()
@@ -876,12 +883,6 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
expression.function.printSimpleFunction("fun ", expression.function.name.asString(), printTypeParametersAndExtensionReceiver = true, printSignatureAndBody = true)
}
private fun IrFieldAccessExpression.printFieldAccess() {
// TODO receiver, superQualifierSymbol?
// TODO is not valid kotlin
p.printWithNoIndent("#" + symbol.owner.name.asString())
}
override fun visitGetField(expression: IrGetField) {
expression.printFieldAccess()
}
@@ -892,6 +893,12 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
expression.value.acceptVoid(this)
}
private fun IrFieldAccessExpression.printFieldAccess() {
// TODO receiver, superQualifierSymbol?
// TODO is not valid kotlin
p.printWithNoIndent("#" + symbol.owner.name.asString())
}
override fun visitReturn(expression: IrReturn) {
p.printWithNoIndent("return ")
expression.value.acceptVoid(this)
@@ -902,14 +909,6 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
expression.value.acceptVoid(this)
}
override fun visitComposite(expression: IrComposite) {
expression.printStatementContainer("// COMPOSITE {", "// }", withIndentation = false)
}
override fun visitBlock(expression: IrBlock) {
expression.printStatementContainer("{ //BLOCK", "}")
}
override fun visitStringConcatenation(expression: IrStringConcatenation) {
// TODO escape? see IrTextTestCaseGenerated.Expressions#testStringTemplates
expression.arguments.forEachIndexed { i, e ->
@@ -1096,4 +1095,12 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
// TODO receiver, arguments
p.printWithNoIndent("error(\"\") /* ERROR CALL */")
}
private fun commentBlock(text: String) = "/* $text */"
private fun commentBlockH(text: String) = "/* $text */"
private companion object {
private const val INAPPLICABLE = false
private val INAPPLICABLE_N = null
}
}