@@ -923,28 +923,29 @@ private module Stage2 {
923
923
924
924
ApOption apSome ( Ap ap ) { result = TBooleanSome ( ap ) }
925
925
926
- class Cc = boolean ;
927
-
928
- class CcCall extends Cc {
929
- CcCall ( ) { this = true }
926
+ class Cc = CallContext ;
930
927
931
- /** Holds if this call context may be `call`. */
932
- predicate matchesCall ( DataFlowCall call ) { any ( ) }
933
- }
928
+ class CcCall = CallContextCall ;
934
929
935
- class CcNoCall extends Cc {
936
- CcNoCall ( ) { this = false }
937
- }
930
+ class CcNoCall = CallContextNoCall ;
938
931
939
- Cc ccNone ( ) { result = false }
932
+ Cc ccNone ( ) { result instanceof CallContextAny }
940
933
941
934
private class LocalCc = Unit ;
942
935
943
936
bindingset [ call, c, outercc]
944
- private CcCall getCallContextCall ( DataFlowCall call , DataFlowCallable c , Cc outercc ) { any ( ) }
937
+ private CcCall getCallContextCall ( DataFlowCall call , DataFlowCallable c , Cc outercc ) {
938
+ checkCallContextCall ( outercc , call , c ) and
939
+ if recordDataFlowCallSiteDispatch ( call , c )
940
+ then result = TSpecificCall ( call )
941
+ else result = TSomeCall ( )
942
+ }
945
943
946
944
bindingset [ call, c, innercc]
947
- private CcNoCall getCallContextReturn ( DataFlowCallable c , DataFlowCall call , Cc innercc ) { any ( ) }
945
+ private CcNoCall getCallContextReturn ( DataFlowCallable c , DataFlowCall call , Cc innercc ) {
946
+ checkCallContextReturn ( innercc , c , call ) and
947
+ if reducedViableImplInReturn ( c , call ) then result = TReturn ( c , call ) else result = ccNone ( )
948
+ }
948
949
949
950
bindingset [ node, cc, config]
950
951
private LocalCc getLocalCc ( NodeEx node , Cc cc , Configuration config ) { any ( ) }
@@ -2117,7 +2118,7 @@ private module Stage3 {
2117
2118
private predicate flowCandSummaryCtx ( NodeEx node , AccessPathFront argApf , Configuration config ) {
2118
2119
exists ( AccessPathFront apf |
2119
2120
Stage3:: revFlow ( node , true , _, apf , config ) and
2120
- Stage3:: fwdFlow ( node , true , TAccessPathFrontSome ( argApf ) , apf , config )
2121
+ Stage3:: fwdFlow ( node , any ( Stage3 :: CcCall ccc ) , TAccessPathFrontSome ( argApf ) , apf , config )
2121
2122
)
2122
2123
}
2123
2124
0 commit comments