[FIR] Add owner to ControlFlowGraph

This commit is contained in:
Dmitriy Novozhilov
2020-03-19 16:38:28 +03:00
parent 496489cdf4
commit 9535df5e2e
2 changed files with 5 additions and 5 deletions
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.FirVisitor
class ControlFlowGraph(val name: String, val kind: Kind) {
class ControlFlowGraph(val owner: FirDeclaration?, val name: String, val kind: Kind) {
private val _nodes: MutableList<CFGNode<*>> = mutableListOf()
val nodes: List<CFGNode<*>> get() = _nodes
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
import org.jetbrains.kotlin.fir.types.isNothing
class ControlFlowGraphBuilder {
private val graphs: Stack<ControlFlowGraph> = stackOf(ControlFlowGraph("<DUMP_GRAPH_FOR_ENUMS>", ControlFlowGraph.Kind.TopLevel))
private val graphs: Stack<ControlFlowGraph> = stackOf(ControlFlowGraph(null, "<TOP_LEVEL_GRAPH>", ControlFlowGraph.Kind.TopLevel))
val graph: ControlFlowGraph get() = graphs.top()
private val lexicalScopes: Stack<Stack<CFGNode<*>>> = stackOf(stackOf())
@@ -88,7 +88,7 @@ class ControlFlowGraphBuilder {
}
if (!isInplace) {
graphs.push(ControlFlowGraph(name, ControlFlowGraph.Kind.Function))
graphs.push(ControlFlowGraph(function, name, ControlFlowGraph.Kind.Function))
}
val enterNode = createFunctionEnterNode(function, isInplace).also {
@@ -240,7 +240,7 @@ class ControlFlowGraphBuilder {
// ----------------------------------- Property -----------------------------------
fun enterProperty(property: FirProperty): PropertyInitializerEnterNode {
graphs.push(ControlFlowGraph("val ${property.name}", ControlFlowGraph.Kind.PropertyInitializer))
graphs.push(ControlFlowGraph(property, "val ${property.name}", ControlFlowGraph.Kind.PropertyInitializer))
val enterNode = createPropertyInitializerEnterNode(property)
val exitNode = createPropertyInitializerExitNode(property)
topLevelVariableInitializerExitNodes.push(exitNode)
@@ -729,7 +729,7 @@ class ControlFlowGraphBuilder {
// ----------------------------------- Block -----------------------------------
fun enterInitBlock(initBlock: FirAnonymousInitializer): InitBlockEnterNode {
graphs.push(ControlFlowGraph("init block", ControlFlowGraph.Kind.ClassInitializer))
graphs.push(ControlFlowGraph(initBlock, "init block", ControlFlowGraph.Kind.ClassInitializer))
val enterNode = createInitBlockEnterNode(initBlock).also {
lexicalScopes.push(stackOf(it))
}