diff --git a/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/builders/BasicBlockBuilder.kt b/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/builders/BasicBlockBuilder.kt index 070f0b41cc3..8858c1736a6 100644 --- a/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/builders/BasicBlockBuilder.kt +++ b/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/builders/BasicBlockBuilder.kt @@ -16,16 +16,16 @@ package org.jetbrains.kotlin.ir2cfg.builders -import org.jetbrains.kotlin.ir.IrElement +import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir2cfg.graph.BasicBlock interface BasicBlockBuilder { val incoming: BlockConnectorBuilder? - fun add(element: IrElement) + fun add(element: IrStatement) - val last: IrElement? + val last: IrStatement? fun build(): BasicBlock } \ No newline at end of file diff --git a/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/builders/ControlFlowGraphBuilder.kt b/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/builders/ControlFlowGraphBuilder.kt index 83c39fc859f..2b1111e9a1a 100644 --- a/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/builders/ControlFlowGraphBuilder.kt +++ b/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/builders/ControlFlowGraphBuilder.kt @@ -16,21 +16,21 @@ package org.jetbrains.kotlin.ir2cfg.builders -import org.jetbrains.kotlin.ir.IrElement +import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir2cfg.graph.ControlFlowGraph interface ControlFlowGraphBuilder { // Add element to the builder pointer - fun add(element: IrElement) + fun add(element: IrStatement) // Move builder pointer to element without changing graph - fun move(to: IrElement) + fun move(to: IrStatement) // Connect builder pointer with the given element and move pointer to this element - fun jump(to: IrElement) + fun jump(to: IrStatement) // Connect from with to and move pointer to the destination - fun jump(to: IrElement, from: IrElement) + fun jump(to: IrStatement, from: IrStatement) // Build CFG from builder fun build(): ControlFlowGraph diff --git a/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/generators/BasicBlockImpl.kt b/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/generators/BasicBlockImpl.kt index 7c85cc07a06..1abb2c40bb8 100644 --- a/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/generators/BasicBlockImpl.kt +++ b/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/generators/BasicBlockImpl.kt @@ -16,11 +16,11 @@ package org.jetbrains.kotlin.ir2cfg.generators -import org.jetbrains.kotlin.ir.IrElement +import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir2cfg.graph.BasicBlock import org.jetbrains.kotlin.ir2cfg.graph.BlockConnector -class BasicBlockImpl(override val elements: List) : BasicBlock { +class BasicBlockImpl(override val elements: List) : BasicBlock { override var incoming: BlockConnector? = null internal set(arg) { diff --git a/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/generators/FunctionBuilder.kt b/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/generators/FunctionBuilder.kt index 703ebcd4193..ba8dff36343 100644 --- a/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/generators/FunctionBuilder.kt +++ b/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/generators/FunctionBuilder.kt @@ -16,7 +16,7 @@ package org.jetbrains.kotlin.ir2cfg.generators -import org.jetbrains.kotlin.ir.IrElement +import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.declarations.IrFunction import org.jetbrains.kotlin.ir2cfg.builders.BasicBlockBuilder import org.jetbrains.kotlin.ir2cfg.builders.BlockConnectorBuilder @@ -27,13 +27,13 @@ import org.jetbrains.kotlin.ir2cfg.graph.ControlFlowGraph class FunctionBuilder(val function: IrFunction) : ControlFlowGraphBuilder { - private val blockBuilderMap = mutableMapOf() + private val blockBuilderMap = mutableMapOf() private var currentBlockBuilder: BasicBlockBuilder? = null private val blocks = mutableListOf() - private val connectorBuilderMap = mutableMapOf() + private val connectorBuilderMap = mutableMapOf() private fun createBlockBuilder(after: BlockConnectorBuilder?): BasicBlockBuilder { val result = GeneralBlockBuilder(after) @@ -41,25 +41,25 @@ class FunctionBuilder(val function: IrFunction) : ControlFlowGraphBuilder { return result } - private fun BasicBlockBuilder.shiftTo(element: IrElement) { + private fun BasicBlockBuilder.shiftTo(element: IrStatement) { blockBuilderMap.remove(last) add(element) blockBuilderMap[element] = this } - override fun add(element: IrElement) { + override fun add(element: IrStatement) { val blockBuilder = currentBlockBuilder ?: createBlockBuilder(connectorBuilderMap[element]) blockBuilder.shiftTo(element) } - override fun move(to: IrElement) { + override fun move(to: IrStatement) { val blockBuilder = blockBuilderMap[to] ?: connectorBuilderMap[to]?.let { createBlockBuilder(it) } ?: throw AssertionError("Function generator may move to an element only to the end of a block or to connector") currentBlockBuilder = blockBuilder } - override fun jump(to: IrElement) { + override fun jump(to: IrStatement) { val blockBuilder = currentBlockBuilder ?: throw AssertionError("Function generator: no default block builder for jump") val block = blockBuilder.build() @@ -74,7 +74,7 @@ class FunctionBuilder(val function: IrFunction) : ControlFlowGraphBuilder { move(to) } - override fun jump(to: IrElement, from: IrElement) { + override fun jump(to: IrStatement, from: IrStatement) { currentBlockBuilder = blockBuilderMap[from] if (currentBlockBuilder == null) { val blockBuilder = connectorBuilderMap[from]?.let { createBlockBuilder(it) } diff --git a/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/generators/FunctionGenerator.kt b/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/generators/FunctionGenerator.kt index 629dceee774..910fb49b631 100644 --- a/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/generators/FunctionGenerator.kt +++ b/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/generators/FunctionGenerator.kt @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.ir2cfg.generators import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.ir.IrElement +import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.declarations.IrFunction import org.jetbrains.kotlin.ir.declarations.IrVariable import org.jetbrains.kotlin.ir.expressions.* @@ -32,9 +33,9 @@ class FunctionGenerator(val function: IrFunction) { val exit = MergeCfgElement(function, "Function exit") - val loopEntries = mutableMapOf() + val loopEntries = mutableMapOf() - val loopExits = mutableMapOf() + val loopExits = mutableMapOf() fun generate(): ControlFlowGraph { val visitor = FunctionVisitor() @@ -42,11 +43,11 @@ class FunctionGenerator(val function: IrFunction) { return builder.build() } - inner class FunctionVisitor : IrElementVisitor { + inner class FunctionVisitor : IrElementVisitor { inline fun IE.process(includeSelf: Boolean = true) = this.accept(this@FunctionVisitor, includeSelf) - override fun visitFunction(declaration: IrFunction, data: Boolean): IrElement? { + override fun visitFunction(declaration: IrFunction, data: Boolean): IrStatement? { if (data) { builder.add(declaration) } @@ -57,8 +58,8 @@ class FunctionGenerator(val function: IrFunction) { return result } - private fun IrStatementContainer.process(): IrElement? { - var result: IrElement? = null + private fun IrStatementContainer.process(): IrStatement? { + var result: IrStatement? = null for (statement in statements) { result = statement.process() } @@ -67,15 +68,15 @@ class FunctionGenerator(val function: IrFunction) { private fun IrElement?.isNothing() = this is IrExpression && KotlinBuiltIns.isNothing(type) - override fun visitBlockBody(body: IrBlockBody, data: Boolean): IrElement? { + override fun visitBlockBody(body: IrBlockBody, data: Boolean): IrStatement? { return body.process() } - override fun visitBlock(expression: IrBlock, data: Boolean): IrElement? { + override fun visitBlock(expression: IrBlock, data: Boolean): IrStatement? { return expression.process() ?: expression } - override fun visitVariable(declaration: IrVariable, data: Boolean): IrElement? { + override fun visitVariable(declaration: IrVariable, data: Boolean): IrStatement? { declaration.initializer?.process() return if (data) { builder.add(declaration) @@ -84,7 +85,7 @@ class FunctionGenerator(val function: IrFunction) { else null } - override fun visitReturn(expression: IrReturn, data: Boolean): IrElement? { + override fun visitReturn(expression: IrReturn, data: Boolean): IrStatement? { expression.value.process() if (data) { builder.add(expression) @@ -93,21 +94,18 @@ class FunctionGenerator(val function: IrFunction) { return expression } - override fun visitExpressionBody(body: IrExpressionBody, data: Boolean): IrElement? { - if (data) { - builder.add(body) - } + override fun visitExpressionBody(body: IrExpressionBody, data: Boolean): IrStatement? { return body.expression.process() } - override fun visitExpression(expression: IrExpression, data: Boolean): IrElement? { + override fun visitExpression(expression: IrExpression, data: Boolean): IrStatement? { if (data) { builder.add(expression) } return expression } - override fun visitWhen(expression: IrWhen, data: Boolean): IrElement? { + override fun visitWhen(expression: IrWhen, data: Boolean): IrStatement? { if (data) { builder.add(expression) } @@ -131,7 +129,7 @@ class FunctionGenerator(val function: IrFunction) { return whenExit } - override fun visitWhileLoop(loop: IrWhileLoop, data: Boolean): IrElement? { + override fun visitWhileLoop(loop: IrWhileLoop, data: Boolean): IrStatement? { if (data) { builder.add(loop) } @@ -151,7 +149,7 @@ class FunctionGenerator(val function: IrFunction) { return exit } - override fun visitDoWhileLoop(loop: IrDoWhileLoop, data: Boolean): IrElement? { + override fun visitDoWhileLoop(loop: IrDoWhileLoop, data: Boolean): IrStatement? { if (data) { builder.add(loop) } @@ -172,7 +170,7 @@ class FunctionGenerator(val function: IrFunction) { return exit } - override fun visitBreak(jump: IrBreak, data: Boolean): IrElement? { + override fun visitBreak(jump: IrBreak, data: Boolean): IrStatement? { if (data) { builder.add(jump) } @@ -180,7 +178,7 @@ class FunctionGenerator(val function: IrFunction) { return jump } - override fun visitContinue(jump: IrContinue, data: Boolean): IrElement? { + override fun visitContinue(jump: IrContinue, data: Boolean): IrStatement? { if (data) { builder.add(jump) } @@ -188,7 +186,7 @@ class FunctionGenerator(val function: IrFunction) { return jump } - override fun visitMemberAccess(expression: IrMemberAccessExpression, data: Boolean): IrElement? { + override fun visitMemberAccess(expression: IrMemberAccessExpression, data: Boolean): IrStatement? { expression.dispatchReceiver?.process() expression.extensionReceiver?.process() for (valueParameter in expression.descriptor.valueParameters) { @@ -200,7 +198,7 @@ class FunctionGenerator(val function: IrFunction) { return expression } - override fun visitTypeOperator(expression: IrTypeOperatorCall, data: Boolean): IrElement? { + override fun visitTypeOperator(expression: IrTypeOperatorCall, data: Boolean): IrStatement? { expression.argument.process() if (data) { builder.add(expression) @@ -208,7 +206,7 @@ class FunctionGenerator(val function: IrFunction) { return expression } - override fun visitElement(element: IrElement, data: Boolean): IrElement? { + override fun visitElement(element: IrElement, data: Boolean): IrStatement? { TODO("not implemented") } } diff --git a/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/generators/GeneralBlockBuilder.kt b/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/generators/GeneralBlockBuilder.kt index 5d1eba0221d..0facf5d0a4c 100644 --- a/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/generators/GeneralBlockBuilder.kt +++ b/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/generators/GeneralBlockBuilder.kt @@ -16,20 +16,20 @@ package org.jetbrains.kotlin.ir2cfg.generators -import org.jetbrains.kotlin.ir.IrElement +import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir2cfg.builders.BasicBlockBuilder import org.jetbrains.kotlin.ir2cfg.builders.BlockConnectorBuilder import org.jetbrains.kotlin.utils.toReadOnlyList class GeneralBlockBuilder(override val incoming: BlockConnectorBuilder?) : BasicBlockBuilder { - private val elements = mutableListOf() + private val elements = mutableListOf() - override fun add(element: IrElement) { + override fun add(element: IrStatement) { elements.add(element) } - override val last: IrElement? + override val last: IrStatement? get() = elements.lastOrNull() override fun build() = BasicBlockImpl(elements.toReadOnlyList()) diff --git a/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/generators/GeneralConnectorBuilder.kt b/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/generators/GeneralConnectorBuilder.kt index 0586a5def9e..133abf6cc45 100644 --- a/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/generators/GeneralConnectorBuilder.kt +++ b/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/generators/GeneralConnectorBuilder.kt @@ -16,12 +16,12 @@ package org.jetbrains.kotlin.ir2cfg.generators -import org.jetbrains.kotlin.ir.IrElement +import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir2cfg.builders.BlockConnectorBuilder import org.jetbrains.kotlin.ir2cfg.graph.BasicBlock import org.jetbrains.kotlin.utils.toReadOnlyList -class GeneralConnectorBuilder(private val element: IrElement) : BlockConnectorBuilder { +class GeneralConnectorBuilder(private val element: IrStatement) : BlockConnectorBuilder { private val next = linkedSetOf() diff --git a/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/generators/JoinBlockConnector.kt b/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/generators/JoinBlockConnector.kt index 750f2b0e277..e87c7203729 100644 --- a/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/generators/JoinBlockConnector.kt +++ b/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/generators/JoinBlockConnector.kt @@ -16,13 +16,13 @@ package org.jetbrains.kotlin.ir2cfg.generators -import org.jetbrains.kotlin.ir.IrElement +import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir2cfg.graph.BasicBlock import org.jetbrains.kotlin.ir2cfg.graph.BlockConnector class JoinBlockConnector( override val previousBlocks: List, - override val element: IrElement, + override val element: IrStatement, next: BasicBlock? ) : BlockConnector { diff --git a/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/generators/SplitBlockConnector.kt b/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/generators/SplitBlockConnector.kt index c415f84cf58..c5e3d1d8e23 100644 --- a/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/generators/SplitBlockConnector.kt +++ b/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/generators/SplitBlockConnector.kt @@ -16,13 +16,13 @@ package org.jetbrains.kotlin.ir2cfg.generators -import org.jetbrains.kotlin.ir.IrElement +import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir2cfg.graph.BasicBlock import org.jetbrains.kotlin.ir2cfg.graph.BlockConnector class SplitBlockConnector( previous: BasicBlock, - override val element: IrElement, + override val element: IrStatement, override val nextBlocks: List ) : BlockConnector { diff --git a/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/graph/BasicBlock.kt b/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/graph/BasicBlock.kt index 5c3ceed413b..2f07eca6133 100644 --- a/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/graph/BasicBlock.kt +++ b/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/graph/BasicBlock.kt @@ -16,11 +16,11 @@ package org.jetbrains.kotlin.ir2cfg.graph -import org.jetbrains.kotlin.ir.IrElement +import org.jetbrains.kotlin.ir.IrStatement interface BasicBlock : CfgNode { - val elements: List + val elements: List val incoming: BlockConnector? diff --git a/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/graph/BlockConnector.kt b/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/graph/BlockConnector.kt index 2a45c59fb6f..e479f563cd3 100644 --- a/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/graph/BlockConnector.kt +++ b/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/graph/BlockConnector.kt @@ -16,13 +16,13 @@ package org.jetbrains.kotlin.ir2cfg.graph -import org.jetbrains.kotlin.ir.IrElement +import org.jetbrains.kotlin.ir.IrStatement interface BlockConnector : CfgNode { val previousBlocks: List - val element: IrElement + val element: IrStatement val nextBlocks: List diff --git a/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/nodes/CfgIrElement.kt b/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/nodes/CfgIrElement.kt index 7262774aa84..58bb33a6cee 100644 --- a/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/nodes/CfgIrElement.kt +++ b/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/nodes/CfgIrElement.kt @@ -16,6 +16,6 @@ package org.jetbrains.kotlin.ir2cfg.nodes -import org.jetbrains.kotlin.ir.IrElement +import org.jetbrains.kotlin.ir.IrStatement -interface CfgIrElement : IrElement \ No newline at end of file +interface CfgIrElement : IrStatement \ No newline at end of file