FIR DFA: route data flow through anonymous objects

^KT-44515 Fixed
This commit is contained in:
pyos
2022-12-11 16:40:12 +01:00
committed by Dmitriy Novozhilov
parent 17ee8f3a7b
commit 0dd949bb36
16 changed files with 365 additions and 405 deletions
@@ -234,7 +234,7 @@ class ClassEnterNode(owner: ControlFlowGraph, override val fir: FirClass, level:
}
class ClassExitNode(owner: ControlFlowGraph, override val fir: FirClass, level: Int, id: Int) : CFGNodeWithSubgraphs<FirClass>(owner, level, id),
GraphExitNodeMarker {
GraphExitNodeMarker, UnionNodeMarker {
lateinit override var subGraphs: List<ControlFlowGraph>
@@ -255,12 +255,6 @@ class AnonymousObjectEnterNode(owner: ControlFlowGraph, override val fir: FirAno
}
}
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 {
return visitor.visitAnonymousObjectExitNode(this, data)
}
}
class AnonymousObjectExpressionExitNode(owner: ControlFlowGraph, override val fir: FirAnonymousObjectExpression, level: Int, id: Int) : CFGNode<FirAnonymousObjectExpression>(owner, level, id) {
override fun <R, D> accept(visitor: ControlFlowGraphVisitor<R, D>, data: D): R {
return visitor.visitAnonymousObjectExpressionExitNode(this, data)
@@ -104,7 +104,6 @@ fun CFGNode<*>.render(): String =
is ClassExitNode -> "Exit class ${owner.name}"
is LocalClassExitNode -> "Exit local class ${owner.name}"
is AnonymousObjectEnterNode -> "Enter anonymous object"
is AnonymousObjectExitNode -> "Exit anonymous object"
is AnonymousObjectExpressionExitNode -> "Exit anonymous object expression"
is ScriptEnterNode -> "Enter class ${fir.name}"
@@ -66,10 +66,6 @@ abstract class ControlFlowGraphVisitor<out R, in D> {
return visitNode(node, data)
}
open fun visitAnonymousObjectExitNode(node: AnonymousObjectExitNode, data: D): R {
return visitNode(node, data)
}
open fun visitAnonymousObjectExpressionExitNode(node: AnonymousObjectExpressionExitNode, data: D): R {
return visitNode(node, data)
}
@@ -42,12 +42,6 @@ abstract class ControlFlowGraphVisitorVoid : ControlFlowGraphVisitor<Unit, Nothi
visitNode(node)
}
// ----------------------------------- Anonymous object -----------------------------------
open fun visitAnonymousObjectExitNode(node: AnonymousObjectExitNode) {
visitNode(node)
}
// ----------------------------------- Property -----------------------------------
open fun visitPropertyInitializerEnterNode(node: PropertyInitializerEnterNode) {
@@ -333,12 +327,6 @@ abstract class ControlFlowGraphVisitorVoid : ControlFlowGraphVisitor<Unit, Nothi
visitAnonymousFunctionExpressionNode(node)
}
// ----------------------------------- Anonymous object -----------------------------------
final override fun visitAnonymousObjectExitNode(node: AnonymousObjectExitNode, data: Nothing?) {
visitAnonymousObjectExitNode(node)
}
// ----------------------------------- Property -----------------------------------
final override fun visitPropertyInitializerEnterNode(node: PropertyInitializerEnterNode, data: Nothing?) {