@@ -32,7 +32,7 @@ class PropertyInternal extends ObjectInternal, TProperty {
3232 private Context getContext ( ) { this = TProperty ( _, result , _) }
3333
3434 override string toString ( ) {
35- result = "property" + this .getName ( )
35+ result = "property " + this .getName ( )
3636 }
3737
3838 override boolean booleanValue ( ) { result = true }
@@ -63,16 +63,19 @@ class PropertyInternal extends ObjectInternal, TProperty {
6363
6464 override predicate calleeAndOffset ( Function scope , int paramOffset ) { none ( ) }
6565
66- pragma [ noinline] override predicate attribute ( string name , ObjectInternal value , CfgOrigin origin ) { none ( ) }
66+ pragma [ noinline] override predicate attribute ( string name , ObjectInternal value , CfgOrigin origin ) {
67+ value = TPropertySetterOrDeleter ( this , name ) and origin = CfgOrigin:: unknown ( )
68+ }
6769
68- pragma [ noinline ] override predicate attributesUnknown ( ) { none ( ) }
70+ override predicate attributesUnknown ( ) { none ( ) }
6971
7072 override predicate subscriptUnknown ( ) { none ( ) }
7173
7274 override boolean isDescriptor ( ) { result = true }
7375
7476 override int length ( ) { none ( ) }
75- pragma [ noinline] override predicate binds ( ObjectInternal cls , string name , ObjectInternal descriptor ) { none ( ) }
77+
78+ override predicate binds ( ObjectInternal cls , string name , ObjectInternal descriptor ) { none ( ) }
7679
7780 pragma [ noinline] override predicate descriptorGetClass ( ObjectInternal cls , ObjectInternal value , CfgOrigin origin ) {
7881 any ( ObjectInternal obj ) .binds ( cls , _, this ) and
@@ -100,6 +103,80 @@ class PropertyInternal extends ObjectInternal, TProperty {
100103
101104}
102105
106+ private class PropertySetterOrDeleter extends ObjectInternal , TPropertySetterOrDeleter {
107+
108+ override string toString ( ) {
109+ result = this .getProperty ( ) .toString ( ) + "." + this .getName ( )
110+ }
111+
112+ override string getName ( ) {
113+ this = TPropertySetterOrDeleter ( _, result )
114+ }
115+
116+ PropertyInternal getProperty ( ) {
117+ this = TPropertySetterOrDeleter ( result , _)
118+ }
119+
120+ override predicate callResult ( ObjectInternal obj , CfgOrigin origin ) {
121+ exists ( ControlFlowNode call |
122+ obj = this .getProperty ( ) and obj = TProperty ( call , _, _) and
123+ origin = CfgOrigin:: fromCfgNode ( call )
124+ )
125+ }
126+
127+ override predicate introducedAt ( ControlFlowNode node , PointsToContext context ) {
128+ none ( )
129+ }
130+
131+ override ClassDecl getClassDeclaration ( ) { none ( ) }
132+
133+ override boolean isClass ( ) { result = false }
134+
135+ override ObjectInternal getClass ( ) {
136+ result = TBuiltinClassObject ( Builtin:: special ( "MethodType" ) )
137+ }
138+
139+ override predicate notTestableForEquality ( ) { none ( ) }
140+
141+ override Builtin getBuiltin ( ) { none ( ) }
142+
143+ override ControlFlowNode getOrigin ( ) { none ( ) }
144+
145+ override predicate callResult ( PointsToContext callee , ObjectInternal obj , CfgOrigin origin ) { none ( ) }
146+
147+ override int intValue ( ) { none ( ) }
148+
149+ override string strValue ( ) { none ( ) }
150+
151+ override boolean booleanValue ( ) { result = true }
152+
153+ override predicate calleeAndOffset ( Function scope , int paramOffset ) { none ( ) }
154+
155+ override predicate attribute ( string name , ObjectInternal value , CfgOrigin origin ) { none ( ) }
156+
157+ override predicate attributesUnknown ( ) { none ( ) }
158+
159+ override predicate subscriptUnknown ( ) { none ( ) }
160+
161+ override boolean isDescriptor ( ) { result = true }
162+
163+ override int length ( ) { none ( ) }
164+
165+ override predicate binds ( ObjectInternal cls , string name , ObjectInternal descriptor ) { none ( ) }
166+
167+ override predicate contextSensitiveCallee ( ) { none ( ) }
168+
169+ override ObjectInternal getIterNext ( ) { none ( ) }
170+
171+ override predicate descriptorGetClass ( ObjectInternal cls , ObjectInternal value , CfgOrigin origin ) { none ( ) }
172+
173+ override predicate descriptorGetInstance ( ObjectInternal instance , ObjectInternal value , CfgOrigin origin ) { none ( ) }
174+
175+ override predicate useOriginAsLegacyObject ( ) { none ( ) }
176+
177+ }
178+
179+
103180/** A class representing classmethods in Python */
104181class ClassMethodObjectInternal extends ObjectInternal , TClassMethod {
105182
@@ -143,9 +220,9 @@ class ClassMethodObjectInternal extends ObjectInternal, TClassMethod {
143220
144221 override predicate calleeAndOffset ( Function scope , int paramOffset ) { none ( ) }
145222
146- pragma [ noinline ] override predicate attribute ( string name , ObjectInternal value , CfgOrigin origin ) { none ( ) }
223+ override predicate attribute ( string name , ObjectInternal value , CfgOrigin origin ) { none ( ) }
147224
148- pragma [ noinline ] override predicate attributesUnknown ( ) { none ( ) }
225+ override predicate attributesUnknown ( ) { none ( ) }
149226
150227 override predicate subscriptUnknown ( ) { none ( ) }
151228
@@ -235,9 +312,9 @@ class StaticMethodObjectInternal extends ObjectInternal, TStaticMethod {
235312 this .getFunction ( ) .calleeAndOffset ( scope , paramOffset )
236313 }
237314
238- pragma [ noinline ] override predicate attribute ( string name , ObjectInternal value , CfgOrigin origin ) { none ( ) }
315+ override predicate attribute ( string name , ObjectInternal value , CfgOrigin origin ) { none ( ) }
239316
240- pragma [ noinline ] override predicate attributesUnknown ( ) { none ( ) }
317+ override predicate attributesUnknown ( ) { none ( ) }
241318
242319 override predicate subscriptUnknown ( ) { none ( ) }
243320
@@ -253,7 +330,7 @@ class StaticMethodObjectInternal extends ObjectInternal, TStaticMethod {
253330 value = this .getFunction ( ) and origin = CfgOrigin:: unknown ( )
254331 }
255332
256- pragma [ noinline ] override predicate binds ( ObjectInternal instance , string name , ObjectInternal descriptor ) { none ( ) }
333+ override predicate binds ( ObjectInternal instance , string name , ObjectInternal descriptor ) { none ( ) }
257334
258335 override int length ( ) { none ( ) }
259336
0 commit comments