Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e9f58ba

Browse files
committed
Python: refactor ConstantObjects.
1 parent 0b0a633 commit e9f58ba

1 file changed

Lines changed: 23 additions & 150 deletions

File tree

python/ql/src/semmle/python/objects/Constants.qll

Lines changed: 23 additions & 150 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,8 @@ private import semmle.python.pointsto.PointsToContext
88
private 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+
6667
class 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

Comments
 (0)