[FIR] Add special kind for graph of init blocks and local functions
This commit is contained in:
committed by
Space Team
parent
c87e489dc9
commit
914acd841f
+3
-2
@@ -155,7 +155,8 @@ class ControlFlowGraphBuilder {
|
|||||||
val localFunctionNode = runIf(function is FirSimpleFunction && function.isLocal && bodyBuildingMode) {
|
val localFunctionNode = runIf(function is FirSimpleFunction && function.isLocal && bodyBuildingMode) {
|
||||||
createLocalFunctionDeclarationNode(function).also { addNewSimpleNode(it) }
|
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 }
|
createFunctionEnterNode(it) to createFunctionExitNode(it).also { exit -> exitTargetsForReturn[it.symbol] = exit }
|
||||||
}
|
}
|
||||||
if (localFunctionNode != null) {
|
if (localFunctionNode != null) {
|
||||||
@@ -1151,7 +1152,7 @@ class ControlFlowGraphBuilder {
|
|||||||
|
|
||||||
fun enterInitBlock(initBlock: FirAnonymousInitializer): InitBlockEnterNode {
|
fun enterInitBlock(initBlock: FirAnonymousInitializer): InitBlockEnterNode {
|
||||||
// TODO: questionable moment that we should pass data flow from init to init
|
// 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)
|
createInitBlockEnterNode(it) to createInitBlockExitNode(it)
|
||||||
}.also { addEdgeIfLocalClassMember(it) }
|
}.also { addEdgeIfLocalClassMember(it) }
|
||||||
}
|
}
|
||||||
|
|||||||
+2
@@ -34,9 +34,11 @@ class ControlFlowGraph(val declaration: FirDeclaration?, val name: String, val k
|
|||||||
enum class Kind {
|
enum class Kind {
|
||||||
Class,
|
Class,
|
||||||
Function,
|
Function,
|
||||||
|
LocalFunction,
|
||||||
AnonymousFunction,
|
AnonymousFunction,
|
||||||
AnonymousFunctionCalledInPlace,
|
AnonymousFunctionCalledInPlace,
|
||||||
PropertyInitializer,
|
PropertyInitializer,
|
||||||
|
ClassInitializer,
|
||||||
FieldInitializer,
|
FieldInitializer,
|
||||||
FakeCall,
|
FakeCall,
|
||||||
DefaultArgument,
|
DefaultArgument,
|
||||||
|
|||||||
Reference in New Issue
Block a user