@@ -320,7 +320,9 @@ class ReturningStatementNode extends NodeImpl, TReturningNode {
320
320
}
321
321
322
322
private module ParameterNodes {
323
- abstract class ParameterNodeImpl extends ParameterNode , NodeImpl {
323
+ abstract class ParameterNodeImpl extends NodeImpl {
324
+ abstract Parameter getParameter ( ) ;
325
+
324
326
abstract predicate isSourceParameterOf ( Callable c , int i ) ;
325
327
326
328
predicate isParameterOf ( DataFlowCallable c , int i ) {
@@ -341,6 +343,10 @@ private module ParameterNodes {
341
343
342
344
override predicate isSourceParameterOf ( Callable c , int i ) { c .getParameter ( i ) = parameter }
343
345
346
+ override predicate isParameterOf ( DataFlowCallable c , int i ) {
347
+ this .isSourceParameterOf ( c .asCallable ( ) , i )
348
+ }
349
+
344
350
override CfgScope getCfgScope ( ) { result = parameter .getCallable ( ) }
345
351
346
352
override Location getLocationImpl ( ) { result = parameter .getLocation ( ) }
@@ -359,8 +365,14 @@ private module ParameterNodes {
359
365
360
366
final MethodBase getMethod ( ) { result = method }
361
367
368
+ override Parameter getParameter ( ) { none ( ) }
369
+
362
370
override predicate isSourceParameterOf ( Callable c , int i ) { method = c and i = - 1 }
363
371
372
+ override predicate isParameterOf ( DataFlowCallable c , int i ) {
373
+ this .isSourceParameterOf ( c .asCallable ( ) , i )
374
+ }
375
+
364
376
override CfgScope getCfgScope ( ) { result = method }
365
377
366
378
override Location getLocationImpl ( ) { result = method .getLocation ( ) }
@@ -385,6 +397,10 @@ private module ParameterNodes {
385
397
386
398
override predicate isSourceParameterOf ( Callable c , int i ) { c = method and i = - 2 }
387
399
400
+ override predicate isParameterOf ( DataFlowCallable c , int i ) {
401
+ this .isSourceParameterOf ( c .asCallable ( ) , i )
402
+ }
403
+
388
404
override CfgScope getCfgScope ( ) { result = method }
389
405
390
406
override Location getLocationImpl ( ) {
@@ -407,6 +423,8 @@ private module ParameterNodes {
407
423
408
424
SummaryParameterNode ( ) { this = TSummaryParameterNode ( sc , pos ) }
409
425
426
+ override Parameter getParameter ( ) { none ( ) }
427
+
410
428
override predicate isSourceParameterOf ( Callable c , int i ) { none ( ) }
411
429
412
430
override predicate isParameterOf ( DataFlowCallable c , int i ) { sc = c and i = pos }
@@ -442,7 +460,7 @@ class SummaryNode extends NodeImpl, TSummaryNode {
442
460
/** A data-flow node that represents a call argument. */
443
461
abstract class ArgumentNode extends Node {
444
462
/** Holds if this argument occurs at the given position in the given call. */
445
- predicate argumentOf ( DataFlowCall call , int pos ) { this . sourceArgumentOf ( call . asCall ( ) , pos ) }
463
+ abstract predicate argumentOf ( DataFlowCall call , int pos ) ;
446
464
447
465
abstract predicate sourceArgumentOf ( CfgNodes:: ExprNodes:: CallCfgNode call , int pos ) ;
448
466
@@ -457,6 +475,10 @@ private module ArgumentNodes {
457
475
458
476
ExplicitArgumentNode ( ) { this .asExpr ( ) = arg }
459
477
478
+ override predicate argumentOf ( DataFlowCall call , int pos ) {
479
+ this .sourceArgumentOf ( call .asCall ( ) , pos )
480
+ }
481
+
460
482
override predicate sourceArgumentOf ( CfgNodes:: ExprNodes:: CallCfgNode call , int pos ) {
461
483
arg .isArgumentOf ( call , pos )
462
484
}
@@ -474,6 +496,10 @@ private module ArgumentNodes {
474
496
exists ( CfgNodes:: ExprNodes:: CallCfgNode c | c .getBlock ( ) = this .asExpr ( ) )
475
497
}
476
498
499
+ override predicate argumentOf ( DataFlowCall call , int pos ) {
500
+ this .sourceArgumentOf ( call .asCall ( ) , pos )
501
+ }
502
+
477
503
override predicate sourceArgumentOf ( CfgNodes:: ExprNodes:: CallCfgNode call , int pos ) {
478
504
pos = - 2 and
479
505
(
0 commit comments