Skip to content

Commit 8d1687f

Browse files
committed
feat(controlflow): Add classes for control flow graph nodes
1 parent 55aae52 commit 8d1687f

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/** Provides classes representing nodes in a control flow graph. */
2+
3+
private import bicep
4+
private import BasicBlocks
5+
private import ControlFlowGraph
6+
private import internal.ControlFlowGraphImpl as CfgImpl
7+
8+
/** A control-flow node that wraps an AST expression. */
9+
class ExprCfgNode extends CfgImpl::AstCfgNode {
10+
string getAPrimaryQlClass() { result = "ExprCfgNode" }
11+
12+
Expr e;
13+
14+
ExprCfgNode() { e = this.getAstNode() }
15+
16+
/** Gets the underlying expression. */
17+
Expr getExpr() { result = e }
18+
}
19+
20+
/** A control-flow node that wraps an AST statement. */
21+
class StmtsCfgNode extends CfgImpl::AstCfgNode {
22+
string getAPrimaryQlClass() { result = "StmtsCfgNode" }
23+
24+
Stmts s;
25+
26+
StmtsCfgNode() { s = this.getAstNode() }
27+
28+
/** Gets the underlying expression. */
29+
Stmts getStmt() { result = s }
30+
}
31+
32+
/** Provides classes for control-flow nodes that wrap AST expressions. */
33+
module ExprNodes {
34+
class CallCfgNode extends ExprCfgNode {
35+
override string getAPrimaryQlClass() { result = "CallCfgNode" }
36+
37+
override CallExpression e;
38+
39+
override CallExpression getExpr() { result = super.getExpr() }
40+
}
41+
}
42+
43+
module StmtNodes {
44+
/** A control-flow node that wraps a `Cmd` AST expression. */
45+
class CallCfgNode extends StmtsCfgNode {
46+
override string getAPrimaryQlClass() { result = "CallCfgNode" }
47+
48+
override UserDefinedFunction s;
49+
50+
override UserDefinedFunction getStmt() { result = super.getStmt() }
51+
}
52+
}

0 commit comments

Comments
 (0)