@@ -242,6 +242,14 @@ private DataFlowCallable viableCallableExt(DataFlowCall call) {
242242
243243cached
244244private module Cached {
245+ cached
246+ predicate nodeEnclosingCallable ( Node n , DataFlowCallable c ) { c = n .getEnclosingCallable ( ) }
247+
248+ cached
249+ predicate callEnclosingCallable ( DataFlowCall call , DataFlowCallable c ) {
250+ c = call .getEnclosingCallable ( )
251+ }
252+
245253 /**
246254 * Gets a viable target for the lambda call `call`.
247255 *
@@ -553,7 +561,7 @@ private module Cached {
553561 private predicate mayBenefitFromCallContextExt ( DataFlowCall call , DataFlowCallable callable ) {
554562 mayBenefitFromCallContext ( call , callable )
555563 or
556- callable = call . getEnclosingCallable ( ) and
564+ callEnclosingCallable ( call , callable ) and
557565 exists ( viableCallableLambda ( call , TDataFlowCallSome ( _) ) )
558566 }
559567
@@ -611,7 +619,7 @@ private module Cached {
611619 mayBenefitFromCallContextExt ( call , _) and
612620 c = viableCallableExt ( call ) and
613621 ctxtgts = count ( DataFlowCall ctx | c = viableImplInCallContextExt ( call , ctx ) ) and
614- tgts = strictcount ( DataFlowCall ctx | viableCallableExt ( ctx ) = call . getEnclosingCallable ( ) ) and
622+ tgts = strictcount ( DataFlowCall ctx | callEnclosingCallable ( call , viableCallableExt ( ctx ) ) ) and
615623 ctxtgts < tgts
616624 )
617625 }
@@ -866,7 +874,7 @@ class CallContextReturn extends CallContextNoCall, TReturn {
866874 }
867875
868876 override predicate relevantFor ( DataFlowCallable callable ) {
869- exists ( DataFlowCall call | this = TReturn ( _, call ) and call . getEnclosingCallable ( ) = callable )
877+ exists ( DataFlowCall call | this = TReturn ( _, call ) and callEnclosingCallable ( call , callable ) )
870878 }
871879}
872880
@@ -1017,7 +1025,7 @@ pragma[inline]
10171025DataFlowCallable getNodeEnclosingCallable ( Node n ) {
10181026 exists ( Node n0 |
10191027 pragma [ only_bind_into ] ( n0 ) = n and
1020- pragma [ only_bind_into ] ( result ) = n0 . getEnclosingCallable ( )
1028+ nodeEnclosingCallable ( n0 , pragma [ only_bind_into ] ( result ) )
10211029 )
10221030}
10231031
@@ -1042,7 +1050,7 @@ predicate resolveReturn(CallContext cc, DataFlowCallable callable, DataFlowCall
10421050 cc instanceof CallContextAny and callable = viableCallableExt ( call )
10431051 or
10441052 exists ( DataFlowCallable c0 , DataFlowCall call0 |
1045- call0 . getEnclosingCallable ( ) = callable and
1053+ callEnclosingCallable ( call0 , callable ) and
10461054 cc = TReturn ( c0 , call0 ) and
10471055 c0 = prunedViableImplInCallContextReverse ( call0 , call )
10481056 )
0 commit comments