[FIR] Add owner to ControlFlowGraph
This commit is contained in:
+1
-1
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.fir.expressions.*
|
|||||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
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()
|
private val _nodes: MutableList<CFGNode<*>> = mutableListOf()
|
||||||
|
|
||||||
val nodes: List<CFGNode<*>> get() = _nodes
|
val nodes: List<CFGNode<*>> get() = _nodes
|
||||||
|
|||||||
+4
-4
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
|||||||
import org.jetbrains.kotlin.fir.types.isNothing
|
import org.jetbrains.kotlin.fir.types.isNothing
|
||||||
|
|
||||||
class ControlFlowGraphBuilder {
|
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()
|
val graph: ControlFlowGraph get() = graphs.top()
|
||||||
|
|
||||||
private val lexicalScopes: Stack<Stack<CFGNode<*>>> = stackOf(stackOf())
|
private val lexicalScopes: Stack<Stack<CFGNode<*>>> = stackOf(stackOf())
|
||||||
@@ -88,7 +88,7 @@ class ControlFlowGraphBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!isInplace) {
|
if (!isInplace) {
|
||||||
graphs.push(ControlFlowGraph(name, ControlFlowGraph.Kind.Function))
|
graphs.push(ControlFlowGraph(function, name, ControlFlowGraph.Kind.Function))
|
||||||
}
|
}
|
||||||
|
|
||||||
val enterNode = createFunctionEnterNode(function, isInplace).also {
|
val enterNode = createFunctionEnterNode(function, isInplace).also {
|
||||||
@@ -240,7 +240,7 @@ class ControlFlowGraphBuilder {
|
|||||||
// ----------------------------------- Property -----------------------------------
|
// ----------------------------------- Property -----------------------------------
|
||||||
|
|
||||||
fun enterProperty(property: FirProperty): PropertyInitializerEnterNode {
|
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 enterNode = createPropertyInitializerEnterNode(property)
|
||||||
val exitNode = createPropertyInitializerExitNode(property)
|
val exitNode = createPropertyInitializerExitNode(property)
|
||||||
topLevelVariableInitializerExitNodes.push(exitNode)
|
topLevelVariableInitializerExitNodes.push(exitNode)
|
||||||
@@ -729,7 +729,7 @@ class ControlFlowGraphBuilder {
|
|||||||
// ----------------------------------- Block -----------------------------------
|
// ----------------------------------- Block -----------------------------------
|
||||||
|
|
||||||
fun enterInitBlock(initBlock: FirAnonymousInitializer): InitBlockEnterNode {
|
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 {
|
val enterNode = createInitBlockEnterNode(initBlock).also {
|
||||||
lexicalScopes.push(stackOf(it))
|
lexicalScopes.push(stackOf(it))
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user