FIR: Fork flow for anonymous initializer
This commit is contained in:
+7
-1
@@ -915,7 +915,13 @@ abstract class FirDataFlowAnalyzer<FLOW : Flow>(
|
||||
// ----------------------------------- Init block -----------------------------------
|
||||
|
||||
fun enterInitBlock(initBlock: FirAnonymousInitializer) {
|
||||
graphBuilder.enterInitBlock(initBlock).mergeIncomingFlow()
|
||||
graphBuilder.enterInitBlock(initBlock).let { (node, prevNode) ->
|
||||
if (prevNode != null) {
|
||||
node.flow = logicSystem.forkFlow(prevNode.flow)
|
||||
} else {
|
||||
node.mergeIncomingFlow()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun exitInitBlock(initBlock: FirAnonymousInitializer) {
|
||||
|
||||
+3
-2
@@ -728,7 +728,8 @@ class ControlFlowGraphBuilder {
|
||||
|
||||
// ----------------------------------- Block -----------------------------------
|
||||
|
||||
fun enterInitBlock(initBlock: FirAnonymousInitializer): InitBlockEnterNode {
|
||||
fun enterInitBlock(initBlock: FirAnonymousInitializer): Pair<InitBlockEnterNode, CFGNode<*>?> {
|
||||
val lastNode = lastNodes.topOrNull()
|
||||
graphs.push(ControlFlowGraph(initBlock, "init block", ControlFlowGraph.Kind.ClassInitializer))
|
||||
val enterNode = createInitBlockEnterNode(initBlock).also {
|
||||
lexicalScopes.push(stackOf(it))
|
||||
@@ -737,7 +738,7 @@ class ControlFlowGraphBuilder {
|
||||
initBlockExitNodes.push(exitNode)
|
||||
exitNodes.push(exitNode)
|
||||
levelCounter++
|
||||
return enterNode
|
||||
return enterNode to lastNode
|
||||
}
|
||||
|
||||
fun exitInitBlock(initBlock: FirAnonymousInitializer): InitBlockExitNode {
|
||||
|
||||
Reference in New Issue
Block a user