[FIR] Add cfg nodes for classes
This commit is contained in:
+19
-1
@@ -133,7 +133,25 @@ class UnionFunctionCallArgumentsNode(owner: ControlFlowGraph, override val fir:
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------------- Anonymous object -----------------------------------
|
||||
// ----------------------------------- Classes -----------------------------------
|
||||
|
||||
class ClassEnterNode(owner: ControlFlowGraph, override val fir: FirClass<*>, level: Int, id: Int) : CFGNode<FirClass<*>>(owner, level, id) {
|
||||
override fun <R, D> accept(visitor: ControlFlowGraphVisitor<R, D>, data: D): R {
|
||||
return visitor.visitClassEnterNode(this, data)
|
||||
}
|
||||
}
|
||||
|
||||
class ClassExitNode(owner: ControlFlowGraph, override val fir: FirClass<*>, level: Int, id: Int) : CFGNode<FirClass<*>>(owner, level, id) {
|
||||
override fun <R, D> accept(visitor: ControlFlowGraphVisitor<R, D>, data: D): R {
|
||||
return visitor.visitClassExitNode(this, data)
|
||||
}
|
||||
}
|
||||
|
||||
class LocalClassExitNode(owner: ControlFlowGraph, override val fir: FirRegularClass, level: Int, id: Int) : CFGNode<FirRegularClass>(owner, level, id) {
|
||||
override fun <R, D> accept(visitor: ControlFlowGraphVisitor<R, D>, data: D): R {
|
||||
return visitor.visitLocalClassExitNode(this, data)
|
||||
}
|
||||
}
|
||||
|
||||
class AnonymousObjectExitNode(owner: ControlFlowGraph, override val fir: FirAnonymousObject, level: Int, id: Int) : CFGNode<FirAnonymousObject>(owner, level, id) {
|
||||
override fun <R, D> accept(visitor: ControlFlowGraphVisitor<R, D>, data: D): R {
|
||||
|
||||
+13
@@ -201,3 +201,16 @@ fun ControlFlowGraphBuilder.createAnonymousObjectExitNode(fir: FirAnonymousObjec
|
||||
|
||||
fun ControlFlowGraphBuilder.createUnionFunctionCallArgumentsNode(fir: FirElement): UnionFunctionCallArgumentsNode =
|
||||
UnionFunctionCallArgumentsNode(graph, fir, levelCounter, createId())
|
||||
|
||||
fun ControlFlowGraphBuilder.createClassEnterNode(fir: FirClass<*>): ClassEnterNode =
|
||||
ClassEnterNode(graph, fir, levelCounter, createId()).also {
|
||||
graph.enterNode = it
|
||||
}
|
||||
|
||||
fun ControlFlowGraphBuilder.createClassExitNode(fir: FirClass<*>): ClassExitNode =
|
||||
ClassExitNode(graph, fir, levelCounter, createId()).also {
|
||||
graph.exitNode = it
|
||||
}
|
||||
|
||||
fun ControlFlowGraphBuilder.createLocalClassExitNode(fir: FirRegularClass): LocalClassExitNode =
|
||||
LocalClassExitNode(graph, fir, levelCounter, createId())
|
||||
+13
-1
@@ -32,12 +32,24 @@ abstract class ControlFlowGraphVisitor<out R, in D> {
|
||||
return visitNode(node, data)
|
||||
}
|
||||
|
||||
// ----------------------------------- Anonymous object -----------------------------------
|
||||
// ----------------------------------- Classes -----------------------------------
|
||||
|
||||
open fun visitAnonymousObjectExitNode(node: AnonymousObjectExitNode, data: D): R {
|
||||
return visitNode(node, data)
|
||||
}
|
||||
|
||||
open fun visitClassEnterNode(node: ClassEnterNode, data: D): R {
|
||||
return visitNode(node, data)
|
||||
}
|
||||
|
||||
open fun visitClassExitNode(node: ClassExitNode, data: D): R {
|
||||
return visitNode(node, data)
|
||||
}
|
||||
|
||||
open fun visitLocalClassExitNode(node: LocalClassExitNode, data: D): R {
|
||||
return visitNode(node, data)
|
||||
}
|
||||
|
||||
// ----------------------------------- Property -----------------------------------
|
||||
|
||||
open fun visitPropertyInitializerEnterNode(node: PropertyInitializerEnterNode, data: D): R {
|
||||
|
||||
Reference in New Issue
Block a user