@@ -647,7 +647,7 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
647647 // inline to reduce the number of iterations
648648 pragma [ inline]
649649 private predicate fwdFlowIn ( DataFlowCallEx call , NodeEx arg , Cc cc , ParamNodeEx p ) {
650- exists ( DataFlowCall underlyingCall | underlyingCall = call .asDataFlowCall ( _ ) |
650+ exists ( DataFlowCall underlyingCall | underlyingCall = call .projectToCall ( ) |
651651 // call context cannot help reduce virtual dispatch
652652 fwdFlow ( arg , cc ) and
653653 viableParamArgEx ( call , p , arg ) and
@@ -680,7 +680,7 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
680680 ) {
681681 fwdFlow ( arg , true ) and
682682 viableParamArgEx ( call , p , arg ) and
683- CachedCallContextSensitivity:: reducedViableImplInCallContext ( call .asDataFlowCall ( _ ) , _, _) and
683+ CachedCallContextSensitivity:: reducedViableImplInCallContext ( call .projectToCall ( ) , _, _) and
684684 target = p .getEnclosingCallable ( ) and
685685 not fullBarrier ( p )
686686 }
@@ -694,7 +694,7 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
694694 private DataFlowCallable viableImplInSomeFwdFlowCallContextExt ( DataFlowCall call ) {
695695 exists ( DataFlowCallEx ctx |
696696 fwdFlowIsEntered ( ctx , _) and
697- result = viableImplInCallContextExt ( call , ctx .asDataFlowCall ( _ ) )
697+ result = viableImplInCallContextExt ( call , ctx .projectToCall ( ) )
698698 )
699699 }
700700
@@ -1246,7 +1246,7 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
12461246 DataFlowCall ctx
12471247 ) {
12481248 returnCallEdge1 ( c , scope , call , out ) and
1249- c = viableImplInCallContextExt ( call .asDataFlowCall ( _ ) , ctx )
1249+ c = viableImplInCallContextExt ( call .projectToCall ( ) , ctx )
12501250 }
12511251
12521252 private int ctxDispatchFanoutOnReturn ( NodeEx out , DataFlowCallEx ctx ) {
@@ -1255,10 +1255,10 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
12551255 not Stage1:: revFlow ( out , false ) and
12561256 call .getEnclosingCallable ( ) = c and
12571257 returnCallEdge1 ( c , _, ctx , _) and
1258- mayBenefitFromCallContextExt ( call .asDataFlowCall ( _ ) , _) and
1258+ mayBenefitFromCallContextExt ( call .projectToCall ( ) , _) and
12591259 result =
12601260 count ( DataFlowCallable tgt , SndLevelScopeOption scope |
1261- returnCallEdgeInCtx1 ( tgt , scope , call , out , ctx .asDataFlowCall ( _ ) )
1261+ returnCallEdgeInCtx1 ( tgt , scope , call , out , ctx .projectToCall ( ) )
12621262 )
12631263 )
12641264 }
@@ -1531,7 +1531,7 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
15311531 PrevStage:: callEdgeReturn ( call , _, ret , kind , out , allowsFieldFlow , apa ) and
15321532 PrevStage:: callMayFlowThroughRev ( call ) and
15331533 PrevStage:: returnMayFlowThrough ( ret , argApa , apa , kind ) and
1534- matchesCall ( ccc , call .asDataFlowCall ( _ ) )
1534+ matchesCall ( ccc , call .projectToCall ( ) )
15351535 )
15361536 }
15371537
@@ -1860,7 +1860,7 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
18601860 private DataFlowCallable viableImplCallContextReducedRestricted (
18611861 DataFlowCallEx call , CcCall ctx
18621862 ) {
1863- result = viableImplCallContextReduced ( call .asDataFlowCall ( _ ) , ctx ) and
1863+ result = viableImplCallContextReduced ( call .projectToCall ( ) , ctx ) and
18641864 callEdgeArgParamRestricted ( call , result , _, _, _, _)
18651865 }
18661866
@@ -1905,7 +1905,7 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
19051905 ) {
19061906 callEdgeArgParamRestricted ( call , _, arg , _, _, _) and
19071907 instanceofCc ( outercc ) and
1908- viableImplNotCallContextReducedInlineLate ( call .asDataFlowCall ( _ ) , outercc )
1908+ viableImplNotCallContextReducedInlineLate ( call .projectToCall ( ) , outercc )
19091909 }
19101910
19111911 pragma [ inline]
@@ -1949,7 +1949,7 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
19491949 DataFlowCallEx call , DataFlowCallable inner , CcCall innercc , boolean cc
19501950 ) {
19511951 not enableTypeFlow ( ) and
1952- FwdTypeFlow:: typeFlowValidEdgeIn ( call .asDataFlowCall ( _ ) , inner , cc ) and
1952+ FwdTypeFlow:: typeFlowValidEdgeIn ( call .projectToCall ( ) , inner , cc ) and
19531953 innercc = getCallContextCall ( call , inner )
19541954 }
19551955
@@ -1959,7 +1959,7 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
19591959 CcCall innercc , boolean emptyAp , ApApprox apa , boolean cc
19601960 ) {
19611961 fwdFlowInCandTypeFlowEnabled ( call , arg , outercc , inner , p , emptyAp , apa , cc ) and
1962- FwdTypeFlow:: typeFlowValidEdgeIn ( call .asDataFlowCall ( _ ) , inner , cc ) and
1962+ FwdTypeFlow:: typeFlowValidEdgeIn ( call .projectToCall ( ) , inner , cc ) and
19631963 innercc = getCallContextCall ( call , inner )
19641964 }
19651965
@@ -2011,7 +2011,7 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
20112011 private DataFlowCallEx viableImplCallContextReducedReverseRestricted (
20122012 DataFlowCallable c , CcNoCall ctx
20132013 ) {
2014- result .asDataFlowCall ( _ ) = viableImplCallContextReducedReverse ( c , ctx ) and
2014+ result .projectToCall ( ) = viableImplCallContextReducedReverse ( c , ctx ) and
20152015 PrevStage:: callEdgeReturn ( result , c , _, _, _, _, _)
20162016 }
20172017
@@ -2075,7 +2075,7 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
20752075 CcNoCall outercc , ApApprox apa , boolean allowsFieldFlow
20762076 ) {
20772077 fwdFlowOutCand ( call , ret , innercc , inner , out , apa , allowsFieldFlow ) and
2078- FwdTypeFlow:: typeFlowValidEdgeOut ( call .asDataFlowCall ( _ ) , inner ) and
2078+ FwdTypeFlow:: typeFlowValidEdgeOut ( call .projectToCall ( ) , inner ) and
20792079 outercc = getCallContextReturn ( inner , call )
20802080 }
20812081
@@ -2096,23 +2096,23 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
20962096 predicate enableTypeFlow = Param:: enableTypeFlow / 0 ;
20972097
20982098 predicate relevantCallEdgeIn ( DataFlowCall call , DataFlowCallable c ) {
2099- PrevStage:: relevantCallEdgeIn ( MkDataFlowCallEx ( call , _ ) , c )
2099+ PrevStage:: relevantCallEdgeIn ( injectCall ( call ) , c )
21002100 }
21012101
21022102 predicate relevantCallEdgeOut ( DataFlowCall call , DataFlowCallable c ) {
2103- PrevStage:: relevantCallEdgeOut ( MkDataFlowCallEx ( call , _ ) , c )
2103+ PrevStage:: relevantCallEdgeOut ( injectCall ( call ) , c )
21042104 }
21052105
21062106 pragma [ nomagic]
21072107 private predicate dataFlowTakenCallEdgeIn0 (
21082108 DataFlowCall call , DataFlowCallable c , ParamNodeEx p , FlowState state , CcCall innercc ,
21092109 Typ t , Ap ap , TypOption stored , boolean cc
21102110 ) {
2111- FwdFlowInNoThrough:: fwdFlowIn ( MkDataFlowCallEx ( call , _ ) , _, c , p , state , _, innercc , _,
2112- t , ap , _ , stored , cc )
2111+ FwdFlowInNoThrough:: fwdFlowIn ( injectCall ( call ) , _, c , p , state , _, innercc , _ , t , ap , _,
2112+ stored , cc )
21132113 or
2114- FwdFlowInThrough:: fwdFlowIn ( MkDataFlowCallEx ( call , _ ) , _, c , p , state , _, innercc , _, t ,
2115- ap , _ , stored , cc )
2114+ FwdFlowInThrough:: fwdFlowIn ( injectCall ( call ) , _, c , p , state , _, innercc , _, t , ap , _ ,
2115+ stored , cc )
21162116 }
21172117
21182118 pragma [ nomagic]
@@ -2136,7 +2136,7 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
21362136 DataFlowCall call , DataFlowCallable c , NodeEx node , FlowState state , Cc cc , Typ t ,
21372137 Ap ap , TypOption stored
21382138 ) {
2139- fwdFlowOut ( MkDataFlowCallEx ( call , _ ) , c , node , state , cc , _, t , ap , _, stored )
2139+ fwdFlowOut ( injectCall ( call ) , c , node , state , cc , _, t , ap , _, stored )
21402140 }
21412141
21422142 pragma [ nomagic]
@@ -2180,7 +2180,7 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
21802180 boolean allowsFieldFlow , ApApprox apa
21812181 ) {
21822182 PrevStage:: callEdgeArgParam ( call , c , arg , p , allowsFieldFlow , apa ) and
2183- FwdTypeFlowInput:: dataFlowTakenCallEdgeIn ( call .asDataFlowCall ( _ ) , c , _)
2183+ FwdTypeFlowInput:: dataFlowTakenCallEdgeIn ( call .projectToCall ( ) , c , _)
21842184 }
21852185
21862186 pragma [ nomagic]
@@ -2319,8 +2319,8 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
23192319 if allowsFieldFlow = false then ap instanceof ApNil else any ( )
23202320 |
23212321 // both directions are needed for flow-through
2322- FwdTypeFlowInput:: dataFlowTakenCallEdgeIn ( call .asDataFlowCall ( _ ) , c , _) or
2323- FwdTypeFlowInput:: dataFlowTakenCallEdgeOut ( call .asDataFlowCall ( _ ) , c )
2322+ FwdTypeFlowInput:: dataFlowTakenCallEdgeIn ( call .projectToCall ( ) , c , _) or
2323+ FwdTypeFlowInput:: dataFlowTakenCallEdgeOut ( call .projectToCall ( ) , c )
23242324 )
23252325 }
23262326
@@ -2450,24 +2450,24 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
24502450 predicate enableTypeFlow = Param:: enableTypeFlow / 0 ;
24512451
24522452 predicate relevantCallEdgeIn ( DataFlowCall call , DataFlowCallable c ) {
2453- flowOutOfCallAp ( MkDataFlowCallEx ( call , _ ) , c , _, _, _, _)
2453+ flowOutOfCallAp ( injectCall ( call ) , c , _, _, _, _)
24542454 }
24552455
24562456 predicate relevantCallEdgeOut ( DataFlowCall call , DataFlowCallable c ) {
2457- flowIntoCallAp ( MkDataFlowCallEx ( call , _ ) , c , _, _, _)
2457+ flowIntoCallAp ( injectCall ( call ) , c , _, _, _)
24582458 }
24592459
24602460 pragma [ nomagic]
24612461 predicate dataFlowTakenCallEdgeIn ( DataFlowCall call , DataFlowCallable c , boolean cc ) {
24622462 exists ( RetNodeEx ret |
2463- revFlowOut ( MkDataFlowCallEx ( call , _ ) , ret , _, _, _, cc , _, _) and
2463+ revFlowOut ( injectCall ( call ) , ret , _, _, _, cc , _, _) and
24642464 c = ret .getEnclosingCallable ( )
24652465 )
24662466 }
24672467
24682468 pragma [ nomagic]
24692469 predicate dataFlowTakenCallEdgeOut ( DataFlowCall call , DataFlowCallable c ) {
2470- revFlowIn ( MkDataFlowCallEx ( call , _ ) , c , _, _, _)
2470+ revFlowIn ( injectCall ( call ) , c , _, _, _)
24712471 }
24722472
24732473 predicate dataFlowNonCallEntry ( DataFlowCallable c , boolean cc ) {
@@ -2493,7 +2493,7 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
24932493 DataFlowCallEx call , DataFlowCallable c , ArgNodeEx arg , ParamNodeEx p , Ap ap
24942494 ) {
24952495 flowIntoCallAp ( call , c , arg , p , ap ) and
2496- RevTypeFlow:: typeFlowValidEdgeOut ( call .asDataFlowCall ( _ ) , c )
2496+ RevTypeFlow:: typeFlowValidEdgeOut ( call .projectToCall ( ) , c )
24972497 }
24982498
24992499 pragma [ nomagic]
@@ -2502,7 +2502,7 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
25022502 ) {
25032503 exists ( DataFlowCallable c |
25042504 flowOutOfCallAp ( call , c , ret , pos , out , ap ) and
2505- RevTypeFlow:: typeFlowValidEdgeIn ( call .asDataFlowCall ( _ ) , c , cc )
2505+ RevTypeFlow:: typeFlowValidEdgeIn ( call .projectToCall ( ) , c , cc )
25062506 )
25072507 }
25082508
@@ -2558,7 +2558,7 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
25582558 exists ( RetNodeEx ret , FlowState state , CcCall ccc |
25592559 revFlowOut ( call , ret , pos , state , returnCtx , _, returnAp , ap ) and
25602560 returnFlowsThrough ( ret , pos , state , ccc , _, _, _, _, _, ap ) and
2561- matchesCall ( ccc , call .asDataFlowCall ( _ ) )
2561+ matchesCall ( ccc , call .projectToCall ( ) )
25622562 )
25632563 }
25642564
@@ -2694,8 +2694,8 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
26942694 allowsFieldFlow = true
26952695 |
26962696 // both directions are needed for flow-through
2697- RevTypeFlowInput:: dataFlowTakenCallEdgeIn ( call .asDataFlowCall ( _ ) , c , _) or
2698- RevTypeFlowInput:: dataFlowTakenCallEdgeOut ( call .asDataFlowCall ( _ ) , c )
2697+ RevTypeFlowInput:: dataFlowTakenCallEdgeIn ( call .projectToCall ( ) , c , _) or
2698+ RevTypeFlowInput:: dataFlowTakenCallEdgeOut ( call .projectToCall ( ) , c )
26992699 )
27002700 }
27012701
@@ -2709,7 +2709,7 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
27092709 revFlow ( out , pragma [ only_bind_into ] ( state ) , pragma [ only_bind_into ] ( ap ) ) and
27102710 kind = pos .getKind ( ) and
27112711 allowsFieldFlow = true and
2712- RevTypeFlowInput:: dataFlowTakenCallEdgeIn ( call .asDataFlowCall ( _ ) , c , _)
2712+ RevTypeFlowInput:: dataFlowTakenCallEdgeIn ( call .projectToCall ( ) , c , _)
27132713 )
27142714 }
27152715
@@ -3932,11 +3932,11 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
39323932
39333933 private module CallContextSensitivityInput implements CallContextSensitivityInputSig {
39343934 predicate relevantCallEdgeIn ( DataFlowCall call , DataFlowCallable c ) {
3935- PrevStage:: relevantCallEdgeIn ( MkDataFlowCallEx ( call , _ ) , c )
3935+ PrevStage:: relevantCallEdgeIn ( injectCall ( call ) , c )
39363936 }
39373937
39383938 predicate relevantCallEdgeOut ( DataFlowCall call , DataFlowCallable c ) {
3939- PrevStage:: relevantCallEdgeOut ( MkDataFlowCallEx ( call , _ ) , c )
3939+ PrevStage:: relevantCallEdgeOut ( injectCall ( call ) , c )
39403940 }
39413941
39423942 predicate reducedViableImplInCallContextCand =
@@ -4336,11 +4336,11 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
43364336
43374337 private module CallContextSensitivityInput implements CallContextSensitivityInputSig {
43384338 predicate relevantCallEdgeIn ( DataFlowCall call , DataFlowCallable c ) {
4339- PrevStage:: relevantCallEdgeIn ( MkDataFlowCallEx ( call , _ ) , c )
4339+ PrevStage:: relevantCallEdgeIn ( injectCall ( call ) , c )
43404340 }
43414341
43424342 predicate relevantCallEdgeOut ( DataFlowCall call , DataFlowCallable c ) {
4343- PrevStage:: relevantCallEdgeOut ( MkDataFlowCallEx ( call , _ ) , c )
4343+ PrevStage:: relevantCallEdgeOut ( injectCall ( call ) , c )
43444344 }
43454345
43464346 predicate reducedViableImplInCallContextCand =
@@ -4536,11 +4536,11 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
45364536
45374537 private module CallContextSensitivityInput implements CallContextSensitivityInputSig {
45384538 predicate relevantCallEdgeIn ( DataFlowCall call , DataFlowCallable c ) {
4539- PrevStage:: relevantCallEdgeIn ( MkDataFlowCallEx ( call , _ ) , c )
4539+ PrevStage:: relevantCallEdgeIn ( injectCall ( call ) , c )
45404540 }
45414541
45424542 predicate relevantCallEdgeOut ( DataFlowCall call , DataFlowCallable c ) {
4543- PrevStage:: relevantCallEdgeOut ( MkDataFlowCallEx ( call , _ ) , c )
4543+ PrevStage:: relevantCallEdgeOut ( injectCall ( call ) , c )
45444544 }
45454545
45464546 predicate reducedViableImplInCallContextCand =
@@ -5553,7 +5553,7 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
55535553 partialPathOutOfCallable0 ( mid , pos , state , innercc , t , ap ) and
55545554 c = pos .getCallable ( ) and
55555555 kind = pos .getKind ( ) and
5556- CachedCallContextSensitivity:: resolveReturn ( innercc , c , call .asDataFlowCall ( _ ) ) and
5556+ CachedCallContextSensitivity:: resolveReturn ( innercc , c , call .projectToCall ( ) ) and
55575557 cc = CachedCallContextSensitivity:: getCallContextReturn ( c , call )
55585558 )
55595559 }
@@ -5590,7 +5590,7 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
55905590 CallContext outercc , DataFlowCallEx call , DataFlowType t , PartialAccessPath ap
55915591 ) {
55925592 partialPathIntoArg ( mid , pos , state , outercc , call , t , ap ) and
5593- callable = CachedCallContextSensitivity:: resolveCall ( call .asDataFlowCall ( _ ) , outercc )
5593+ callable = CachedCallContextSensitivity:: resolveCall ( call .projectToCall ( ) , outercc )
55945594 }
55955595
55965596 private predicate partialPathIntoCallable (
0 commit comments