diff --git a/compiler/fir/analysis-tests/testData/resolve/cfg/defaultArguments.dot b/compiler/fir/analysis-tests/testData/resolve/cfg/defaultArguments.dot index 7b3fbc0a9b9..98fb2ece612 100644 --- a/compiler/fir/analysis-tests/testData/resolve/cfg/defaultArguments.dot +++ b/compiler/fir/analysis-tests/testData/resolve/cfg/defaultArguments.dot @@ -27,59 +27,69 @@ digraph defaultArguments_kt { subgraph cluster_2 { color=red 7 [label="Enter function test" style="filled" fillcolor=red]; + 8 [label="Enter default value of y"]; subgraph cluster_3 { color=blue - 16 [label="Enter default value of z" style="filled" fillcolor=red]; - 17 [label="Postponed enter to lambda"]; - subgraph cluster_4 { - color=blue - 21 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; - subgraph cluster_5 { - color=blue - 22 [label="Enter block"]; - 23 [label="Function call: R|/foo|()" style="filled" fillcolor=yellow]; - 24 [label="Exit block"]; - } - 25 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; - } - 18 [label="Postponed exit from lambda"]; - 19 [label="Function call: R|kotlin/run|(...)" style="filled" fillcolor=yellow]; - 20 [label="Exit default value of z" style="filled" fillcolor=red]; + 16 [label="Enter default value of y" style="filled" fillcolor=red]; + 17 [label="Access variable R|/x|"]; + 18 [label="Type operator: (R|/x| as R|kotlin/String|)"]; + 19 [label="Exit default value of y" style="filled" fillcolor=red]; } - subgraph cluster_6 { + 9 [label="Exit default value of y"]; + 10 [label="Enter default value of z"]; + subgraph cluster_4 { color=blue - 12 [label="Enter default value of y" style="filled" fillcolor=red]; - 13 [label="Access variable R|/x|"]; - 14 [label="Type operator: (R|/x| as R|kotlin/String|)"]; - 15 [label="Exit default value of y" style="filled" fillcolor=red]; + 20 [label="Enter default value of z" style="filled" fillcolor=red]; + 21 [label="Postponed enter to lambda"]; + subgraph cluster_5 { + color=blue + 25 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + subgraph cluster_6 { + color=blue + 26 [label="Enter block"]; + 27 [label="Function call: R|/foo|()" style="filled" fillcolor=yellow]; + 28 [label="Exit block"]; + } + 29 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; + } + 22 [label="Postponed exit from lambda"]; + 23 [label="Function call: R|kotlin/run|(...)" style="filled" fillcolor=yellow]; + 24 [label="Exit default value of z" style="filled" fillcolor=red]; } + 11 [label="Exit default value of z"]; subgraph cluster_7 { color=blue - 8 [label="Enter block"]; - 9 [label="Function call: R|/foo|()" style="filled" fillcolor=yellow]; - 10 [label="Exit block"]; + 12 [label="Enter block"]; + 13 [label="Function call: R|/foo|()" style="filled" fillcolor=yellow]; + 14 [label="Exit block"]; } - 11 [label="Exit function test" style="filled" fillcolor=red]; + 15 [label="Exit function test" style="filled" fillcolor=red]; } - 7 -> {8 12 16}; - 8 -> {9}; + 7 -> {8}; + 8 -> {9 16}; + 8 -> {16 16} [style=dashed]; 9 -> {10}; - 10 -> {11}; + 10 -> {11 20}; + 10 -> {20 20} [style=dashed]; + 11 -> {12}; 12 -> {13}; - 12 -> {12} [style=dashed]; 13 -> {14}; 14 -> {15}; 16 -> {17}; - 16 -> {16} [style=dashed]; - 17 -> {19 21}; - 17 -> {18} [style=dotted]; - 17 -> {21} [style=dashed]; + 17 -> {18}; 18 -> {19}; - 19 -> {20}; - 21 -> {22}; + 19 -> {9}; + 20 -> {21}; + 21 -> {23 25}; + 21 -> {22} [style=dotted]; + 21 -> {25} [style=dashed]; 22 -> {23}; 23 -> {24}; - 24 -> {25}; - 25 -> {18}; + 24 -> {11}; + 25 -> {26}; + 26 -> {27}; + 27 -> {28}; + 28 -> {29}; + 29 -> {22}; } diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/lambdas/lambdaInWhenBranch.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/lambdas/lambdaInWhenBranch.dot index fbd7920ca53..fa59369ab18 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/lambdas/lambdaInWhenBranch.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/lambdas/lambdaInWhenBranch.dot @@ -22,26 +22,28 @@ digraph lambdaInWhenBranch_kt { subgraph cluster_2 { color=red - 18 [label="Enter class SubClass1" style="filled" fillcolor=red]; - 19 [label="Part of class initialization"]; + 20 [label="Enter class SubClass1" style="filled" fillcolor=red]; + 21 [label="Part of class initialization"]; subgraph cluster_3 { color=blue 8 [label="Enter property" style="filled" fillcolor=red]; 9 [label="Access variable R|/t|"]; 10 [label="Exit property" style="filled" fillcolor=red]; } - 20 [label="Exit class SubClass1" style="filled" fillcolor=red]; + 22 [label="Exit class SubClass1" style="filled" fillcolor=red]; } subgraph cluster_4 { color=blue 13 [label="Enter function copy" style="filled" fillcolor=red]; - 14 [label="Exit function copy" style="filled" fillcolor=red]; - } - subgraph cluster_5 { - color=blue - 15 [label="Enter default value of t" style="filled" fillcolor=red]; - 16 [label="Access variable R|/SubClass1.t|"]; - 17 [label="Exit default value of t" style="filled" fillcolor=red]; + 14 [label="Enter default value of t"]; + subgraph cluster_5 { + color=blue + 17 [label="Enter default value of t" style="filled" fillcolor=red]; + 18 [label="Access variable R|/SubClass1.t|"]; + 19 [label="Exit default value of t" style="filled" fillcolor=red]; + } + 15 [label="Exit default value of t"]; + 16 [label="Exit function copy" style="filled" fillcolor=red]; } subgraph cluster_6 { color=blue @@ -54,174 +56,175 @@ digraph lambdaInWhenBranch_kt { 6 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; 7 [label="Exit function " style="filled" fillcolor=red]; } - 18 -> {19} [color=green]; - 19 -> {8} [color=green]; - 19 -> {20} [style=dotted]; - 19 -> {8} [style=dashed]; - 20 -> {5 11 13} [color=green]; - 20 -> {5 11 13} [style=dashed]; + 20 -> {21} [color=green]; + 21 -> {8} [color=green]; + 21 -> {22} [style=dotted]; + 21 -> {8} [style=dashed]; + 22 -> {5 11 13} [color=green]; + 22 -> {5 11 13} [style=dashed]; 8 -> {9}; 9 -> {10}; - 10 -> {20} [color=green]; + 10 -> {22} [color=green]; 5 -> {6}; 6 -> {7}; 11 -> {12}; - 13 -> {14 15}; + 13 -> {14}; + 14 -> {15 17}; + 14 -> {17 17} [style=dashed]; 15 -> {16}; - 15 -> {15} [style=dashed]; - 16 -> {17}; + 17 -> {18}; + 18 -> {19}; + 19 -> {15}; subgraph cluster_8 { color=red - 26 [label="Enter class SubClass2" style="filled" fillcolor=red]; - 27 [label="Exit class SubClass2" style="filled" fillcolor=red]; + 28 [label="Enter class SubClass2" style="filled" fillcolor=red]; + 29 [label="Exit class SubClass2" style="filled" fillcolor=red]; } subgraph cluster_9 { color=blue - 24 [label="Enter function copy" style="filled" fillcolor=red]; - 25 [label="Exit function copy" style="filled" fillcolor=red]; + 26 [label="Enter function copy" style="filled" fillcolor=red]; + 27 [label="Exit function copy" style="filled" fillcolor=red]; } subgraph cluster_10 { color=blue - 21 [label="Enter function " style="filled" fillcolor=red]; - 22 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 23 [label="Exit function " style="filled" fillcolor=red]; + 23 [label="Enter function " style="filled" fillcolor=red]; + 24 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 25 [label="Exit function " style="filled" fillcolor=red]; } - 26 -> {27} [color=green]; - 27 -> {21 24} [color=green]; - 27 -> {21 24} [style=dashed]; - 21 -> {22}; - 22 -> {23}; + 28 -> {29} [color=green]; + 29 -> {23 26} [color=green]; + 29 -> {23 26} [style=dashed]; + 23 -> {24}; 24 -> {25}; + 26 -> {27}; subgraph cluster_11 { color=red - 28 [label="Enter function foo" style="filled" fillcolor=red]; + 30 [label="Enter function foo" style="filled" fillcolor=red]; subgraph cluster_12 { color=blue - 29 [label="Enter block"]; + 31 [label="Enter block"]; subgraph cluster_13 { color=blue - 30 [label="Enter when"]; - 31 [label="Access variable R|/p|"]; + 32 [label="Enter when"]; + 33 [label="Access variable R|/p|"]; subgraph cluster_14 { color=blue - 32 [label="Enter when branch condition "]; - 33 [label="Exit $subj"]; - 34 [label="Type operator: ($subj$ is R|SubClass1|)"]; - 35 [label="Exit when branch condition"]; + 34 [label="Enter when branch condition "]; + 35 [label="Exit $subj"]; + 36 [label="Type operator: ($subj$ is R|SubClass1|)"]; + 37 [label="Exit when branch condition"]; } subgraph cluster_15 { color=blue - 36 [label="Enter when branch condition "]; - 37 [label="Exit $subj"]; - 38 [label="Type operator: ($subj$ is R|SubClass2|)"]; - 39 [label="Exit when branch condition"]; + 38 [label="Enter when branch condition "]; + 39 [label="Exit $subj"]; + 40 [label="Type operator: ($subj$ is R|SubClass2|)"]; + 41 [label="Exit when branch condition"]; } - 40 [label="Enter when branch result"]; + 42 [label="Enter when branch result"]; subgraph cluster_16 { color=blue - 41 [label="Enter block"]; - 42 [label="Const: String()"]; - 43 [label="Exit block"]; + 43 [label="Enter block"]; + 44 [label="Const: String()"]; + 45 [label="Exit block"]; } - 44 [label="Exit when branch result"]; - 45 [label="Enter when branch result"]; + 46 [label="Exit when branch result"]; + 47 [label="Enter when branch result"]; subgraph cluster_17 { color=blue - 46 [label="Enter block"]; - 47 [label="Const: String()"]; - 48 [label="Postponed enter to lambda"]; + 48 [label="Enter block"]; + 49 [label="Const: String()"]; + 50 [label="Postponed enter to lambda"]; subgraph cluster_18 { color=blue - 82 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 84 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; subgraph cluster_19 { color=blue - 83 [label="Enter block"]; - 84 [label="Access variable R|/it|"]; - 85 [label="Exit block"]; + 85 [label="Enter block"]; + 86 [label="Access variable R|/it|"]; + 87 [label="Exit block"]; } - 86 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; + 88 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } - 49 [label="Postponed exit from lambda"]; - 50 [label="Function call: String().R|kotlin/let|(...)" style="filled" fillcolor=yellow]; - 51 [label="Exit block"]; + 51 [label="Postponed exit from lambda"]; + 52 [label="Function call: String().R|kotlin/let|(...)" style="filled" fillcolor=yellow]; + 53 [label="Exit block"]; } - 52 [label="Exit when branch result"]; - 53 [label="Exit when"]; + 54 [label="Exit when branch result"]; + 55 [label="Exit when"]; } - 54 [label="Access variable R|/p|"]; - 55 [label="Access variable #"]; + 56 [label="Access variable R|/p|"]; + 57 [label="Access variable #"]; subgraph cluster_20 { color=blue - 56 [label="Enter when"]; - 57 [label="Access variable R|/p|"]; + 58 [label="Enter when"]; + 59 [label="Access variable R|/p|"]; subgraph cluster_21 { color=blue - 58 [label="Enter when branch condition "]; - 59 [label="Exit $subj"]; - 60 [label="Type operator: ($subj$ is R|SubClass1|)"]; - 61 [label="Exit when branch condition"]; + 60 [label="Enter when branch condition "]; + 61 [label="Exit $subj"]; + 62 [label="Type operator: ($subj$ is R|SubClass1|)"]; + 63 [label="Exit when branch condition"]; } subgraph cluster_22 { color=blue - 62 [label="Enter when branch condition "]; - 63 [label="Exit $subj"]; - 64 [label="Type operator: ($subj$ is R|SubClass2|)"]; - 65 [label="Exit when branch condition"]; + 64 [label="Enter when branch condition "]; + 65 [label="Exit $subj"]; + 66 [label="Type operator: ($subj$ is R|SubClass2|)"]; + 67 [label="Exit when branch condition"]; } - 66 [label="Enter when branch result"]; + 68 [label="Enter when branch result"]; subgraph cluster_23 { color=blue - 67 [label="Enter block"]; - 68 [label="Const: String(2)"]; - 69 [label="Exit block"]; + 69 [label="Enter block"]; + 70 [label="Const: String(2)"]; + 71 [label="Exit block"]; } - 70 [label="Exit when branch result"]; - 71 [label="Enter when branch result"]; + 72 [label="Exit when branch result"]; + 73 [label="Enter when branch result"]; subgraph cluster_24 { color=blue - 72 [label="Enter block"]; - 73 [label="Access variable R|/p|"]; - 74 [label="Smart cast: R|/p|"]; - 75 [label="Access variable R|/SubClass1.t|"]; - 76 [label="Exit block"]; + 74 [label="Enter block"]; + 75 [label="Access variable R|/p|"]; + 76 [label="Smart cast: R|/p|"]; + 77 [label="Access variable R|/SubClass1.t|"]; + 78 [label="Exit block"]; } - 77 [label="Exit when branch result"]; - 78 [label="Exit when"]; + 79 [label="Exit when branch result"]; + 80 [label="Exit when"]; } - 79 [label="Access variable R|kotlin/String.length|"]; - 80 [label="Exit block"]; + 81 [label="Access variable R|kotlin/String.length|"]; + 82 [label="Exit block"]; } - 81 [label="Exit function foo" style="filled" fillcolor=red]; + 83 [label="Exit function foo" style="filled" fillcolor=red]; } - 28 -> {29}; - 29 -> {30}; 30 -> {31}; 31 -> {32}; 32 -> {33}; 33 -> {34}; 34 -> {35}; - 35 -> {36 45}; + 35 -> {36}; 36 -> {37}; - 37 -> {38}; + 37 -> {38 47}; 38 -> {39}; 39 -> {40}; 40 -> {41}; 41 -> {42}; 42 -> {43}; 43 -> {44}; - 44 -> {53}; + 44 -> {45}; 45 -> {46}; - 46 -> {47}; + 46 -> {55}; 47 -> {48}; - 48 -> {50 82}; - 48 -> {49} [style=dotted]; - 48 -> {82} [style=dashed]; - 49 -> {50} [color=green]; - 49 -> {53} [color=red]; - 50 -> {51}; - 51 -> {52}; + 48 -> {49}; + 49 -> {50}; + 50 -> {52 84}; + 50 -> {51} [style=dotted]; + 50 -> {84} [style=dashed]; + 51 -> {52} [color=green]; + 51 -> {55} [color=red]; 52 -> {53}; 53 -> {54}; 54 -> {55}; @@ -231,18 +234,18 @@ digraph lambdaInWhenBranch_kt { 58 -> {59}; 59 -> {60}; 60 -> {61}; - 61 -> {62 71}; + 61 -> {62}; 62 -> {63}; - 63 -> {64}; + 63 -> {64 73}; 64 -> {65}; 65 -> {66}; 66 -> {67}; 67 -> {68}; 68 -> {69}; 69 -> {70}; - 70 -> {78}; + 70 -> {71}; 71 -> {72}; - 72 -> {73}; + 72 -> {80}; 73 -> {74}; 74 -> {75}; 75 -> {76}; @@ -251,10 +254,12 @@ digraph lambdaInWhenBranch_kt { 78 -> {79}; 79 -> {80}; 80 -> {81}; + 81 -> {82}; 82 -> {83}; - 83 -> {84}; 84 -> {85}; 85 -> {86}; - 86 -> {49}; + 86 -> {87}; + 87 -> {88}; + 88 -> {51}; } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/FirDataFlowAnalyzer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/FirDataFlowAnalyzer.kt index 6edef348c20..df98a95766f 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/FirDataFlowAnalyzer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/FirDataFlowAnalyzer.kt @@ -252,12 +252,15 @@ abstract class FirDataFlowAnalyzer( // ----------------------------------- Value parameters (and it's defaults) ----------------------------------- fun enterValueParameter(valueParameter: FirValueParameter) { - graphBuilder.enterValueParameter(valueParameter)?.mergeIncomingFlow() + val (outerNode, innerNode) = graphBuilder.enterValueParameter(valueParameter) ?: return + outerNode.mergeIncomingFlow() + innerNode.mergeIncomingFlow() } fun exitValueParameter(valueParameter: FirValueParameter): ControlFlowGraph? { - val (node, graph) = graphBuilder.exitValueParameter(valueParameter) ?: return null - node.mergeIncomingFlow() + val (innerNode, outerNode, graph) = graphBuilder.exitValueParameter(valueParameter) ?: return null + innerNode.mergeIncomingFlow() + outerNode.mergeIncomingFlow() return graph } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphBuilder.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphBuilder.kt index b67fbab2a87..341fcdbbe13 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphBuilder.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphBuilder.kt @@ -542,29 +542,35 @@ class ControlFlowGraphBuilder { // ----------------------------------- Value parameters (and it's defaults) ----------------------------------- - fun enterValueParameter(valueParameter: FirValueParameter): EnterDefaultArgumentsNode? { + fun enterValueParameter(valueParameter: FirValueParameter): Pair? { if (valueParameter.defaultValue == null) return null + + val outerEnterNode = createEnterValueParameterNode(valueParameter) val graph = ControlFlowGraph(valueParameter, "default value of ${valueParameter.name}", ControlFlowGraph.Kind.DefaultArgument) - currentGraph.addSubGraph(graph) pushGraph(graph, Mode.Body) - - createExitDefaultArgumentsNode(valueParameter).also { - exitTargetsForTry.push(it) - } - - return createEnterDefaultArgumentsNode(valueParameter).also { - addEdge(lastNode, it) - lastNodes.push(it) - } + val innerExitNode = createExitDefaultArgumentsNode(valueParameter) + val innerEnterNode = createEnterDefaultArgumentsNode(valueParameter) + addNewSimpleNode(outerEnterNode) + addEdge(outerEnterNode, innerEnterNode) + lastNodes.push(innerEnterNode) + exitTargetsForTry.push(innerExitNode) + return outerEnterNode to innerEnterNode } - fun exitValueParameter(valueParameter: FirValueParameter): Pair? { + fun exitValueParameter(valueParameter: FirValueParameter): Triple? { if (valueParameter.defaultValue == null) return null + val exitNode = exitTargetsForTry.pop() as ExitDefaultArgumentsNode popAndAddEdge(exitNode) val graph = popGraph() require(exitNode == graph.exitNode) - return exitNode to graph + val outerEnterNode = lastNode as EnterValueParameterNode + val outerExitNode = createExitValueParameterNode(valueParameter) + addNewSimpleNode(outerExitNode) + addEdge(exitNode, outerExitNode, propagateDeadness = false) + outerEnterNode.addSubGraph(graph) + currentGraph.addSubGraph(graph) + return Triple(exitNode, outerExitNode, graph) } // ----------------------------------- Block ----------------------------------- diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphNodeBuilder.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphNodeBuilder.kt index 17592ad753f..a0e61ccaae3 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphNodeBuilder.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphNodeBuilder.kt @@ -256,12 +256,18 @@ fun ControlFlowGraphBuilder.createClassExitNode(fir: FirClass): ClassExitNode = fun ControlFlowGraphBuilder.createLocalClassExitNode(fir: FirRegularClass): LocalClassExitNode = LocalClassExitNode(currentGraph, fir, levelCounter, createId()) +fun ControlFlowGraphBuilder.createEnterValueParameterNode(fir: FirValueParameter): EnterValueParameterNode = + EnterValueParameterNode(currentGraph, fir, levelCounter, createId()) + fun ControlFlowGraphBuilder.createEnterDefaultArgumentsNode(fir: FirValueParameter): EnterDefaultArgumentsNode = EnterDefaultArgumentsNode(currentGraph, fir, levelCounter, createId()) fun ControlFlowGraphBuilder.createExitDefaultArgumentsNode(fir: FirValueParameter): ExitDefaultArgumentsNode = ExitDefaultArgumentsNode(currentGraph, fir, levelCounter, createId()) +fun ControlFlowGraphBuilder.createExitValueParameterNode(fir: FirValueParameter): ExitValueParameterNode = + ExitValueParameterNode(currentGraph, fir, levelCounter, createId()) + fun ControlFlowGraphBuilder.createComparisonExpressionNode(fir: FirComparisonExpression): ComparisonExpressionNode = ComparisonExpressionNode(currentGraph, fir, levelCounter, createId()) diff --git a/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/CFGNode.kt b/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/CFGNode.kt index a1a86086b5e..0e20bfe23f6 100644 --- a/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/CFGNode.kt +++ b/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/CFGNode.kt @@ -182,8 +182,14 @@ class LocalFunctionDeclarationNode(owner: ControlFlowGraph, override val fir: Fi // ----------------------------------- Default arguments ----------------------------------- +class EnterValueParameterNode(owner: ControlFlowGraph, override val fir: FirValueParameter, level: Int, id: Int) : CFGNodeWithCfgOwner(owner, level, id) { + override fun accept(visitor: ControlFlowGraphVisitor, data: D): R { + return visitor.visitEnterValueParameterNode(this, data) + } +} + @OptIn(CfgInternals::class) -class EnterDefaultArgumentsNode(owner: ControlFlowGraph, override val fir: FirValueParameter, level: Int, id: Int) : CFGNodeWithCfgOwner(owner, level, id), +class EnterDefaultArgumentsNode(owner: ControlFlowGraph, override val fir: FirValueParameter, level: Int, id: Int) : CFGNode(owner, level, id), EnterNodeMarker { init { owner.enterNode = this @@ -206,6 +212,12 @@ class ExitDefaultArgumentsNode(owner: ControlFlowGraph, override val fir: FirVal } } +class ExitValueParameterNode(owner: ControlFlowGraph, override val fir: FirValueParameter, level: Int, id: Int) : CFGNode(owner, level, id) { + override fun accept(visitor: ControlFlowGraphVisitor, data: D): R { + return visitor.visitExitValueParameterNode(this, data) + } +} + // ----------------------------------- Anonymous function ----------------------------------- class SplitPostponedLambdasNode(owner: ControlFlowGraph, override val fir: FirStatement, val lambdas: List, level: Int, id: Int) diff --git a/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/CFGNodeRenderer.kt b/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/CFGNodeRenderer.kt index c2b440a8fba..40e14676d3e 100644 --- a/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/CFGNodeRenderer.kt +++ b/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/CFGNodeRenderer.kt @@ -115,8 +115,10 @@ fun CFGNode<*>.render(): String = is ContractDescriptionEnterNode -> "Enter contract description" + is EnterValueParameterNode -> "Enter default value of ${fir.name}" is EnterDefaultArgumentsNode -> "Enter default value of ${fir.name}" is ExitDefaultArgumentsNode -> "Exit default value of ${fir.name}" + is ExitValueParameterNode -> "Exit default value of ${fir.name}" is ElvisLhsExitNode -> "Exit lhs of ?:" is ElvisLhsIsNotNullNode -> "Lhs of ?: is not null" diff --git a/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphVisitor.kt b/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphVisitor.kt index 9bb1af2fd6d..1a7fb9ede6d 100644 --- a/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphVisitor.kt +++ b/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphVisitor.kt @@ -26,7 +26,7 @@ abstract class ControlFlowGraphVisitor { // ----------------------------------- Default arguments ----------------------------------- - open fun visitExitDefaultArgumentsNode(node: ExitDefaultArgumentsNode, data: D): R { + open fun visitEnterValueParameterNode(node: EnterValueParameterNode, data: D): R { return visitNode(node, data) } @@ -34,6 +34,14 @@ abstract class ControlFlowGraphVisitor { return visitNode(node, data) } + open fun visitExitDefaultArgumentsNode(node: ExitDefaultArgumentsNode, data: D): R { + return visitNode(node, data) + } + + open fun visitExitValueParameterNode(node: ExitValueParameterNode, data: D): R { + return visitNode(node, data) + } + // ----------------------------------- Anonymous function ----------------------------------- open fun visitSplitPostponedLambdasNode(node: SplitPostponedLambdasNode, data: D): R { diff --git a/compiler/testData/codegen/box/smartCasts/kt44814.dot b/compiler/testData/codegen/box/smartCasts/kt44814.dot index 8dd1e0e51e7..5bf9e8d679c 100644 --- a/compiler/testData/codegen/box/smartCasts/kt44814.dot +++ b/compiler/testData/codegen/box/smartCasts/kt44814.dot @@ -172,414 +172,419 @@ digraph kt44814_kt { subgraph cluster_17 { color=red - 70 [label="Enter class LighterASTNode [1]" style="filled" fillcolor=red]; - 71 [label="Part of class initialization [1]"]; + 72 [label="Enter class LighterASTNode [1]" style="filled" fillcolor=red]; + 73 [label="Part of class initialization [1]"]; subgraph cluster_18 { color=blue - 56 [label="Enter property [2]" style="filled" fillcolor=red]; - 57 [label="Access variable R|/_children| [2]"]; - 58 [label="Exit property [2]" style="filled" fillcolor=red]; + 58 [label="Enter property [2]" style="filled" fillcolor=red]; + 59 [label="Access variable R|/_children| [2]"]; + 60 [label="Exit property [2]" style="filled" fillcolor=red]; } - 72 [label="Part of class initialization [1]"]; + 74 [label="Part of class initialization [1]"]; subgraph cluster_19 { color=blue - 66 [label="Enter property [2]" style="filled" fillcolor=red]; - 67 [label="Access qualifier /TokenType [2]"]; - 68 [label="Access variable R|/TokenType.Companion.MODIFIER_LIST| [2]"]; - 69 [label="Exit property [2]" style="filled" fillcolor=red]; + 68 [label="Enter property [2]" style="filled" fillcolor=red]; + 69 [label="Access qualifier /TokenType [2]"]; + 70 [label="Access variable R|/TokenType.Companion.MODIFIER_LIST| [2]"]; + 71 [label="Exit property [2]" style="filled" fillcolor=red]; } - 73 [label="Exit class LighterASTNode [1]" style="filled" fillcolor=red]; + 75 [label="Exit class LighterASTNode [1]" style="filled" fillcolor=red]; } subgraph cluster_20 { color=blue - 59 [label="Enter function getChildren [2]" style="filled" fillcolor=red]; + 61 [label="Enter function getChildren [2]" style="filled" fillcolor=red]; subgraph cluster_21 { color=blue - 60 [label="Enter block [2]"]; - 61 [label="Access variable R|/LighterASTNode._children| [2]"]; - 62 [label="Jump: ^getChildren this@R|/LighterASTNode|.R|/LighterASTNode._children| [2]"]; - 63 [label="Stub [2]" style="filled" fillcolor=gray]; - 64 [label="Exit block [2]" style="filled" fillcolor=gray]; + 62 [label="Enter block [2]"]; + 63 [label="Access variable R|/LighterASTNode._children| [2]"]; + 64 [label="Jump: ^getChildren this@R|/LighterASTNode|.R|/LighterASTNode._children| [2]"]; + 65 [label="Stub [2]" style="filled" fillcolor=gray]; + 66 [label="Exit block [2]" style="filled" fillcolor=gray]; } - 65 [label="Exit function getChildren [2]" style="filled" fillcolor=red]; + 67 [label="Exit function getChildren [2]" style="filled" fillcolor=red]; } subgraph cluster_22 { color=blue 50 [label="Enter function [2]" style="filled" fillcolor=red]; - 51 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; - 52 [label="Exit function [2]" style="filled" fillcolor=red]; + 51 [label="Enter default value of _children [2]"]; + subgraph cluster_23 { + color=blue + 55 [label="Enter default value of _children [3]" style="filled" fillcolor=red]; + 56 [label="Function call: R|kotlin/collections/emptyList|() [3]" style="filled" fillcolor=yellow]; + 57 [label="Exit default value of _children [3]" style="filled" fillcolor=red]; + } + 52 [label="Exit default value of _children [2]"]; + 53 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; + 54 [label="Exit function [2]" style="filled" fillcolor=red]; } - subgraph cluster_23 { - color=blue - 53 [label="Enter default value of _children [3]" style="filled" fillcolor=red]; - 54 [label="Function call: R|kotlin/collections/emptyList|() [3]" style="filled" fillcolor=yellow]; - 55 [label="Exit default value of _children [3]" style="filled" fillcolor=red]; - } - 70 -> {71} [color=green]; - 71 -> {56} [color=green]; - 71 -> {72} [style=dotted]; - 71 -> {56} [style=dashed]; - 72 -> {66} [color=green]; - 72 -> {73} [style=dotted]; - 72 -> {66} [style=dashed]; - 73 -> {50 59} [color=green]; - 73 -> {50 59} [style=dashed]; - 56 -> {57}; - 57 -> {58}; - 58 -> {72} [color=green]; - 66 -> {67}; - 67 -> {68}; - 68 -> {69}; - 69 -> {73} [color=green]; - 50 -> {51 53}; - 51 -> {52}; - 53 -> {54}; - 53 -> {53} [style=dashed]; - 54 -> {55}; + 72 -> {73} [color=green]; + 73 -> {58} [color=green]; + 73 -> {74} [style=dotted]; + 73 -> {58} [style=dashed]; + 74 -> {68} [color=green]; + 74 -> {75} [style=dotted]; + 74 -> {68} [style=dashed]; + 75 -> {50 61} [color=green]; + 75 -> {50 61} [style=dashed]; + 58 -> {59}; 59 -> {60}; - 60 -> {61}; + 60 -> {74} [color=green]; + 68 -> {69}; + 69 -> {70}; + 70 -> {71}; + 71 -> {75} [color=green]; + 50 -> {51}; + 51 -> {52 55}; + 51 -> {55 55} [style=dashed]; + 52 -> {53}; + 53 -> {54}; + 55 -> {56}; + 56 -> {57}; + 57 -> {52}; 61 -> {62}; - 62 -> {65}; - 62 -> {63} [style=dotted]; - 63 -> {64} [style=dotted]; + 62 -> {63}; + 63 -> {64}; + 64 -> {67}; 64 -> {65} [style=dotted]; + 65 -> {66} [style=dotted]; + 66 -> {67} [style=dotted]; subgraph cluster_24 { color=red - 83 [label="Enter class Companion [2]" style="filled" fillcolor=red]; - 84 [label="Part of class initialization [2]"]; + 85 [label="Enter class Companion [2]" style="filled" fillcolor=red]; + 86 [label="Part of class initialization [2]"]; subgraph cluster_25 { color=blue - 80 [label="Enter property [3]" style="filled" fillcolor=red]; - 81 [label="Function call: R|/TokenType.TokenType|() [3]" style="filled" fillcolor=yellow]; - 82 [label="Exit property [3]" style="filled" fillcolor=red]; + 82 [label="Enter property [3]" style="filled" fillcolor=red]; + 83 [label="Function call: R|/TokenType.TokenType|() [3]" style="filled" fillcolor=yellow]; + 84 [label="Exit property [3]" style="filled" fillcolor=red]; } - 85 [label="Exit class Companion [2]" style="filled" fillcolor=red]; + 87 [label="Exit class Companion [2]" style="filled" fillcolor=red]; } subgraph cluster_26 { color=blue - 77 [label="Enter function [3]" style="filled" fillcolor=red]; - 78 [label="Delegated constructor call: super() [3]" style="filled" fillcolor=yellow]; - 79 [label="Exit function [3]" style="filled" fillcolor=red]; + 79 [label="Enter function [3]" style="filled" fillcolor=red]; + 80 [label="Delegated constructor call: super() [3]" style="filled" fillcolor=yellow]; + 81 [label="Exit function [3]" style="filled" fillcolor=red]; } - 83 -> {84} [color=green]; - 84 -> {80} [color=green]; - 84 -> {85} [style=dotted]; - 84 -> {80} [style=dashed]; - 85 -> {77} [color=green]; - 85 -> {77} [style=dashed]; + 85 -> {86} [color=green]; + 86 -> {82} [color=green]; + 86 -> {87} [style=dotted]; + 86 -> {82} [style=dashed]; + 87 -> {79} [color=green]; + 87 -> {79} [style=dashed]; + 82 -> {83}; + 83 -> {84}; + 84 -> {87} [color=green]; + 79 -> {80}; 80 -> {81}; - 81 -> {82}; - 82 -> {85} [color=green]; - 77 -> {78}; - 78 -> {79}; subgraph cluster_27 { color=red - 86 [label="Enter class TokenType [1]" style="filled" fillcolor=red]; - 87 [label="Exit class TokenType [1]" style="filled" fillcolor=red]; + 88 [label="Enter class TokenType [1]" style="filled" fillcolor=red]; + 89 [label="Exit class TokenType [1]" style="filled" fillcolor=red]; } subgraph cluster_28 { color=blue - 74 [label="Enter function [2]" style="filled" fillcolor=red]; - 75 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; - 76 [label="Exit function [2]" style="filled" fillcolor=red]; + 76 [label="Enter function [2]" style="filled" fillcolor=red]; + 77 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; + 78 [label="Exit function [2]" style="filled" fillcolor=red]; } - 86 -> {87} [color=green]; - 87 -> {74} [color=green]; - 87 -> {74} [style=dashed]; - 74 -> {75}; - 75 -> {76}; + 88 -> {89} [color=green]; + 89 -> {76} [color=green]; + 89 -> {76} [style=dashed]; + 76 -> {77}; + 77 -> {78}; subgraph cluster_29 { color=red - 91 [label="Enter class KtModifierKeywordToken [1]" style="filled" fillcolor=red]; - 92 [label="Exit class KtModifierKeywordToken [1]" style="filled" fillcolor=red]; + 93 [label="Enter class KtModifierKeywordToken [1]" style="filled" fillcolor=red]; + 94 [label="Exit class KtModifierKeywordToken [1]" style="filled" fillcolor=red]; } subgraph cluster_30 { color=blue - 88 [label="Enter function [2]" style="filled" fillcolor=red]; - 89 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; - 90 [label="Exit function [2]" style="filled" fillcolor=red]; + 90 [label="Enter function [2]" style="filled" fillcolor=red]; + 91 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; + 92 [label="Exit function [2]" style="filled" fillcolor=red]; } - 91 -> {92} [color=green]; - 92 -> {88} [color=green]; - 92 -> {88} [style=dashed]; - 88 -> {89}; - 89 -> {90}; + 93 -> {94} [color=green]; + 94 -> {90} [color=green]; + 94 -> {90} [style=dashed]; + 90 -> {91}; + 91 -> {92}; subgraph cluster_31 { color=red - 96 [label="Enter class KtModifierList [1]" style="filled" fillcolor=red]; - 97 [label="Exit class KtModifierList [1]" style="filled" fillcolor=red]; + 98 [label="Enter class KtModifierList [1]" style="filled" fillcolor=red]; + 99 [label="Exit class KtModifierList [1]" style="filled" fillcolor=red]; } subgraph cluster_32 { color=blue - 93 [label="Enter function [2]" style="filled" fillcolor=red]; - 94 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; - 95 [label="Exit function [2]" style="filled" fillcolor=red]; + 95 [label="Enter function [2]" style="filled" fillcolor=red]; + 96 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; + 97 [label="Exit function [2]" style="filled" fillcolor=red]; } - 96 -> {97} [color=green]; - 97 -> {93} [color=green]; - 97 -> {93} [style=dashed]; - 93 -> {94}; - 94 -> {95}; + 98 -> {99} [color=green]; + 99 -> {95} [color=green]; + 99 -> {95} [style=dashed]; + 95 -> {96}; + 96 -> {97}; subgraph cluster_33 { color=red - 104 [label="Enter class KtModifierListOwner [1]" style="filled" fillcolor=red]; - 105 [label="Part of class initialization [1]"]; + 106 [label="Enter class KtModifierListOwner [1]" style="filled" fillcolor=red]; + 107 [label="Part of class initialization [1]"]; subgraph cluster_34 { color=blue - 101 [label="Enter property [2]" style="filled" fillcolor=red]; - 102 [label="Function call: R|/KtModifierList.KtModifierList|() [2]" style="filled" fillcolor=yellow]; - 103 [label="Exit property [2]" style="filled" fillcolor=red]; + 103 [label="Enter property [2]" style="filled" fillcolor=red]; + 104 [label="Function call: R|/KtModifierList.KtModifierList|() [2]" style="filled" fillcolor=yellow]; + 105 [label="Exit property [2]" style="filled" fillcolor=red]; } - 106 [label="Exit class KtModifierListOwner [1]" style="filled" fillcolor=red]; + 108 [label="Exit class KtModifierListOwner [1]" style="filled" fillcolor=red]; } subgraph cluster_35 { color=blue - 98 [label="Enter function [2]" style="filled" fillcolor=red]; - 99 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; - 100 [label="Exit function [2]" style="filled" fillcolor=red]; + 100 [label="Enter function [2]" style="filled" fillcolor=red]; + 101 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; + 102 [label="Exit function [2]" style="filled" fillcolor=red]; } - 104 -> {105} [color=green]; - 105 -> {101} [color=green]; - 105 -> {106} [style=dotted]; - 105 -> {101} [style=dashed]; - 106 -> {98} [color=green]; - 106 -> {98} [style=dashed]; + 106 -> {107} [color=green]; + 107 -> {103} [color=green]; + 107 -> {108} [style=dotted]; + 107 -> {103} [style=dashed]; + 108 -> {100} [color=green]; + 108 -> {100} [style=dashed]; + 103 -> {104}; + 104 -> {105}; + 105 -> {108} [color=green]; + 100 -> {101}; 101 -> {102}; - 102 -> {103}; - 103 -> {106} [color=green]; - 98 -> {99}; - 99 -> {100}; subgraph cluster_36 { color=red - 121 [label="Enter class FirPsiModifier [2]" style="filled" fillcolor=red]; - 122 [label="Exit class FirPsiModifier [2]" style="filled" fillcolor=red]; + 123 [label="Enter class FirPsiModifier [2]" style="filled" fillcolor=red]; + 124 [label="Exit class FirPsiModifier [2]" style="filled" fillcolor=red]; } subgraph cluster_37 { color=blue - 116 [label="Enter function [3]" style="filled" fillcolor=red]; - 117 [label="Access variable R|/node| [4]"]; - 118 [label="Access variable R|/token| [4]"]; - 119 [label="Delegated constructor call: super|>(...) [3]" style="filled" fillcolor=yellow]; - 120 [label="Exit function [3]" style="filled" fillcolor=red]; + 118 [label="Enter function [3]" style="filled" fillcolor=red]; + 119 [label="Access variable R|/node| [4]"]; + 120 [label="Access variable R|/token| [4]"]; + 121 [label="Delegated constructor call: super|>(...) [3]" style="filled" fillcolor=yellow]; + 122 [label="Exit function [3]" style="filled" fillcolor=red]; } - 121 -> {122} [color=green]; - 122 -> {116} [color=green]; - 122 -> {116} [style=dashed]; - 116 -> {117}; - 117 -> {118}; + 123 -> {124} [color=green]; + 124 -> {118} [color=green]; + 124 -> {118} [style=dashed]; 118 -> {119}; 119 -> {120}; + 120 -> {121}; + 121 -> {122}; subgraph cluster_38 { color=red - 131 [label="Enter class FirLightModifier [2]" style="filled" fillcolor=red]; - 132 [label="Part of class initialization [2]"]; + 133 [label="Enter class FirLightModifier [2]" style="filled" fillcolor=red]; + 134 [label="Part of class initialization [2]"]; subgraph cluster_39 { color=blue - 128 [label="Enter property [3]" style="filled" fillcolor=red]; - 129 [label="Access variable R|/tree| [3]"]; - 130 [label="Exit property [3]" style="filled" fillcolor=red]; + 130 [label="Enter property [3]" style="filled" fillcolor=red]; + 131 [label="Access variable R|/tree| [3]"]; + 132 [label="Exit property [3]" style="filled" fillcolor=red]; } - 133 [label="Exit class FirLightModifier [2]" style="filled" fillcolor=red]; + 135 [label="Exit class FirLightModifier [2]" style="filled" fillcolor=red]; } subgraph cluster_40 { color=blue - 123 [label="Enter function [3]" style="filled" fillcolor=red]; - 124 [label="Access variable R|/node| [4]"]; - 125 [label="Access variable R|/token| [4]"]; - 126 [label="Delegated constructor call: super|>(...) [3]" style="filled" fillcolor=yellow]; - 127 [label="Exit function [3]" style="filled" fillcolor=red]; + 125 [label="Enter function [3]" style="filled" fillcolor=red]; + 126 [label="Access variable R|/node| [4]"]; + 127 [label="Access variable R|/token| [4]"]; + 128 [label="Delegated constructor call: super|>(...) [3]" style="filled" fillcolor=yellow]; + 129 [label="Exit function [3]" style="filled" fillcolor=red]; } - 131 -> {132} [color=green]; - 132 -> {128} [color=green]; - 132 -> {133} [style=dotted]; - 132 -> {128} [style=dashed]; - 133 -> {123} [color=green]; - 133 -> {123} [style=dashed]; - 128 -> {129}; - 129 -> {130}; - 130 -> {133} [color=green]; - 123 -> {124}; - 124 -> {125}; + 133 -> {134} [color=green]; + 134 -> {130} [color=green]; + 134 -> {135} [style=dotted]; + 134 -> {130} [style=dashed]; + 135 -> {125} [color=green]; + 135 -> {125} [style=dashed]; + 130 -> {131}; + 131 -> {132}; + 132 -> {135} [color=green]; 125 -> {126}; 126 -> {127}; + 127 -> {128}; + 128 -> {129}; subgraph cluster_41 { color=red - 134 [label="Enter class FirModifier [1]" style="filled" fillcolor=red]; - 135 [label="Part of class initialization [1]"]; + 136 [label="Enter class FirModifier [1]" style="filled" fillcolor=red]; + 137 [label="Part of class initialization [1]"]; subgraph cluster_42 { color=blue - 110 [label="Enter property [2]" style="filled" fillcolor=red]; - 111 [label="Access variable R|/node| [2]"]; - 112 [label="Exit property [2]" style="filled" fillcolor=red]; + 112 [label="Enter property [2]" style="filled" fillcolor=red]; + 113 [label="Access variable R|/node| [2]"]; + 114 [label="Exit property [2]" style="filled" fillcolor=red]; } - 136 [label="Part of class initialization [1]"]; + 138 [label="Part of class initialization [1]"]; subgraph cluster_43 { color=blue - 113 [label="Enter property [2]" style="filled" fillcolor=red]; - 114 [label="Access variable R|/token| [2]"]; - 115 [label="Exit property [2]" style="filled" fillcolor=red]; + 115 [label="Enter property [2]" style="filled" fillcolor=red]; + 116 [label="Access variable R|/token| [2]"]; + 117 [label="Exit property [2]" style="filled" fillcolor=red]; } - 137 [label="Exit class FirModifier [1]" style="filled" fillcolor=red]; + 139 [label="Exit class FirModifier [1]" style="filled" fillcolor=red]; } subgraph cluster_44 { color=blue - 107 [label="Enter function [2]" style="filled" fillcolor=red]; - 108 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; - 109 [label="Exit function [2]" style="filled" fillcolor=red]; + 109 [label="Enter function [2]" style="filled" fillcolor=red]; + 110 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; + 111 [label="Exit function [2]" style="filled" fillcolor=red]; } - 134 -> {135} [color=green]; - 135 -> {110} [color=green]; - 135 -> {136} [style=dotted]; - 135 -> {110} [style=dashed]; - 136 -> {113} [color=green]; - 136 -> {137} [style=dotted]; - 136 -> {113} [style=dashed]; - 137 -> {107} [color=green]; - 137 -> {107} [style=dashed]; - 110 -> {111}; - 111 -> {112}; - 112 -> {136} [color=green]; + 136 -> {137} [color=green]; + 137 -> {112} [color=green]; + 137 -> {138} [style=dotted]; + 137 -> {112} [style=dashed]; + 138 -> {115} [color=green]; + 138 -> {139} [style=dotted]; + 138 -> {115} [style=dashed]; + 139 -> {109} [color=green]; + 139 -> {109} [style=dashed]; + 112 -> {113}; 113 -> {114}; - 114 -> {115}; - 115 -> {137} [color=green]; - 107 -> {108}; - 108 -> {109}; + 114 -> {138} [color=green]; + 115 -> {116}; + 116 -> {117}; + 117 -> {139} [color=green]; + 109 -> {110}; + 110 -> {111}; subgraph cluster_45 { color=red - 150 [label="Enter class FirPsiModifierList [2]" style="filled" fillcolor=red]; - 151 [label="Part of class initialization [2]"]; + 152 [label="Enter class FirPsiModifierList [2]" style="filled" fillcolor=red]; + 153 [label="Part of class initialization [2]"]; subgraph cluster_46 { color=blue - 147 [label="Enter property [3]" style="filled" fillcolor=red]; - 148 [label="Access variable R|/modifierList| [3]"]; - 149 [label="Exit property [3]" style="filled" fillcolor=red]; + 149 [label="Enter property [3]" style="filled" fillcolor=red]; + 150 [label="Access variable R|/modifierList| [3]"]; + 151 [label="Exit property [3]" style="filled" fillcolor=red]; } - 152 [label="Exit class FirPsiModifierList [2]" style="filled" fillcolor=red]; + 154 [label="Exit class FirPsiModifierList [2]" style="filled" fillcolor=red]; } subgraph cluster_47 { color=blue - 144 [label="Enter function [3]" style="filled" fillcolor=red]; - 145 [label="Delegated constructor call: super() [3]" style="filled" fillcolor=yellow]; - 146 [label="Exit function [3]" style="filled" fillcolor=red]; + 146 [label="Enter function [3]" style="filled" fillcolor=red]; + 147 [label="Delegated constructor call: super() [3]" style="filled" fillcolor=yellow]; + 148 [label="Exit function [3]" style="filled" fillcolor=red]; } - 150 -> {151} [color=green]; - 151 -> {147} [color=green]; - 151 -> {152} [style=dotted]; - 151 -> {147} [style=dashed]; - 152 -> {144} [color=green]; - 152 -> {144} [style=dashed]; + 152 -> {153} [color=green]; + 153 -> {149} [color=green]; + 153 -> {154} [style=dotted]; + 153 -> {149} [style=dashed]; + 154 -> {146} [color=green]; + 154 -> {146} [style=dashed]; + 149 -> {150}; + 150 -> {151}; + 151 -> {154} [color=green]; + 146 -> {147}; 147 -> {148}; - 148 -> {149}; - 149 -> {152} [color=green]; - 144 -> {145}; - 145 -> {146}; subgraph cluster_48 { color=red - 162 [label="Enter class FirLightModifierList [2]" style="filled" fillcolor=red]; - 163 [label="Part of class initialization [2]"]; + 164 [label="Enter class FirLightModifierList [2]" style="filled" fillcolor=red]; + 165 [label="Part of class initialization [2]"]; subgraph cluster_49 { color=blue - 156 [label="Enter property [3]" style="filled" fillcolor=red]; - 157 [label="Access variable R|/modifierList| [3]"]; - 158 [label="Exit property [3]" style="filled" fillcolor=red]; + 158 [label="Enter property [3]" style="filled" fillcolor=red]; + 159 [label="Access variable R|/modifierList| [3]"]; + 160 [label="Exit property [3]" style="filled" fillcolor=red]; } - 164 [label="Part of class initialization [2]"]; + 166 [label="Part of class initialization [2]"]; subgraph cluster_50 { color=blue - 159 [label="Enter property [3]" style="filled" fillcolor=red]; - 160 [label="Access variable R|/tree| [3]"]; - 161 [label="Exit property [3]" style="filled" fillcolor=red]; + 161 [label="Enter property [3]" style="filled" fillcolor=red]; + 162 [label="Access variable R|/tree| [3]"]; + 163 [label="Exit property [3]" style="filled" fillcolor=red]; } - 165 [label="Exit class FirLightModifierList [2]" style="filled" fillcolor=red]; + 167 [label="Exit class FirLightModifierList [2]" style="filled" fillcolor=red]; } subgraph cluster_51 { color=blue - 153 [label="Enter function [3]" style="filled" fillcolor=red]; - 154 [label="Delegated constructor call: super() [3]" style="filled" fillcolor=yellow]; - 155 [label="Exit function [3]" style="filled" fillcolor=red]; + 155 [label="Enter function [3]" style="filled" fillcolor=red]; + 156 [label="Delegated constructor call: super() [3]" style="filled" fillcolor=yellow]; + 157 [label="Exit function [3]" style="filled" fillcolor=red]; } - 162 -> {163} [color=green]; - 163 -> {156} [color=green]; - 163 -> {164} [style=dotted]; - 163 -> {156} [style=dashed]; - 164 -> {159} [color=green]; - 164 -> {165} [style=dotted]; - 164 -> {159} [style=dashed]; - 165 -> {153} [color=green]; - 165 -> {153} [style=dashed]; - 156 -> {157}; - 157 -> {158}; - 158 -> {164} [color=green]; + 164 -> {165} [color=green]; + 165 -> {158} [color=green]; + 165 -> {166} [style=dotted]; + 165 -> {158} [style=dashed]; + 166 -> {161} [color=green]; + 166 -> {167} [style=dotted]; + 166 -> {161} [style=dashed]; + 167 -> {155} [color=green]; + 167 -> {155} [style=dashed]; + 158 -> {159}; 159 -> {160}; - 160 -> {161}; - 161 -> {165} [color=green]; - 153 -> {154}; - 154 -> {155}; + 160 -> {166} [color=green]; + 161 -> {162}; + 162 -> {163}; + 163 -> {167} [color=green]; + 155 -> {156}; + 156 -> {157}; subgraph cluster_52 { color=red - 282 [label="Enter class Companion [2]" style="filled" fillcolor=red]; - 283 [label="Exit class Companion [2]" style="filled" fillcolor=red]; + 284 [label="Enter class Companion [2]" style="filled" fillcolor=red]; + 285 [label="Exit class Companion [2]" style="filled" fillcolor=red]; } subgraph cluster_53 { color=blue - 249 [label="Enter function boxImpl [3]" style="filled" fillcolor=red]; + 251 [label="Enter function boxImpl [3]" style="filled" fillcolor=red]; subgraph cluster_54 { color=blue - 250 [label="Enter block [3]"]; - 251 [label="Function call: R|/LighterASTNode.LighterASTNode|() [6]" style="filled" fillcolor=yellow]; - 252 [label="Function call: R|kotlin/collections/listOf|(...) [5]" style="filled" fillcolor=yellow]; - 253 [label="Function call: R|/LighterASTNode.LighterASTNode|(...) [4]" style="filled" fillcolor=yellow]; - 254 [label="Function call: R|/FlyweightCapableTreeStructure.FlyweightCapableTreeStructure|() [4]" style="filled" fillcolor=yellow]; - 255 [label="Function call: R|/FirLightSourceElement.FirLightSourceElement|(...) [3]" style="filled" fillcolor=yellow]; - 256 [label="Variable declaration: lval sourceElement: R|FirSourceElement?| [3]"]; - 257 [label="Access variable R|/sourceElement| [4]"]; - 258 [label="Function call: (this@R|/FirModifierList.Companion|, R|/sourceElement|).R|/FirModifierList.Companion.getModifierList|() [3]" style="filled" fillcolor=yellow]; - 259 [label="Variable declaration: lval result: R|FirModifierList?| [3]"]; + 252 [label="Enter block [3]"]; + 253 [label="Function call: R|/LighterASTNode.LighterASTNode|() [6]" style="filled" fillcolor=yellow]; + 254 [label="Function call: R|kotlin/collections/listOf|(...) [5]" style="filled" fillcolor=yellow]; + 255 [label="Function call: R|/LighterASTNode.LighterASTNode|(...) [4]" style="filled" fillcolor=yellow]; + 256 [label="Function call: R|/FlyweightCapableTreeStructure.FlyweightCapableTreeStructure|() [4]" style="filled" fillcolor=yellow]; + 257 [label="Function call: R|/FirLightSourceElement.FirLightSourceElement|(...) [3]" style="filled" fillcolor=yellow]; + 258 [label="Variable declaration: lval sourceElement: R|FirSourceElement?| [3]"]; + 259 [label="Access variable R|/sourceElement| [4]"]; + 260 [label="Function call: (this@R|/FirModifierList.Companion|, R|/sourceElement|).R|/FirModifierList.Companion.getModifierList|() [3]" style="filled" fillcolor=yellow]; + 261 [label="Variable declaration: lval result: R|FirModifierList?| [3]"]; subgraph cluster_55 { color=blue - 260 [label="Enter when [3]"]; + 262 [label="Enter when [3]"]; subgraph cluster_56 { color=blue - 261 [label="Enter when branch condition [4]"]; - 262 [label="Access variable R|/result| [5]"]; - 263 [label="Type operator: (R|/result| is R|FirModifierList.FirLightModifierList|) [5]"]; - 264 [label="Exit when branch condition [4]"]; + 263 [label="Enter when branch condition [4]"]; + 264 [label="Access variable R|/result| [5]"]; + 265 [label="Type operator: (R|/result| is R|FirModifierList.FirLightModifierList|) [5]"]; + 266 [label="Exit when branch condition [4]"]; } subgraph cluster_57 { color=blue - 265 [label="Enter when branch condition else [5]"]; - 266 [label="Exit when branch condition [5]"]; + 267 [label="Enter when branch condition else [5]"]; + 268 [label="Exit when branch condition [5]"]; } - 267 [label="Enter when branch result [6]"]; + 269 [label="Enter when branch result [6]"]; subgraph cluster_58 { color=blue - 268 [label="Enter block [6]"]; - 269 [label="Const: String(Fail) [6]"]; - 270 [label="Exit block [6]"]; + 270 [label="Enter block [6]"]; + 271 [label="Const: String(Fail) [6]"]; + 272 [label="Exit block [6]"]; } - 271 [label="Exit when branch result [5]"]; - 272 [label="Enter when branch result [5]"]; + 273 [label="Exit when branch result [5]"]; + 274 [label="Enter when branch result [5]"]; subgraph cluster_59 { color=blue - 273 [label="Enter block [5]"]; - 274 [label="Const: String(OK) [5]"]; - 275 [label="Exit block [5]"]; + 275 [label="Enter block [5]"]; + 276 [label="Const: String(OK) [5]"]; + 277 [label="Exit block [5]"]; } - 276 [label="Exit when branch result [4]"]; - 277 [label="Exit when [3]"]; + 278 [label="Exit when branch result [4]"]; + 279 [label="Exit when [3]"]; } - 278 [label="Jump: ^boxImpl when () { + 280 [label="Jump: ^boxImpl when () { (R|/result| is R|FirModifierList.FirLightModifierList|) -> { String(OK) } @@ -588,125 +593,125 @@ digraph kt44814_kt { } } [3]"]; - 279 [label="Stub [3]" style="filled" fillcolor=gray]; - 280 [label="Exit block [3]" style="filled" fillcolor=gray]; + 281 [label="Stub [3]" style="filled" fillcolor=gray]; + 282 [label="Exit block [3]" style="filled" fillcolor=gray]; } - 281 [label="Exit function boxImpl [3]" style="filled" fillcolor=red]; + 283 [label="Exit function boxImpl [3]" style="filled" fillcolor=red]; } subgraph cluster_60 { color=blue - 169 [label="Enter function getModifierList [3]" style="filled" fillcolor=red]; + 171 [label="Enter function getModifierList [3]" style="filled" fillcolor=red]; subgraph cluster_61 { color=blue - 170 [label="Enter block [3]"]; + 172 [label="Enter block [3]"]; subgraph cluster_62 { color=blue - 171 [label="Enter when [3]"]; - 172 [label="Access variable this@R|/FirModifierList.Companion.getModifierList| [4]"]; + 173 [label="Enter when [3]"]; + 174 [label="Access variable this@R|/FirModifierList.Companion.getModifierList| [4]"]; subgraph cluster_63 { color=blue - 173 [label="Enter when branch condition [4]"]; - 174 [label="Exit $subj [5]"]; - 175 [label="Const: Null(null) [5]"]; - 176 [label="Equality operator == [5]"]; - 177 [label="Exit when branch condition [4]"]; + 175 [label="Enter when branch condition [4]"]; + 176 [label="Exit $subj [5]"]; + 177 [label="Const: Null(null) [5]"]; + 178 [label="Equality operator == [5]"]; + 179 [label="Exit when branch condition [4]"]; } subgraph cluster_64 { color=blue - 178 [label="Enter when branch condition [5]"]; - 179 [label="Exit $subj [6]"]; - 180 [label="Type operator: ($subj$ is R|FirPsiSourceElement|) [6]"]; - 181 [label="Exit when branch condition [5]"]; + 180 [label="Enter when branch condition [5]"]; + 181 [label="Exit $subj [6]"]; + 182 [label="Type operator: ($subj$ is R|FirPsiSourceElement|) [6]"]; + 183 [label="Exit when branch condition [5]"]; } subgraph cluster_65 { color=blue - 182 [label="Enter when branch condition [6]"]; - 183 [label="Exit $subj [7]"]; - 184 [label="Type operator: ($subj$ is R|FirLightSourceElement|) [7]"]; - 185 [label="Exit when branch condition [6]"]; + 184 [label="Enter when branch condition [6]"]; + 185 [label="Exit $subj [7]"]; + 186 [label="Type operator: ($subj$ is R|FirLightSourceElement|) [7]"]; + 187 [label="Exit when branch condition [6]"]; } - 186 [label="Enter when branch result [7]"]; + 188 [label="Enter when branch result [7]"]; subgraph cluster_66 { color=blue - 187 [label="Enter block [7]"]; - 188 [label="Access variable R|/FirLightSourceElement.lighterASTNode| [9]"]; - 189 [label="Access variable R|/FirLightSourceElement.treeStructure| [9]"]; - 190 [label="Function call: this@R|/FirModifierList.Companion.getModifierList|.R|/FirLightSourceElement.lighterASTNode|.R|/LighterASTNode.getChildren|(...) [8]" style="filled" fillcolor=yellow]; - 191 [label="Postponed enter to lambda [8]"]; + 189 [label="Enter block [7]"]; + 190 [label="Access variable R|/FirLightSourceElement.lighterASTNode| [9]"]; + 191 [label="Access variable R|/FirLightSourceElement.treeStructure| [9]"]; + 192 [label="Function call: this@R|/FirModifierList.Companion.getModifierList|.R|/FirLightSourceElement.lighterASTNode|.R|/LighterASTNode.getChildren|(...) [8]" style="filled" fillcolor=yellow]; + 193 [label="Postponed enter to lambda [8]"]; subgraph cluster_67 { color=blue - 238 [label="Enter function anonymousFunction [9]" style="filled" fillcolor=red]; + 240 [label="Enter function anonymousFunction [9]" style="filled" fillcolor=red]; subgraph cluster_68 { color=blue - 239 [label="Enter block [9]"]; - 240 [label="Access variable R|/it| [9]"]; - 241 [label="Enter safe call [9]"]; - 242 [label="Access variable R|/LighterASTNode.tokenType| [9]"]; - 243 [label="Exit safe call [9]"]; - 244 [label="Access qualifier /TokenType [9]"]; - 245 [label="Access variable R|/TokenType.Companion.MODIFIER_LIST| [9]"]; - 246 [label="Equality operator == [9]"]; - 247 [label="Exit block [9]"]; + 241 [label="Enter block [9]"]; + 242 [label="Access variable R|/it| [9]"]; + 243 [label="Enter safe call [9]"]; + 244 [label="Access variable R|/LighterASTNode.tokenType| [9]"]; + 245 [label="Exit safe call [9]"]; + 246 [label="Access qualifier /TokenType [9]"]; + 247 [label="Access variable R|/TokenType.Companion.MODIFIER_LIST| [9]"]; + 248 [label="Equality operator == [9]"]; + 249 [label="Exit block [9]"]; } - 248 [label="Exit function anonymousFunction [9]" style="filled" fillcolor=red]; + 250 [label="Exit function anonymousFunction [9]" style="filled" fillcolor=red]; } - 192 [label="Postponed exit from lambda [8]"]; - 193 [label="Function call: this@R|/FirModifierList.Companion.getModifierList|.R|/FirLightSourceElement.lighterASTNode|.R|/LighterASTNode.getChildren|(...).R|kotlin/collections/find|(...) [7]" style="filled" fillcolor=yellow]; - 194 [label="Exit lhs of ?: [7]"]; - 195 [label="Enter rhs of ?: [7]"]; - 196 [label="Const: Null(null) [7]"]; - 197 [label="Jump: ^getModifierList Null(null) [7]"]; - 198 [label="Stub [7]" style="filled" fillcolor=gray]; - 199 [label="Lhs of ?: is not null [7]"]; - 200 [label="Exit ?: [7]"]; - 201 [label="Variable declaration: lval modifierListNode: R|LighterASTNode| [7]"]; - 202 [label="Access variable R|/modifierListNode| [8]"]; - 203 [label="Access variable R|/FirLightSourceElement.treeStructure| [8]"]; - 204 [label="Function call: R|/FirModifierList.FirLightModifierList.FirLightModifierList|(...) [7]" style="filled" fillcolor=yellow]; - 205 [label="Exit block [7]"]; + 194 [label="Postponed exit from lambda [8]"]; + 195 [label="Function call: this@R|/FirModifierList.Companion.getModifierList|.R|/FirLightSourceElement.lighterASTNode|.R|/LighterASTNode.getChildren|(...).R|kotlin/collections/find|(...) [7]" style="filled" fillcolor=yellow]; + 196 [label="Exit lhs of ?: [7]"]; + 197 [label="Enter rhs of ?: [7]"]; + 198 [label="Const: Null(null) [7]"]; + 199 [label="Jump: ^getModifierList Null(null) [7]"]; + 200 [label="Stub [7]" style="filled" fillcolor=gray]; + 201 [label="Lhs of ?: is not null [7]"]; + 202 [label="Exit ?: [7]"]; + 203 [label="Variable declaration: lval modifierListNode: R|LighterASTNode| [7]"]; + 204 [label="Access variable R|/modifierListNode| [8]"]; + 205 [label="Access variable R|/FirLightSourceElement.treeStructure| [8]"]; + 206 [label="Function call: R|/FirModifierList.FirLightModifierList.FirLightModifierList|(...) [7]" style="filled" fillcolor=yellow]; + 207 [label="Exit block [7]"]; } - 206 [label="Exit when branch result [6]"]; - 207 [label="Enter when branch result [6]"]; + 208 [label="Exit when branch result [6]"]; + 209 [label="Enter when branch result [6]"]; subgraph cluster_69 { color=blue - 208 [label="Enter block [6]"]; - 209 [label="Access variable R|/FirPsiSourceElement.psi| [6]"]; - 210 [label="Type operator: (this@R|/FirModifierList.Companion.getModifierList|.R|/FirPsiSourceElement.psi| as? R|KtModifierListOwner|) [6]"]; - 211 [label="Enter safe call [6]"]; - 212 [label="Access variable R|/KtModifierListOwner.modifierList| [6]"]; + 210 [label="Enter block [6]"]; + 211 [label="Access variable R|/FirPsiSourceElement.psi| [6]"]; + 212 [label="Type operator: (this@R|/FirModifierList.Companion.getModifierList|.R|/FirPsiSourceElement.psi| as? R|KtModifierListOwner|) [6]"]; 213 [label="Enter safe call [6]"]; - 214 [label="Postponed enter to lambda [7]"]; + 214 [label="Access variable R|/KtModifierListOwner.modifierList| [6]"]; + 215 [label="Enter safe call [6]"]; + 216 [label="Postponed enter to lambda [7]"]; subgraph cluster_70 { color=blue - 232 [label="Enter function anonymousFunction [8]" style="filled" fillcolor=red]; + 234 [label="Enter function anonymousFunction [8]" style="filled" fillcolor=red]; subgraph cluster_71 { color=blue - 233 [label="Enter block [8]"]; - 234 [label="Access variable R|/it| [9]"]; - 235 [label="Function call: R|/FirModifierList.FirPsiModifierList.FirPsiModifierList|(...) [8]" style="filled" fillcolor=yellow]; - 236 [label="Exit block [8]"]; + 235 [label="Enter block [8]"]; + 236 [label="Access variable R|/it| [9]"]; + 237 [label="Function call: R|/FirModifierList.FirPsiModifierList.FirPsiModifierList|(...) [8]" style="filled" fillcolor=yellow]; + 238 [label="Exit block [8]"]; } - 237 [label="Exit function anonymousFunction [8]" style="filled" fillcolor=red]; + 239 [label="Exit function anonymousFunction [8]" style="filled" fillcolor=red]; } - 215 [label="Postponed exit from lambda [7]"]; - 216 [label="Function call: $subj$.R|kotlin/let|(...) [6]" style="filled" fillcolor=yellow]; - 217 [label="Exit safe call [6]"]; - 218 [label="Exit safe call [6]"]; - 219 [label="Exit block [6]"]; + 217 [label="Postponed exit from lambda [7]"]; + 218 [label="Function call: $subj$.R|kotlin/let|(...) [6]" style="filled" fillcolor=yellow]; + 219 [label="Exit safe call [6]"]; + 220 [label="Exit safe call [6]"]; + 221 [label="Exit block [6]"]; } - 220 [label="Exit when branch result [5]"]; - 221 [label="Merge postponed lambda exits [6]"]; - 222 [label="Enter when branch result [5]"]; + 222 [label="Exit when branch result [5]"]; + 223 [label="Merge postponed lambda exits [6]"]; + 224 [label="Enter when branch result [5]"]; subgraph cluster_72 { color=blue - 223 [label="Enter block [5]"]; - 224 [label="Const: Null(null) [5]"]; - 225 [label="Exit block [5]"]; + 225 [label="Enter block [5]"]; + 226 [label="Const: Null(null) [5]"]; + 227 [label="Exit block [5]"]; } - 226 [label="Exit when branch result [4]"]; - 227 [label="Exit when [3]"]; + 228 [label="Exit when branch result [4]"]; + 229 [label="Exit when [3]"]; } - 228 [label="Jump: ^getModifierList when (this@R|/FirModifierList.Companion.getModifierList|) { + 230 [label="Jump: ^getModifierList when (this@R|/FirModifierList.Companion.getModifierList|) { ==($subj$, Null(null)) -> { Null(null) } @@ -725,37 +730,35 @@ digraph kt44814_kt { } } [3]"]; - 229 [label="Stub [3]" style="filled" fillcolor=gray]; - 230 [label="Exit block [3]" style="filled" fillcolor=gray]; + 231 [label="Stub [3]" style="filled" fillcolor=gray]; + 232 [label="Exit block [3]" style="filled" fillcolor=gray]; } - 231 [label="Exit function getModifierList [3]" style="filled" fillcolor=red]; + 233 [label="Exit function getModifierList [3]" style="filled" fillcolor=red]; } subgraph cluster_73 { color=blue - 166 [label="Enter function [3]" style="filled" fillcolor=red]; - 167 [label="Delegated constructor call: super() [3]" style="filled" fillcolor=yellow]; - 168 [label="Exit function [3]" style="filled" fillcolor=red]; + 168 [label="Enter function [3]" style="filled" fillcolor=red]; + 169 [label="Delegated constructor call: super() [3]" style="filled" fillcolor=yellow]; + 170 [label="Exit function [3]" style="filled" fillcolor=red]; } - 282 -> {283} [color=green]; - 283 -> {166 169 249} [color=green]; - 283 -> {166 169 249} [style=dashed]; - 166 -> {167}; - 167 -> {168}; + 284 -> {285} [color=green]; + 285 -> {168 171 251} [color=green]; + 285 -> {168 171 251} [style=dashed]; + 168 -> {169}; 169 -> {170}; - 170 -> {171}; 171 -> {172}; 172 -> {173}; 173 -> {174}; 174 -> {175}; 175 -> {176}; 176 -> {177}; - 177 -> {178 222}; + 177 -> {178}; 178 -> {179}; - 179 -> {180}; + 179 -> {180 224}; 180 -> {181}; - 181 -> {182 207}; + 181 -> {182}; 182 -> {183}; - 183 -> {184}; + 183 -> {184 209}; 184 -> {185}; 185 -> {186}; 186 -> {187}; @@ -763,72 +766,72 @@ digraph kt44814_kt { 188 -> {189}; 189 -> {190}; 190 -> {191}; - 191 -> {192 193 238}; - 191 -> {238} [style=dashed]; + 191 -> {192}; 192 -> {193}; - 192 -> {191} [color=green style=dashed]; - 193 -> {194}; - 194 -> {195 199}; + 193 -> {194 195 240}; + 193 -> {240} [style=dashed]; + 194 -> {195}; + 194 -> {193} [color=green style=dashed]; 195 -> {196}; - 196 -> {197}; - 197 -> {231}; - 197 -> {198} [style=dotted]; - 198 -> {200} [style=dotted]; - 199 -> {200}; - 200 -> {201}; + 196 -> {197 201}; + 197 -> {198}; + 198 -> {199}; + 199 -> {233}; + 199 -> {200} [style=dotted]; + 200 -> {202} [style=dotted]; 201 -> {202}; 202 -> {203}; 203 -> {204}; 204 -> {205}; 205 -> {206}; - 206 -> {227}; + 206 -> {207}; 207 -> {208}; - 208 -> {209}; + 208 -> {229}; 209 -> {210}; - 210 -> {211 217}; + 210 -> {211}; 211 -> {212}; - 212 -> {213 217}; + 212 -> {213 219}; 213 -> {214}; - 214 -> {216 232}; - 214 -> {215} [style=dotted]; - 214 -> {232} [style=dashed]; - 215 -> {216} [color=green]; - 215 -> {221} [color=red]; - 216 -> {218}; - 217 -> {218}; - 218 -> {219 221}; + 214 -> {215 219}; + 215 -> {216}; + 216 -> {218 234}; + 216 -> {217} [style=dotted]; + 216 -> {234} [style=dashed]; + 217 -> {218} [color=green]; + 217 -> {223} [color=red]; + 218 -> {220}; 219 -> {220}; - 220 -> {227}; - 221 -> {227} [color=red]; - 222 -> {223}; - 223 -> {224}; + 220 -> {221 223}; + 221 -> {222}; + 222 -> {229}; + 223 -> {229} [color=red]; 224 -> {225}; 225 -> {226}; 226 -> {227}; 227 -> {228}; - 228 -> {231}; - 228 -> {229} [style=dotted]; - 229 -> {230} [style=dotted]; + 228 -> {229}; + 229 -> {230}; + 230 -> {233}; 230 -> {231} [style=dotted]; - 232 -> {233}; - 233 -> {234}; + 231 -> {232} [style=dotted]; + 232 -> {233} [style=dotted]; 234 -> {235}; 235 -> {236}; 236 -> {237}; - 237 -> {215}; + 237 -> {238}; 238 -> {239}; - 239 -> {240}; - 240 -> {241 243}; + 239 -> {217}; + 240 -> {241}; 241 -> {242}; - 242 -> {243}; + 242 -> {243 245}; 243 -> {244}; 244 -> {245}; 245 -> {246}; 246 -> {247}; 247 -> {248}; - 248 -> {192}; + 248 -> {249}; 249 -> {250}; - 250 -> {251}; + 250 -> {194}; 251 -> {252}; 252 -> {253}; 253 -> {254}; @@ -842,76 +845,78 @@ digraph kt44814_kt { 261 -> {262}; 262 -> {263}; 263 -> {264}; - 264 -> {265 272}; + 264 -> {265}; 265 -> {266}; - 266 -> {267}; + 266 -> {267 274}; 267 -> {268}; 268 -> {269}; 269 -> {270}; 270 -> {271}; - 271 -> {277}; + 271 -> {272}; 272 -> {273}; - 273 -> {274}; + 273 -> {279}; 274 -> {275}; 275 -> {276}; 276 -> {277}; 277 -> {278}; - 278 -> {281}; - 278 -> {279} [style=dotted]; - 279 -> {280} [style=dotted]; + 278 -> {279}; + 279 -> {280}; + 280 -> {283}; 280 -> {281} [style=dotted]; + 281 -> {282} [style=dotted]; + 282 -> {283} [style=dotted]; subgraph cluster_74 { color=red - 284 [label="Enter class FirModifierList [1]" style="filled" fillcolor=red]; - 285 [label="Part of class initialization [1]"]; + 286 [label="Enter class FirModifierList [1]" style="filled" fillcolor=red]; + 287 [label="Part of class initialization [1]"]; subgraph cluster_75 { color=blue - 141 [label="Enter property [2]" style="filled" fillcolor=red]; - 142 [label="Function call: R|kotlin/collections/emptyList||>() [2]" style="filled" fillcolor=yellow]; - 143 [label="Exit property [2]" style="filled" fillcolor=red]; + 143 [label="Enter property [2]" style="filled" fillcolor=red]; + 144 [label="Function call: R|kotlin/collections/emptyList||>() [2]" style="filled" fillcolor=yellow]; + 145 [label="Exit property [2]" style="filled" fillcolor=red]; } - 286 [label="Exit class FirModifierList [1]" style="filled" fillcolor=red]; + 288 [label="Exit class FirModifierList [1]" style="filled" fillcolor=red]; } subgraph cluster_76 { color=blue - 138 [label="Enter function [2]" style="filled" fillcolor=red]; - 139 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; - 140 [label="Exit function [2]" style="filled" fillcolor=red]; + 140 [label="Enter function [2]" style="filled" fillcolor=red]; + 141 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; + 142 [label="Exit function [2]" style="filled" fillcolor=red]; } - 284 -> {285} [color=green]; - 285 -> {141} [color=green]; - 285 -> {286} [style=dotted]; - 285 -> {141} [style=dashed]; - 286 -> {138} [color=green]; - 286 -> {138} [style=dashed]; + 286 -> {287} [color=green]; + 287 -> {143} [color=green]; + 287 -> {288} [style=dotted]; + 287 -> {143} [style=dashed]; + 288 -> {140} [color=green]; + 288 -> {140} [style=dashed]; + 143 -> {144}; + 144 -> {145}; + 145 -> {288} [color=green]; + 140 -> {141}; 141 -> {142}; - 142 -> {143}; - 143 -> {286} [color=green]; - 138 -> {139}; - 139 -> {140}; subgraph cluster_77 { color=red - 287 [label="Enter function box [1]" style="filled" fillcolor=red]; + 289 [label="Enter function box [1]" style="filled" fillcolor=red]; subgraph cluster_78 { color=blue - 288 [label="Enter block [1]"]; - 289 [label="Access qualifier /FirModifierList [2]"]; - 290 [label="Function call: Q|FirModifierList|.R|/FirModifierList.Companion.boxImpl|() [1]" style="filled" fillcolor=yellow]; - 291 [label="Jump: ^box Q|FirModifierList|.R|/FirModifierList.Companion.boxImpl|() [1]"]; - 292 [label="Stub [1]" style="filled" fillcolor=gray]; - 293 [label="Exit block [1]" style="filled" fillcolor=gray]; + 290 [label="Enter block [1]"]; + 291 [label="Access qualifier /FirModifierList [2]"]; + 292 [label="Function call: Q|FirModifierList|.R|/FirModifierList.Companion.boxImpl|() [1]" style="filled" fillcolor=yellow]; + 293 [label="Jump: ^box Q|FirModifierList|.R|/FirModifierList.Companion.boxImpl|() [1]"]; + 294 [label="Stub [1]" style="filled" fillcolor=gray]; + 295 [label="Exit block [1]" style="filled" fillcolor=gray]; } - 294 [label="Exit function box [1]" style="filled" fillcolor=red]; + 296 [label="Exit function box [1]" style="filled" fillcolor=red]; } - 287 -> {288}; - 288 -> {289}; 289 -> {290}; 290 -> {291}; - 291 -> {294}; - 291 -> {292} [style=dotted]; - 292 -> {293} [style=dotted]; + 291 -> {292}; + 292 -> {293}; + 293 -> {296}; 293 -> {294} [style=dotted]; + 294 -> {295} [style=dotted]; + 295 -> {296} [style=dotted]; }