@@ -125,6 +125,26 @@ abstract private class NonExprChildMapping extends ChildMapping {
125125 }
126126}
127127
128+ abstract private class AbstractCallCfgNode extends AstCfgNode {
129+ override string getAPrimaryQlClass ( ) { result = "CfgCall" }
130+
131+ abstract string getName ( ) ;
132+
133+ ExprCfgNode getQualifier ( ) { none ( ) }
134+
135+ abstract ExprCfgNode getArgument ( int i ) ;
136+
137+ abstract ExprCfgNode getPositionalArgument ( int i ) ;
138+
139+ abstract ExprCfgNode getNamedArgument ( string name ) ;
140+
141+ abstract ExprCfgNode getAnArgument ( ) ;
142+
143+ abstract ExprCfgNode getCommand ( ) ;
144+ }
145+
146+ final class CallCfgNode = AbstractCallCfgNode ;
147+
128148/** Provides classes for control-flow nodes that wrap AST expressions. */
129149module ExprNodes {
130150 private class VarAccessChildMapping extends ExprChildMapping , VarAccess {
@@ -189,14 +209,35 @@ module ExprNodes {
189209 }
190210
191211 /** A control-flow node that wraps an `InvokeMemberExpr` expression. */
192- class InvokeMemberCfgNode extends ExprCfgNode {
212+ class InvokeMemberCfgNode extends ExprCfgNode , AbstractCallCfgNode {
193213 override string getAPrimaryQlClass ( ) { result = "InvokeMemberCfgNode" }
194214
195215 override InvokeMemberChildMapping e ;
196216
197- final override InvokeMemberExpr getExpr ( ) { result = super .getExpr ( ) }
217+ override InvokeMemberExpr getExpr ( ) { result = super .getExpr ( ) }
218+
219+ final override ExprCfgNode getQualifier ( ) { e .hasCfgChild ( e .getQualifier ( ) , this , result ) }
198220
199- final ExprCfgNode getQualifier ( ) { e .hasCfgChild ( e .getQualifier ( ) , this , result ) }
221+ final override ExprCfgNode getArgument ( int i ) { e .hasCfgChild ( e .getArgument ( i ) , this , result ) }
222+
223+ final override ExprCfgNode getPositionalArgument ( int i ) { result = this .getArgument ( i ) }
224+
225+ final override ExprCfgNode getNamedArgument ( string name ) { none ( ) }
226+
227+ final override ExprCfgNode getAnArgument ( ) { e .hasCfgChild ( e .getAnArgument ( ) , this , result ) }
228+
229+ final override string getName ( ) { none ( ) }
230+
231+ final override ExprCfgNode getCommand ( ) { none ( ) }
232+ }
233+
234+ /** A control-flow node that wraps an `ConstructorCall` expression. */
235+ class ConstructorCallCfgNode extends InvokeMemberCfgNode {
236+ ConstructorCallCfgNode ( ) { super .getExpr ( ) instanceof ConstructorCall }
237+
238+ final override ConstructorCall getExpr ( ) { result = super .getExpr ( ) }
239+
240+ Type getConstructedType ( ) { result = this .getExpr ( ) .getConstructedType ( ) }
200241 }
201242
202243 /** A control-flow node that wraps a qualifier expression. */
@@ -265,26 +306,28 @@ module StmtNodes {
265306 }
266307
267308 /** A control-flow node that wraps a `Cmd` AST expression. */
268- class CmdCfgNode extends StmtCfgNode {
309+ class CmdCfgNode extends StmtCfgNode , AbstractCallCfgNode {
269310 override string getAPrimaryQlClass ( ) { result = "CmdCfgNode" }
270311
271312 override CmdChildMapping s ;
272313
273314 override Cmd getStmt ( ) { result = super .getStmt ( ) }
274315
275- ExprCfgNode getArgument ( int i ) { s .hasCfgChild ( s .getArgument ( i ) , this , result ) }
316+ override ExprCfgNode getArgument ( int i ) { s .hasCfgChild ( s .getArgument ( i ) , this , result ) }
276317
277- ExprCfgNode getPositionalArgument ( int i ) {
318+ override ExprCfgNode getPositionalArgument ( int i ) {
278319 s .hasCfgChild ( s .getPositionalArgument ( i ) , this , result )
279320 }
280321
281- ExprCfgNode getNamedArgument ( string name ) {
322+ override ExprCfgNode getNamedArgument ( string name ) {
282323 s .hasCfgChild ( s .getNamedArgument ( name ) , this , result )
283324 }
284325
285- ExprCfgNode getAnArgument ( ) { s .hasCfgChild ( s .getAnArgument ( ) , this , result ) }
326+ override ExprCfgNode getAnArgument ( ) { s .hasCfgChild ( s .getAnArgument ( ) , this , result ) }
327+
328+ final override ExprCfgNode getCommand ( ) { s .hasCfgChild ( s .getCommand ( ) , this , result ) }
286329
287- ExprCfgNode getCommand ( ) { s . hasCfgChild ( s . getCommand ( ) , this , result ) }
330+ final override string getName ( ) { result = s . getCmdName ( ) . getValue ( ) . getValue ( ) }
288331 }
289332
290333 private class AssignStmtChildMapping extends NonExprChildMapping , AssignStmt {
0 commit comments