@@ -194,6 +194,77 @@ private predicate negativeSummaryModelInternal(string row) {
194
194
any ( NegativeSummaryModelCsvInternal s ) .row ( row )
195
195
}
196
196
197
+ /**
198
+ * Holds if an experimental source model exists for the given parameters.
199
+ * This is only for experimental queries.
200
+ */
201
+ extensible predicate extExperimentalSourceModel (
202
+ string package , string type , boolean subtypes , string name , string signature , string ext ,
203
+ string output , string kind , string provenance , string filter
204
+ ) ;
205
+
206
+ /**
207
+ * Holds if an experimental sink model exists for the given parameters.
208
+ * This is only for experimental queries.
209
+ */
210
+ extensible predicate extExperimentalSinkModel (
211
+ string package , string type , boolean subtypes , string name , string signature , string ext ,
212
+ string input , string kind , string provenance , string filter
213
+ ) ;
214
+
215
+ /**
216
+ * Holds if an experimental summary model exists for the given parameters.
217
+ * This is only for experimental queries.
218
+ */
219
+ extensible predicate extExperimentalSummaryModel (
220
+ string package , string type , boolean subtypes , string name , string signature , string ext ,
221
+ string input , string output , string kind , string provenance , string filter
222
+ ) ;
223
+
224
+ /**
225
+ * A class for activating additional model rows.
226
+ *
227
+ * Extend this class to include experimental model rows with `this` name
228
+ * in data flow analysis.
229
+ */
230
+ abstract class ActiveExperimentalModels extends string {
231
+ bindingset [ this ]
232
+ ActiveExperimentalModels ( ) { any ( ) }
233
+
234
+ /**
235
+ * Holds if an experimental source model exists for the given parameters.
236
+ */
237
+ predicate sourceModel (
238
+ string package , string type , boolean subtypes , string name , string signature , string ext ,
239
+ string output , string kind , string provenance
240
+ ) {
241
+ extExperimentalSourceModel ( package , type , subtypes , name , signature , ext , output , kind ,
242
+ provenance , this )
243
+ }
244
+
245
+ /**
246
+ * Holds if an experimental sink model exists for the given parameters.
247
+ */
248
+ predicate sinkModel (
249
+ string package , string type , boolean subtypes , string name , string signature , string ext ,
250
+ string output , string kind , string provenance
251
+ ) {
252
+ extExperimentalSinkModel ( package , type , subtypes , name , signature , ext , output , kind ,
253
+ provenance , this )
254
+ }
255
+
256
+ /**
257
+ * Holds if an experimental summary model exists for the given parameters.
258
+ */
259
+ predicate summaryModel (
260
+ string package , string type , boolean subtypes , string name , string signature , string ext ,
261
+ string input , string output , string kind , string provenance
262
+ ) {
263
+ extExperimentalSummaryModel ( package , type , subtypes , name , signature , ext , input , output , kind ,
264
+ provenance , this )
265
+ }
266
+ }
267
+
197
268
/**
198
269
* Holds if a source model exists for the given parameters.
199
270
*/
@@ -222,6 +293,9 @@ predicate sourceModel(
222
293
)
223
294
or
224
295
extSourceModel ( package , type , subtypes , name , signature , ext , output , kind , provenance )
296
+ or
297
+ any ( ActiveExperimentalModels q )
298
+ .sourceModel ( package , type , subtypes , name , signature , ext , output , kind , provenance )
225
299
}
226
300
227
301
/** Holds if a sink model exists for the given parameters. */
@@ -250,6 +324,9 @@ predicate sinkModel(
250
324
)
251
325
or
252
326
extSinkModel ( package , type , subtypes , name , signature , ext , input , kind , provenance )
327
+ or
328
+ any ( ActiveExperimentalModels q )
329
+ .sinkModel ( package , type , subtypes , name , signature , ext , input , kind , provenance )
253
330
}
254
331
255
332
/** Holds if a summary model exists for the given parameters. */
@@ -279,6 +356,9 @@ predicate summaryModel(
279
356
)
280
357
or
281
358
extSummaryModel ( package , type , subtypes , name , signature , ext , input , output , kind , provenance )
359
+ or
360
+ any ( ActiveExperimentalModels q )
361
+ .summaryModel ( package , type , subtypes , name , signature , ext , input , output , kind , provenance )
282
362
}
283
363
284
364
/** Holds if a summary model exists indicating there is no flow for the given parameters. */
0 commit comments