@@ -619,11 +619,10 @@ private class DirectAccessHolder extends Element {
619
619
/**
620
620
* Like `couldAccessMember` but only contains derivations in which either
621
621
* (5.2), (5.3) or (5.4) must be invoked. In other words, the `this`
622
- * parameter is not ignored. This restriction makes it feasible to fully
623
- * enumerate this predicate even on large code bases. We check for 11.4 as
624
- * part of (5.3), since this further limits the number of tuples produced by
625
- * this predicate.
622
+ * parameter is not ignored. We check for 11.4 as part of (5.3), since
623
+ * this further limits the number of tuples produced by this predicate.
626
624
*/
625
+ pragma [ inline]
627
626
predicate thisCouldAccessMember ( Class memberClass , AccessSpecifier memberAccess , Class derived ) {
628
627
// Only (5.4) is recursive, and chains of invocations of (5.4) can always
629
628
// be collapsed to one invocation by the transitivity of 11.2/4.
@@ -665,7 +664,9 @@ private class DirectAccessHolder extends Element {
665
664
// bypasses `p`. Then that path must be public, or we are in case 2.
666
665
exists ( AccessSpecifier public | public .hasName ( "public" ) |
667
666
exists ( Class between , Class p |
668
- between .accessOfBaseMember ( memberClass , memberAccess ) .hasName ( "protected" ) and
667
+ between
668
+ .accessOfBaseMember ( pragma [ only_bind_into ] ( memberClass ) , memberAccess )
669
+ .hasName ( "protected" ) and
669
670
this .isFriendOfOrEqualTo ( p ) and
670
671
(
671
672
// This is case 1 from above. If `p` derives privately from `between`
0 commit comments