@@ -8,11 +8,8 @@ private import semmle.python.pointsto.PointsToContext
88private import semmle.python.types.Builtins
99
1010
11- abstract class BooleanObjectInternal extends ObjectInternal {
1211
13- BooleanObjectInternal ( ) {
14- this = TTrue ( ) or this = TFalse ( )
15- }
12+ abstract class ConstantObjectInternal extends ObjectInternal {
1613
1714 override ClassDecl getClassDeclaration ( ) {
1815 none ( )
@@ -22,22 +19,13 @@ abstract class BooleanObjectInternal extends ObjectInternal {
2219
2320 override boolean isComparable ( ) { result = true }
2421
25-
26- override ObjectInternal getClass ( ) {
27- result = TBuiltinClassObject ( Builtin:: special ( "bool" ) )
28- }
29-
30- override Builtin getBuiltin ( ) {
31- none ( )
32- }
33-
3422 override predicate callResult ( PointsToContext callee , ObjectInternal obj , CfgOrigin origin ) {
35- // Booleans aren't callable
23+ // Constants aren't callable
3624 none ( )
3725 }
3826
3927 override predicate callResult ( ObjectInternal obj , CfgOrigin origin ) {
40- // Booleans aren't callable
28+ // Constants aren't callable
4129 none ( )
4230 }
4331
@@ -63,6 +51,19 @@ abstract class BooleanObjectInternal extends ObjectInternal {
6351
6452}
6553
54+ abstract class BooleanObjectInternal extends ConstantObjectInternal {
55+
56+ BooleanObjectInternal ( ) {
57+ this = TTrue ( ) or this = TFalse ( )
58+ }
59+
60+
61+ override ObjectInternal getClass ( ) {
62+ result = TBuiltinClassObject ( Builtin:: special ( "bool" ) )
63+ }
64+
65+ }
66+
6667class TrueObjectInternal extends BooleanObjectInternal , TTrue {
6768
6869 override string toString ( ) {
@@ -85,7 +86,7 @@ class TrueObjectInternal extends BooleanObjectInternal, TTrue {
8586 none ( )
8687 }
8788
88- override @py_object getSource ( ) {
89+ override Builtin getBuiltin ( ) {
8990 result = Builtin:: special ( "True" )
9091 }
9192
@@ -113,13 +114,13 @@ class FalseObjectInternal extends BooleanObjectInternal, TFalse {
113114 none ( )
114115 }
115116
116- override @py_object getSource ( ) {
117+ override Builtin getBuiltin ( ) {
117118 result = Builtin:: special ( "False" )
118119 }
119120
120121}
121122
122- class NoneObjectInternal extends ObjectInternal , TNone {
123+ class NoneObjectInternal extends ConstantObjectInternal , TNone {
123124
124125 override string toString ( ) {
125126 result = "None"
@@ -129,15 +130,6 @@ class NoneObjectInternal extends ObjectInternal, TNone {
129130 result = false
130131 }
131132
132- override ClassDecl getClassDeclaration ( ) {
133- none ( )
134- }
135-
136- override boolean isClass ( ) { result = false }
137-
138- override boolean isComparable ( ) { result = true }
139-
140-
141133 override ObjectInternal getClass ( ) {
142134 result = TBuiltinClassObject ( Builtin:: special ( "NoneType" ) )
143135 }
@@ -150,20 +142,6 @@ class NoneObjectInternal extends ObjectInternal, TNone {
150142 result = Builtin:: special ( "None" )
151143 }
152144
153- override predicate callResult ( PointsToContext callee , ObjectInternal obj , CfgOrigin origin ) {
154- // None isn't callable
155- none ( )
156- }
157-
158- override predicate callResult ( ObjectInternal obj , CfgOrigin origin ) {
159- // None isn't callable
160- none ( )
161- }
162-
163- override ControlFlowNode getOrigin ( ) {
164- none ( )
165- }
166-
167145 override int intValue ( ) {
168146 none ( )
169147 }
@@ -172,30 +150,10 @@ class NoneObjectInternal extends ObjectInternal, TNone {
172150 none ( )
173151 }
174152
175- override predicate calleeAndOffset ( Function scope , int paramOffset ) {
176- none ( )
177- }
178-
179- override predicate attribute ( string name , ObjectInternal value , CfgOrigin origin ) {
180- none ( )
181- }
182-
183- override predicate attributesUnknown ( ) { none ( ) }
184-
185- override @py_object getSource ( ) {
186- result = Builtin:: special ( "None" )
187- }
188-
189- override boolean isDescriptor ( ) { result = false }
190-
191- override predicate descriptorGet ( ObjectInternal instance , ObjectInternal value , CfgOrigin origin ) { none ( ) }
192-
193- override predicate binds ( ObjectInternal instance , string name , ObjectInternal descriptor ) { none ( ) }
194-
195153}
196154
197155
198- class IntObjectInternal extends ObjectInternal , TInt {
156+ class IntObjectInternal extends ConstantObjectInternal , TInt {
199157
200158 override string toString ( ) {
201159 result = "int " + this .intValue ( ) .toString ( )
@@ -206,35 +164,12 @@ class IntObjectInternal extends ObjectInternal, TInt {
206164 node .getNode ( ) .( IntegerLiteral ) .getValue ( ) = this .intValue ( )
207165 }
208166
209- override ClassDecl getClassDeclaration ( ) {
210- none ( )
211- }
212-
213- override boolean isClass ( ) { result = false }
214-
215- override boolean isComparable ( ) { result = true }
216-
217167 override ObjectInternal getClass ( ) {
218168 result = TBuiltinClassObject ( Builtin:: special ( "int" ) )
219169 }
220170
221-
222171 override Builtin getBuiltin ( ) {
223- none ( )
224- }
225-
226- override predicate callResult ( PointsToContext callee , ObjectInternal obj , CfgOrigin origin ) {
227- // ints aren't callable
228- none ( )
229- }
230-
231- override predicate callResult ( ObjectInternal obj , CfgOrigin origin ) {
232- // ints aren't callable
233- none ( )
234- }
235-
236- override ControlFlowNode getOrigin ( ) {
237- none ( )
172+ result .( Builtin ) .intValue ( ) = this .intValue ( )
238173 }
239174
240175 override int intValue ( ) {
@@ -251,30 +186,10 @@ class IntObjectInternal extends ObjectInternal, TInt {
251186 this .intValue ( ) != 0 and result = true
252187 }
253188
254- override predicate calleeAndOffset ( Function scope , int paramOffset ) {
255- none ( )
256- }
257-
258- override predicate attribute ( string name , ObjectInternal value , CfgOrigin origin ) {
259- none ( )
260- }
261-
262- override predicate attributesUnknown ( ) { none ( ) }
263-
264- override @py_object getSource ( ) {
265- result .( Builtin ) .intValue ( ) = this .intValue ( )
266- }
267-
268- override boolean isDescriptor ( ) { result = false }
269-
270- override predicate descriptorGet ( ObjectInternal instance , ObjectInternal value , CfgOrigin origin ) { none ( ) }
271-
272- override predicate binds ( ObjectInternal instance , string name , ObjectInternal descriptor ) { none ( ) }
273-
274189}
275190
276191
277- class StringObjectInternal extends ObjectInternal , TString {
192+ class StringObjectInternal extends ConstantObjectInternal , TString {
278193
279194 override string toString ( ) {
280195 result = "'" + this .strValue ( ) + "'"
@@ -285,34 +200,12 @@ class StringObjectInternal extends ObjectInternal, TString {
285200 node .getNode ( ) .( StrConst ) .getText ( ) = this .strValue ( )
286201 }
287202
288- override ClassDecl getClassDeclaration ( ) {
289- none ( )
290- }
291-
292- override boolean isClass ( ) { result = false }
293-
294- override boolean isComparable ( ) { result = true }
295-
296203 override ObjectInternal getClass ( ) {
297204 result = TBuiltinClassObject ( Builtin:: special ( "unicode" ) )
298205 }
299206
300207 override Builtin getBuiltin ( ) {
301- none ( )
302- }
303-
304- override predicate callResult ( PointsToContext callee , ObjectInternal obj , CfgOrigin origin ) {
305- // strings aren't callable
306- none ( )
307- }
308-
309- override predicate callResult ( ObjectInternal obj , CfgOrigin origin ) {
310- // strings aren't callable
311- none ( )
312- }
313-
314- override ControlFlowNode getOrigin ( ) {
315- none ( )
208+ result .( Builtin ) .strValue ( ) = this .strValue ( )
316209 }
317210
318211 override int intValue ( ) {
@@ -329,26 +222,6 @@ class StringObjectInternal extends ObjectInternal, TString {
329222 this .strValue ( ) != "" and result = true
330223 }
331224
332- override predicate calleeAndOffset ( Function scope , int paramOffset ) {
333- none ( )
334- }
335-
336- override predicate attribute ( string name , ObjectInternal value , CfgOrigin origin ) {
337- none ( )
338- }
339-
340- override predicate attributesUnknown ( ) { none ( ) }
341-
342- override @py_object getSource ( ) {
343- result .( Builtin ) .strValue ( ) = this .strValue ( )
344- }
345-
346- override boolean isDescriptor ( ) { result = false }
347-
348- override predicate descriptorGet ( ObjectInternal instance , ObjectInternal value , CfgOrigin origin ) { none ( ) }
349-
350- override predicate binds ( ObjectInternal instance , string name , ObjectInternal descriptor ) { none ( ) }
351-
352225}
353226
354227
0 commit comments