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

Skip to content

Commit ec151e9

Browse files
committed
Python points-to: Convert two pairs of predicates to methods on booleans.
1 parent 39b9723 commit ec151e9

7 files changed

Lines changed: 41 additions & 193 deletions

File tree

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

Lines changed: 5 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,7 @@ abstract class CallableObjectInternal extends ObjectInternal {
1919
none()
2020
}
2121

22-
override predicate isClass() { none() }
23-
24-
override predicate notClass() { any() }
22+
override boolean isClass() { result = false }
2523

2624
/** The boolean value of this object, if it has one */
2725
override boolean booleanValue() {
@@ -60,13 +58,7 @@ class PythonFunctionObjectInternal extends CallableObjectInternal, TPythonFuncti
6058
result = TBuiltinClassObject(Builtin::special("FunctionType"))
6159
}
6260

63-
override predicate isComparable() {
64-
any()
65-
}
66-
67-
override predicate notComparable() {
68-
none()
69-
}
61+
override boolean isComparable() { result = true }
7062

7163
override Builtin getBuiltin() {
7264
none()
@@ -113,13 +105,7 @@ class BuiltinFunctionObjectInternal extends CallableObjectInternal, TBuiltinFunc
113105
result = TBuiltinClassObject(this.getBuiltin().getClass())
114106
}
115107

116-
override predicate isComparable() {
117-
any()
118-
}
119-
120-
override predicate notComparable() {
121-
none()
122-
}
108+
override boolean isComparable() { result = true }
123109

124110
override predicate callResult(PointsToContext2 callee, ObjectInternal obj, CfgOrigin origin) {
125111
// TO DO .. Result should be be a unknown value of a known class if the return type is known or just an unknown.
@@ -159,13 +145,7 @@ class BuiltinMethodObjectInternal extends CallableObjectInternal, TBuiltinMethod
159145
none()
160146
}
161147

162-
override predicate isComparable() {
163-
any()
164-
}
165-
166-
override predicate notComparable() {
167-
none()
168-
}
148+
override boolean isComparable() { result = true }
169149

170150
override predicate callResult(PointsToContext2 callee, ObjectInternal obj, CfgOrigin origin) {
171151
// TO DO .. Result should be be a unknown value of a known class if the return type is known or just an unknown.
@@ -212,13 +192,7 @@ class BoundMethodObjectInternal extends CallableObjectInternal, TBoundMethod {
212192
this = TBoundMethod(node, _, _, context)
213193
}
214194

215-
override predicate isComparable() {
216-
none()
217-
}
218-
219-
override predicate notComparable() {
220-
any()
221-
}
195+
override boolean isComparable() { result = false }
222196

223197
override predicate callResult(PointsToContext2 callee, ObjectInternal obj, CfgOrigin origin) {
224198
this.getFunction().callResult(callee, obj, origin)

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

Lines changed: 4 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,7 @@ abstract class ClassObjectInternal extends ObjectInternal {
1717

1818
override predicate maybe() { none() }
1919

20-
override predicate isClass() { any() }
21-
22-
override predicate notClass() { none() }
20+
override boolean isClass() { result = true }
2321

2422
override int intValue() {
2523
none()
@@ -93,13 +91,7 @@ class PythonClassObjectInternal extends ClassObjectInternal, TPythonClassObject
9391
none()
9492
}
9593

96-
override predicate isComparable() {
97-
any()
98-
}
99-
100-
override predicate notComparable() {
101-
none()
102-
}
94+
override boolean isComparable() { result = true }
10395

10496
}
10597

@@ -142,13 +134,7 @@ class BuiltinClassObjectInternal extends ClassObjectInternal, TBuiltinClassObjec
142134
none()
143135
}
144136

145-
override predicate isComparable() {
146-
any()
147-
}
148-
149-
override predicate notComparable() {
150-
none()
151-
}
137+
override boolean isComparable() { result = true }
152138

153139
}
154140

@@ -171,13 +157,7 @@ class UnknownClassInternal extends ClassObjectInternal, TUnknownClass {
171157
none()
172158
}
173159

174-
override predicate isComparable() {
175-
none()
176-
}
177-
178-
override predicate notComparable() {
179-
any()
180-
}
160+
override boolean isComparable() { result = false }
181161

