@@ -1427,6 +1427,11 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
1427
1427
)
1428
1428
}
1429
1429
1430
+ bindingset [ ap]
1431
+ private boolean isNil ( Ap ap ) {
1432
+ if ap instanceof ApNil then result = true else result = false
1433
+ }
1434
+
1430
1435
/* Begin: Stage logic. */
1431
1436
pragma [ nomagic]
1432
1437
private Typ getNodeTyp ( NodeEx node ) {
@@ -1719,7 +1724,7 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
1719
1724
) {
1720
1725
fwdFlow ( arg , state , outercc , summaryCtx , t , ap , stored ) and
1721
1726
( if instanceofCcCall ( outercc ) then cc = true else cc = false ) and
1722
- if ap instanceof ApNil then emptyAp = true else emptyAp = false
1727
+ emptyAp = isNil ( ap )
1723
1728
}
1724
1729
1725
1730
private signature predicate flowThroughSig ( ) ;
@@ -2161,25 +2166,21 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
2161
2166
private predicate flowThroughIntoCall (
2162
2167
DataFlowCall call , ArgNodeEx arg , ParamNodeEx p , Ap argAp , Ap ap
2163
2168
) {
2164
- exists ( Typ argT , TypOption argStored , boolean emptyArgAp |
2169
+ exists ( Typ argT , TypOption argStored |
2165
2170
returnFlowsThrough ( _, _, _, _, pragma [ only_bind_into ] ( p ) , pragma [ only_bind_into ] ( argT ) ,
2166
2171
pragma [ only_bind_into ] ( argAp ) , pragma [ only_bind_into ] ( argStored ) , ap ) and
2167
- flowIntoCallApaTaken ( call , _, pragma [ only_bind_into ] ( arg ) , p , emptyArgAp ) and
2172
+ flowIntoCallApaTaken ( call , _, pragma [ only_bind_into ] ( arg ) , p , isNil ( argAp ) ) and
2168
2173
fwdFlow ( arg , _, _, _, pragma [ only_bind_into ] ( argT ) , pragma [ only_bind_into ] ( argAp ) ,
2169
- pragma [ only_bind_into ] ( argStored ) ) and
2170
- if argAp instanceof ApNil then emptyArgAp = true else emptyArgAp = false
2174
+ pragma [ only_bind_into ] ( argStored ) )
2171
2175
)
2172
2176
}
2173
2177
2174
2178
pragma [ nomagic]
2175
2179
private predicate flowIntoCallAp (
2176
2180
DataFlowCall call , DataFlowCallable c , ArgNodeEx arg , ParamNodeEx p , Ap ap
2177
2181
) {
2178
- exists ( boolean emptyAp |
2179
- flowIntoCallApaTaken ( call , c , arg , p , emptyAp ) and
2180
- fwdFlow ( arg , _, _, _, _, ap , _) and
2181
- if ap instanceof ApNil then emptyAp = true else emptyAp = false
2182
- )
2182
+ flowIntoCallApaTaken ( call , c , arg , p , isNil ( ap ) ) and
2183
+ fwdFlow ( arg , _, _, _, _, ap , _)
2183
2184
}
2184
2185
2185
2186
pragma [ nomagic]
@@ -2405,13 +2406,10 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
2405
2406
private predicate revFlowParamToReturn (
2406
2407
ParamNodeEx p , FlowState state , ReturnPosition pos , Ap returnAp , Ap ap
2407
2408
) {
2408
- exists ( boolean emptyAp |
2409
- revFlow ( pragma [ only_bind_into ] ( p ) , state , TReturnCtxMaybeFlowThrough ( pos ) ,
2410
- apSome ( returnAp ) , pragma [ only_bind_into ] ( ap ) ) and
2411
- parameterFlowThroughAllowed ( p , pos .getKind ( ) ) and
2412
- PrevStage:: parameterMayFlowThrough ( p , emptyAp ) and
2413
- if ap instanceof ApNil then emptyAp = true else emptyAp = false
2414
- )
2409
+ revFlow ( pragma [ only_bind_into ] ( p ) , state , TReturnCtxMaybeFlowThrough ( pos ) ,
2410
+ apSome ( returnAp ) , pragma [ only_bind_into ] ( ap ) ) and
2411
+ parameterFlowThroughAllowed ( p , pos .getKind ( ) ) and
2412
+ PrevStage:: parameterMayFlowThrough ( p , isNil ( ap ) )
2415
2413
}
2416
2414
2417
2415
pragma [ nomagic]
@@ -2512,7 +2510,7 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
2512
2510
predicate parameterMayFlowThrough ( ParamNodeEx p , boolean emptyAp ) {
2513
2511
exists ( Ap ap |
2514
2512
parameterMayFlowThroughAp ( p , ap ) and
2515
- if ap instanceof ApNil then emptyAp = true else emptyAp = false
2513
+ emptyAp = isNil ( ap )
2516
2514
)
2517
2515
}
2518
2516
@@ -2572,7 +2570,7 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
2572
2570
flowIntoCallAp ( call , c , arg , p , ap ) and
2573
2571
revFlow ( arg , pragma [ only_bind_into ] ( state ) , pragma [ only_bind_into ] ( ap ) ) and
2574
2572
revFlow ( p , pragma [ only_bind_into ] ( state ) , pragma [ only_bind_into ] ( ap ) ) and
2575
- if ap instanceof ApNil then emptyAp = true else emptyAp = false
2573
+ emptyAp = isNil ( ap )
2576
2574
|
2577
2575
// both directions are needed for flow-through
2578
2576
RevTypeFlowInput:: dataFlowTakenCallEdgeIn ( call , c , _) or
0 commit comments