@@ -33,15 +33,25 @@ class Node extends TNode {
33
33
Node getASuccessor ( ) { localFlowStep ( this , result ) }
34
34
}
35
35
36
+ /** A control-flow node, viewed as a node in a data flow graph. */
37
+ abstract private class AbstractAstNode extends Node {
38
+ CfgNodes:: AstCfgNode n ;
39
+
40
+ /** Gets the control-flow node corresponding to this node. */
41
+ CfgNodes:: AstCfgNode getCfgNode ( ) { result = n }
42
+ }
43
+
44
+ final class AstNode = AbstractAstNode ;
45
+
36
46
/**
37
47
* An expression, viewed as a node in a data flow graph.
38
48
*
39
49
* Note that because of control-flow splitting, one `Expr` may correspond
40
50
* to multiple `ExprNode`s, just like it may correspond to multiple
41
51
* `ControlFlow::Node`s.
42
52
*/
43
- class ExprNode extends Node , TExprNode {
44
- private CfgNodes:: ExprCfgNode n ;
53
+ class ExprNode extends AbstractAstNode , TExprNode {
54
+ override CfgNodes:: ExprCfgNode n ;
45
55
46
56
ExprNode ( ) { this = TExprNode ( n ) }
47
57
@@ -56,8 +66,8 @@ class ExprNode extends Node, TExprNode {
56
66
* to multiple `StmtNode`s, just like it may correspond to multiple
57
67
* `ControlFlow::Node`s.
58
68
*/
59
- class StmtNode extends Node , TStmtNode {
60
- private CfgNodes:: StmtCfgNode n ;
69
+ class StmtNode extends AbstractAstNode , TStmtNode {
70
+ override CfgNodes:: StmtCfgNode n ;
61
71
62
72
StmtNode ( ) { this = TStmtNode ( n ) }
63
73
@@ -312,3 +322,12 @@ class ObjectCreationNode extends Node {
312
322
313
323
final CfgNodes:: ObjectCreationCfgNode getObjectCreationNode ( ) { result = objectCreation }
314
324
}
325
+
326
+ /** A call, viewed as a node in a data flow graph. */
327
+ class CallNode extends AstNode {
328
+ CfgNodes:: CallCfgNode call ;
329
+
330
+ CallNode ( ) { call = this .getCfgNode ( ) }
331
+
332
+ CfgNodes:: CallCfgNode getCallNode ( ) { result = call }
333
+ }
0 commit comments