182162
override Builtin getBuiltin() {
183163
none()

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

Lines changed: 10 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,15 @@ abstract class BooleanObjectInternal extends ObjectInternal {
1919
none()
2020
}
2121

22-
override predicate isClass() { none() }
22+
override boolean isClass() { result = false }
23+
24+
override boolean isComparable() { result = true }
2325

24-
override predicate notClass() { any() }
2526

2627
override ObjectInternal getClass() {
2728
result = TBuiltinClassObject(Builtin::special("bool"))
2829
}
2930

30-
override predicate isComparable() {
31-
any()
32-
}
33-
34-
override predicate notComparable() {
35-
none()
36-
}
37-
3831
override Builtin getBuiltin() {
3932
none()
4033
}
@@ -118,9 +111,10 @@ class NoneObjectInternal extends ObjectInternal, TNone {
118111
none()
119112
}
120113

121-
override predicate isClass() { none() }
114+
override boolean isClass() { result = false }
115+
116+
override boolean isComparable() { result = true }
122117

123-
override predicate notClass() { any() }
124118

125119
override ObjectInternal getClass() {
126120
result = TBuiltinClassObject(Builtin::special("NoneType"))
@@ -130,14 +124,6 @@ class NoneObjectInternal extends ObjectInternal, TNone {
130124
node.(NameNode).getId() = "None" and context.appliesTo(node)
131125
}
132126

133-
override predicate isComparable() {
134-
any()
135-
}
136-
137-
override predicate notComparable() {
138-
none()
139-
}
140-
141127
override Builtin getBuiltin() {
142128
none()
143129
}
@@ -183,21 +169,14 @@ class IntObjectInternal extends ObjectInternal, TInt {
183169
none()
184170
}
185171

186-
override predicate isClass() { none() }
172+
override boolean isClass() { result = false }
187173

188-
override predicate notClass() { any() }
174+
override boolean isComparable() { result = true }
189175

190176
override ObjectInternal getClass() {
191177
result = TBuiltinClassObject(Builtin::special("int"))
192178
}
193179

194-
override predicate isComparable() {
195-
any()
196-
}
197-
198-
override predicate notComparable() {
199-
none()
200-
}
201180

202181
override Builtin getBuiltin() {
203182
none()
@@ -250,22 +229,14 @@ class StringObjectInternal extends ObjectInternal, TString {
250229
none()
251230
}
252231

253-
override predicate isClass() { none() }
232+
override boolean isClass() { result = false }
254233

255-
override predicate notClass() { any() }
234+
override boolean isComparable() { result = true }
256235

257236
override ObjectInternal getClass() {
258237
result = TBuiltinClassObject(Builtin::special("str"))
259238
}
260239

261-
override predicate isComparable() {
262-
any()
263-
}
264-
265-
override predicate notComparable() {
266-
none()
267-
}
268-
269240
override Builtin getBuiltin() {
270241
none()
271242
}

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

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -34,31 +34,14 @@ class InstanceInternal extends TInstance, ObjectInternal {
3434
none()
3535
}
3636

37-
override predicate isClass() {
38-
none()
39-
}
37+
override boolean isClass() { result = false }
4038

41-
override predicate notClass() {
42-
any()
43-
}
39+
override boolean isComparable() { result = false }
4440

4541
override ObjectInternal getClass() {
4642
this = TInstance(_, result, _)
4743
}
4844

49-
/** Holds if whatever this "object" represents can be meaningfully analysed for
50-
* truth or false in comparisons. For example, `None` or `int` can be, but `int()`
51-
* or an unknown string cannot.
52-
*/
53-
override predicate isComparable() {
54-
none()
55-
}
56-
57-
/** The negation of `isComparable()` */
58-
override predicate notComparable() {
59-
any()
60-
}
61-
6245
/** Gets the `Builtin` for this object, if any.
6346
* All objects (except unknown and undefined values) should return
6447
* exactly one result for either this method or `getOrigin()`.

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

Lines changed: 4 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ abstract class ModuleObjectInternal extends ObjectInternal {
2121
result = this.getSourceModule().getEntryNode()
2222
}
2323

24+
override boolean isClass() { result = false }
25+
26+
override boolean isComparable() { result = true }
27+
2428
}
2529

2630
class BuiltinModuleObjectInternal extends ModuleObjectInternal, TBuiltinModuleObject {
@@ -51,22 +55,10 @@ class BuiltinModuleObjectInternal extends ModuleObjectInternal, TBuiltinModuleOb
5155
none()
5256
}
5357

54-
override predicate isClass() { none() }
55-
56-
override predicate notClass() { any() }
57-
5858
override ObjectInternal getClass() {
5959
result = TBuiltinClassObject(this.getBuiltin().getClass())
6060
}
6161

62-
override predicate isComparable() {
63-
any()
64-
}
65-
66-
override predicate notComparable() {
67-
none()
68-
}
69-
7062
override Module getSourceModule() {
7163
none()
7264
}
@@ -117,22 +109,10 @@ class PackageObjectInternal extends ModuleObjectInternal, TPackageObject {
117109
none()
118110
}
119111

120-
override predicate isClass() { none() }
121-
122-
override predicate notClass() { any() }
123-
124112
override ObjectInternal getClass() {
125113
result = TBuiltinClassObject(this.getBuiltin().getClass())
126114
}
127115

128-
override predicate isComparable() {
129-
any()
130-
}
131-
132-
override predicate notComparable() {
133-
none()
134-
}
135-
136116
override Module getSourceModule() {
137117
result.getFile() = this.getFolder().getFile("__init__.py")
138118
}
@@ -201,22 +181,10 @@ class PythonModuleObjectInternal extends ModuleObjectInternal, TPythonModule {
201181
none()
202182
}
203183

204-
override predicate isClass() { none() }
205-
206-
override predicate notClass() { any() }
207-
208184
override ObjectInternal getClass() {
209185
result = TBuiltinClassObject(this.getBuiltin().getClass())
210186
}
211187

212-
override predicate isComparable() {
213-
any()
214-
}
215-
216-
override predicate notComparable() {
217-
none()
218-
}
219-
220188
override Module getSourceModule() {
221189
this = TPythonModule(result)
222190
}

0 commit comments

Comments
 (0)