@@ -140,11 +140,18 @@ module QlBuiltinsMocks {
140
140
override string getName ( ) { result = "T" }
141
141
}
142
142
143
- /** A mock TypeExpr with classname `T`. */
143
+ /** A mock TypeExpr with classname `T`. Which we have 5 copies of. */
144
144
class DummyTTypeExpr extends MockTypeExpr:: Range {
145
- DummyTTypeExpr ( ) { this = "Mock: QlBuiltins::T" }
145
+ int n ;
146
+
147
+ DummyTTypeExpr ( ) {
148
+ this = "Mock: QlBuiltins::T(" + n + ")" and
149
+ n = [ 0 .. 4 ]
150
+ }
146
151
147
152
override string getClassName ( ) { result = "T" }
153
+
154
+ int getN ( ) { result = n }
148
155
}
149
156
150
157
module EdgeSig {
@@ -154,7 +161,7 @@ module QlBuiltinsMocks {
154
161
override string getName ( ) { result = "EdgeSig" }
155
162
156
163
override predicate hasTypeParam ( int i , string type , string name ) {
157
- i = 0 and name = "MyT" and type instanceof DummyTTypeExpr
164
+ i = 0 and name = "MyT" and type . ( DummyTTypeExpr ) . getN ( ) = 0
158
165
}
159
166
160
167
override string getMember ( int i ) { i = 0 and result instanceof EdgeSigPred }
@@ -183,7 +190,11 @@ module QlBuiltinsMocks {
183
190
184
191
override string getName ( ) { result = name }
185
192
186
- override MockTypeExpr:: Range getType ( ) { result instanceof DummyTTypeExpr }
193
+ override MockTypeExpr:: Range getType ( ) {
194
+ name = "a" and result .( DummyTTypeExpr ) .getN ( ) = 1
195
+ or
196
+ name = "b" and result .( DummyTTypeExpr ) .getN ( ) = 2
197
+ }
187
198
}
188
199
}
189
200
@@ -199,7 +210,7 @@ module QlBuiltinsMocks {
199
210
}
200
211
201
212
override predicate hasTypeParam ( int i , string type , string name ) {
202
- i = 0 and name = "MyT" and type instanceof DummyTTypeExpr
213
+ i = 0 and name = "MyT" and type . ( DummyTTypeExpr ) . getN ( ) = 3
203
214
or
204
215
none ( ) // TODO: `EdgeSig<MyT>::edgeSig/2 edge` is not implemented.
205
216
}
@@ -213,7 +224,7 @@ module QlBuiltinsMocks {
213
224
override string getName ( ) { result = "getEquivalenceClass" }
214
225
215
226
override MockVarDecl:: Range getParameter ( int i ) {
216
- result . ( EdgeSig :: EdgeSigPredParam ) . getName ( ) = "a" and // just reusing another mock node that has the right name and type.
227
+ result instanceof GetEquivalenceClassPredicateAParam and
217
228
i = 0
218
229
}
219
230
@@ -222,6 +233,16 @@ module QlBuiltinsMocks {
222
233
}
223
234
}
224
235
236
+ class GetEquivalenceClassPredicateAParam extends MockVarDecl:: Range {
237
+ GetEquivalenceClassPredicateAParam ( ) {
238
+ this = "Mock: QlBuiltins::EquivalenceRelation::getEquivalenceClass::a"
239
+ }
240
+
241
+ override string getName ( ) { result = "a" }
242
+
243
+ override MockTypeExpr:: Range getType ( ) { result .( DummyTTypeExpr ) .getN ( ) = 4 }
244
+ }
245
+
225
246
class EquivalenceClassClass extends MockClass:: Range {
226
247
EquivalenceClassClass ( ) {
227
248
this = "Mock: QlBuiltins::EquivalenceRelation::EquivalenceClass(Class)"
0 commit comments