[FIR] Add special kind for graph of init blocks and local functions

This commit is contained in:
Dmitriy Novozhilov
2023-02-15 18:50:04 +02:00
committed by Space Team
parent c87e489dc9
commit 914acd841f
2 changed files with 5 additions and 2 deletions
@@ -155,7 +155,8 @@ class ControlFlowGraphBuilder {
val localFunctionNode = runIf(function is FirSimpleFunction && function.isLocal && bodyBuildingMode) {
createLocalFunctionDeclarationNode(function).also { addNewSimpleNode(it) }
}
val enterNode = enterGraph(function, name, ControlFlowGraph.Kind.Function) {
val kind = if (localFunctionNode != null) ControlFlowGraph.Kind.LocalFunction else ControlFlowGraph.Kind.Function
val enterNode = enterGraph(function, name, kind) {
createFunctionEnterNode(it) to createFunctionExitNode(it).also { exit -> exitTargetsForReturn[it.symbol] = exit }
}
if (localFunctionNode != null) {
@@ -1151,7 +1152,7 @@ class ControlFlowGraphBuilder {
fun enterInitBlock(initBlock: FirAnonymousInitializer): InitBlockEnterNode {
// TODO: questionable moment that we should pass data flow from init to init
return enterGraph(initBlock, "init block", ControlFlowGraph.Kind.Function) {
return enterGraph(initBlock, "init block", ControlFlowGraph.Kind.ClassInitializer) {
createInitBlockEnterNode(it) to createInitBlockExitNode(it)
}.also { addEdgeIfLocalClassMember(it) }
}
@@ -34,9 +34,11 @@ class ControlFlowGraph(val declaration: FirDeclaration?, val name: String, val k
enum class Kind {
Class,
Function,
LocalFunction,
AnonymousFunction,
AnonymousFunctionCalledInPlace,
PropertyInitializer,
ClassInitializer,
FieldInitializer,
FakeCall,
DefaultArgument,