@@ -49,9 +49,9 @@ class PropertyInternal extends ObjectInternal, TProperty {
4949
5050 override predicate calleeAndOffset ( Function scope , int paramOffset ) { none ( ) }
5151
52- override predicate attribute ( string name , ObjectInternal value , CfgOrigin origin ) { none ( ) }
52+ pragma [ noinline ] override predicate attribute ( string name , ObjectInternal value , CfgOrigin origin ) { none ( ) }
5353
54- override predicate attributesUnknown ( ) { none ( ) }
54+ pragma [ noinline ] override predicate attributesUnknown ( ) { none ( ) }
5555
5656 override boolean isDescriptor ( ) { result = true }
5757
@@ -67,18 +67,22 @@ class PropertyInternal extends ObjectInternal, TProperty {
6767 )
6868 }
6969
70- override predicate binds ( ObjectInternal cls , string name , ObjectInternal descriptor ) { none ( ) }
70+ pragma [ noinline ] override predicate binds ( ObjectInternal cls , string name , ObjectInternal descriptor ) { none ( ) }
7171
72- override predicate descriptorGet ( ObjectInternal instance , ObjectInternal value , CfgOrigin origin ) {
72+ pragma [ noinline] override predicate descriptorGetClass ( ObjectInternal cls , ObjectInternal value , CfgOrigin origin ) {
73+ any ( ObjectInternal obj ) .binds ( cls , _, this ) and
74+ value = this and origin = CfgOrigin:: fromCfgNode ( this .getOrigin ( ) )
75+ }
76+
77+ pragma [ noinline] override predicate descriptorGetInstance ( ObjectInternal instance , ObjectInternal value , CfgOrigin origin ) {
7378 /* Just give an unknown value for now. We could improve this, but it would mean
7479 * changing Contexts to account for property accesses.
7580 */
76- exists ( AttrNode attr , ClassObjectInternal cls , string name |
81+ exists ( ClassObjectInternal cls , string name |
7782 name = this .getName ( ) and
78- PointsToInternal:: pointsTo ( attr .getObject ( name ) , _, instance , _) and
79- instance .getClass ( ) = cls and
83+ receiver_type ( _, name , instance , cls ) and
8084 cls .lookup ( name , this , _) and
81- origin = CfgOrigin:: fromCfgNode ( attr ) and value = ObjectInternal:: unknown ( )
85+ origin = CfgOrigin:: unknown ( ) and value = ObjectInternal:: unknown ( )
8286 )
8387 }
8488
@@ -125,25 +129,24 @@ class ClassMethodObjectInternal extends ObjectInternal, TClassMethod {
125129
126130 override predicate calleeAndOffset ( Function scope , int paramOffset ) { none ( ) }
127131
128- override predicate attribute ( string name , ObjectInternal value , CfgOrigin origin ) { none ( ) }
132+ pragma [ noinline ] override predicate attribute ( string name , ObjectInternal value , CfgOrigin origin ) { none ( ) }
129133
130- override predicate attributesUnknown ( ) { none ( ) }
134+ pragma [ noinline ] override predicate attributesUnknown ( ) { none ( ) }
131135
132136 override boolean isDescriptor ( ) { result = true }
133137
134- override predicate descriptorGet ( ObjectInternal instance , ObjectInternal value , CfgOrigin origin ) {
138+ pragma [ noinline] override predicate descriptorGetClass ( ObjectInternal cls , ObjectInternal value , CfgOrigin origin ) {
139+ value = TBoundMethod ( cls , this .getFunction ( ) ) and
140+ origin = CfgOrigin:: unknown ( )
141+ }
142+
143+ pragma [ noinline] override predicate descriptorGetInstance ( ObjectInternal instance , ObjectInternal value , CfgOrigin origin ) {
135144 any ( ObjectInternal obj ) .binds ( instance , _, this ) and
136- exists ( ObjectInternal cls |
137- instance .isClass ( ) = false and cls = instance .getClass ( )
138- or
139- instance .isClass ( ) = true and cls = instance
140- |
141- value = TBoundMethod ( cls , this .getFunction ( ) ) and
142- origin = CfgOrigin:: unknown ( )
143- )
145+ value = TBoundMethod ( instance .getClass ( ) , this .getFunction ( ) ) and
146+ origin = CfgOrigin:: unknown ( )
144147 }
145148
146- override predicate binds ( ObjectInternal cls , string name , ObjectInternal descriptor ) {
149+ pragma [ noinline ] override predicate binds ( ObjectInternal cls , string name , ObjectInternal descriptor ) {
147150 descriptor = this .getFunction ( ) and
148151 exists ( ObjectInternal instance |
149152 any ( ObjectInternal obj ) .binds ( instance , name , this ) |
@@ -200,18 +203,23 @@ class StaticMethodObjectInternal extends ObjectInternal, TStaticMethod {
200203 this .getFunction ( ) .calleeAndOffset ( scope , paramOffset )
201204 }
202205
203- override predicate attribute ( string name , ObjectInternal value , CfgOrigin origin ) { none ( ) }
206+ pragma [ noinline ] override predicate attribute ( string name , ObjectInternal value , CfgOrigin origin ) { none ( ) }
204207
205- override predicate attributesUnknown ( ) { none ( ) }
208+ pragma [ noinline ] override predicate attributesUnknown ( ) { none ( ) }
206209
207210 override boolean isDescriptor ( ) { result = true }
208211
209- override predicate descriptorGet ( ObjectInternal instance , ObjectInternal value , CfgOrigin origin ) {
212+ pragma [ noinline] override predicate descriptorGetClass ( ObjectInternal cls , ObjectInternal value , CfgOrigin origin ) {
213+ any ( ObjectInternal obj ) .binds ( cls , _, this ) and
214+ value = this .getFunction ( ) and origin = CfgOrigin:: unknown ( )
215+ }
216+
217+ pragma [ noinline] override predicate descriptorGetInstance ( ObjectInternal instance , ObjectInternal value , CfgOrigin origin ) {
210218 any ( ObjectInternal obj ) .binds ( instance , _, this ) and
211219 value = this .getFunction ( ) and origin = CfgOrigin:: unknown ( )
212220 }
213221
214- override predicate binds ( ObjectInternal instance , string name , ObjectInternal descriptor ) { none ( ) }
222+ pragma [ noinline ] override predicate binds ( ObjectInternal instance , string name , ObjectInternal descriptor ) { none ( ) }
215223
216224 override int length ( ) { none ( ) }
217225
0 commit comments