@@ -170,6 +170,7 @@ class ValueOrRefType extends DotNet::ValueOrRefType, Type, Attributable, @value_
170
170
* }
171
171
* ```
172
172
*/
173
+ pragma [ inline]
173
174
predicate hasMethod ( Method m ) { this .hasMember ( m ) }
174
175
175
176
/**
@@ -196,6 +197,7 @@ class ValueOrRefType extends DotNet::ValueOrRefType, Type, Attributable, @value_
196
197
* }
197
198
* ```
198
199
*/
200
+ pragma [ inline]
199
201
predicate hasCallable ( Callable c ) {
200
202
hasMethod ( c )
201
203
or
@@ -225,25 +227,15 @@ class ValueOrRefType extends DotNet::ValueOrRefType, Type, Attributable, @value_
225
227
* }
226
228
* ```
227
229
*/
230
+ pragma [ inline]
228
231
predicate hasMember ( Member m ) {
229
- // For performance reasons, split up into "cheap" computation
230
- // (non-overridden members) and "expensive" computation
231
- // (overridden members). The latter is cached, and generally
232
- // much smaller than the full relation.
233
- hasNonOverriddenMember ( m )
232
+ m = this .getAMember ( )
233
+ or
234
+ hasNonOverriddenMember ( this .getBaseClass + ( ) , m )
234
235
or
235
236
hasOverriddenMember ( m )
236
237
}
237
238
238
- private predicate hasNonOverriddenMember ( Member m ) {
239
- isNonOverridden ( m ) and
240
- (
241
- m = getAMember ( )
242
- or
243
- getBaseClass + ( ) .getAMember ( ) = m and not m .isPrivate ( )
244
- )
245
- }
246
-
247
239
cached
248
240
private predicate hasOverriddenMember ( Virtualizable v ) {
249
241
v .isOverridden ( ) and
@@ -722,8 +714,12 @@ class RefType extends ValueOrRefType, @ref_type {
722
714
override predicate isRefType ( ) { any ( ) }
723
715
}
724
716
725
- // Helper predicate to avoid slow "negation_body"
726
- private predicate isNonOverridden ( Member m ) { not m .( Virtualizable ) .isOverridden ( ) }
717
+ pragma [ noinline]
718
+ private predicate hasNonOverriddenMember ( Class c , Member m ) {
719
+ m = c .getAMember ( ) and
720
+ not m .( Virtualizable ) .isOverridden ( ) and
721
+ not m .isPrivate ( )
722
+ }
727
723
728
724
/**
729
725
* A `class`, for example
0 commit comments