@@ -201,6 +201,25 @@ class ProcessBlockCfgNode extends NamedBlockCfgNode {
201201 PipelineParameter getPipelineParameter ( ) { result = block .getEnclosingFunction ( ) .getAParameter ( ) }
202202}
203203
204+ private class StmtBlockChildMapping extends NonExprChildMapping , StmtBlock {
205+ override predicate relevantChild ( Ast n ) { n = this .getAStmt ( ) or n = this .getAnElement ( ) }
206+ }
207+
208+ class StmtBlockCfgNode extends AstCfgNode {
209+ StmtBlockChildMapping block ;
210+
211+ StmtBlockCfgNode ( ) { this .getAstNode ( ) = block }
212+
213+ StmtBlock getBlock ( ) { result = block }
214+
215+ StmtCfgNode getStmt ( int i ) { block .hasCfgChild ( block .getStmt ( i ) , this , result ) }
216+
217+ StmtCfgNode getAStmt ( ) { block .hasCfgChild ( block .getAStmt ( ) , this , result ) }
218+
219+ /** Gets an AST element that may be returned from this `StmtBlockCfgNode`. */
220+ AstCfgNode getAnElement ( ) { block .hasCfgChild ( block .getAnElement ( ) , this , result ) }
221+ }
222+
204223/** Provides classes for control-flow nodes that wrap AST expressions. */
205224module ExprNodes {
206225 private class VarAccessChildMapping extends ExprChildMapping , VarAccess {
@@ -418,6 +437,22 @@ module ExprNodes {
418437 class IndexCfgReadNode extends IndexCfgNode {
419438 IndexCfgReadNode ( ) { this .getExpr ( ) instanceof IndexExprRead }
420439 }
440+
441+ class ArrayExprChildMapping extends ExprChildMapping , ArrayExpr {
442+ override predicate relevantChild ( Ast n ) { n = this .getStmtBlock ( ) or n = this .getAnElement ( ) }
443+ }
444+
445+ class ArrayExprCfgNode extends ExprCfgNode {
446+ override string getAPrimaryQlClass ( ) { result = "ArrayExprCfgNode" }
447+
448+ override ArrayExprChildMapping e ;
449+
450+ ExprCfgNode getElement ( int i ) { e .hasCfgChild ( e .getElement ( i ) , this , result ) }
451+
452+ ExprCfgNode getAnElement ( ) { result = this .getElement ( _) }
453+
454+ StmtBlockCfgNode getStmtBlock ( ) { e .hasCfgChild ( e .getStmtBlock ( ) , this , result ) }
455+ }
421456}
422457
423458module StmtNodes {
0 commit comments