@@ -55,10 +55,9 @@ private module Cached {
55
55
)
56
56
}
57
57
58
- pragma[nomagic]
59
- private TypeTracker noContentTypeTracker(boolean hasCall) {
60
- result = MkTypeTracker(hasCall, noContent())
61
- }
58
+ /** Gets a type tracker with no content and the call bit set to the given value. */
59
+ cached
60
+ TypeTracker noContentTypeTracker(boolean hasCall) { result = MkTypeTracker(hasCall, noContent()) }
62
61
63
62
/** Gets the summary resulting from appending `step` to type-tracking summary `tt`. */
64
63
cached
@@ -318,6 +317,8 @@ class StepSummary extends TStepSummary {
318
317
319
318
/** Provides predicates for updating step summaries (`StepSummary`s). */
320
319
module StepSummary {
320
+ predicate append = Cached::append/2;
321
+
321
322
/**
322
323
* Gets the summary that corresponds to having taken a forwards
323
324
* inter-procedural step from `nodeFrom` to `nodeTo`.
@@ -378,6 +379,35 @@ module StepSummary {
378
379
}
379
380
380
381
deprecated predicate localSourceStoreStep = flowsToStoreStep/3;
382
+
383
+ /** Gets the step summary for a level step. */
384
+ StepSummary levelStep() { result = LevelStep() }
385
+
386
+ /** Gets the step summary for a call step. */
387
+ StepSummary callStep() { result = CallStep() }
388
+
389
+ /** Gets the step summary for a return step. */
390
+ StepSummary returnStep() { result = ReturnStep() }
391
+
392
+ /** Gets the step summary for storing into `content`. */
393
+ StepSummary storeStep(TypeTrackerContent content) { result = StoreStep(content) }
394
+
395
+ /** Gets the step summary for loading from `content`. */
396
+ StepSummary loadStep(TypeTrackerContent content) { result = LoadStep(content) }
397
+
398
+ /** Gets the step summary for loading from `load` and then storing into `store`. */
399
+ StepSummary loadStoreStep(TypeTrackerContent load, TypeTrackerContent store) {
400
+ result = LoadStoreStep(load, store)
401
+ }
402
+
403
+ /** Gets the step summary for a step that only permits contents matched by `filter`. */
404
+ StepSummary withContent(ContentFilter filter) { result = WithContent(filter) }
405
+
406
+ /** Gets the step summary for a step that blocks contents matched by `filter`. */
407
+ StepSummary withoutContent(ContentFilter filter) { result = WithoutContent(filter) }
408
+
409
+ /** Gets the step summary for a jump step. */
410
+ StepSummary jumpStep() { result = JumpStep() }
381
411
}
382
412
383
413
/**
@@ -540,6 +570,13 @@ module TypeTracker {
540
570
* Gets a valid end point of type tracking.
541
571
*/
542
572
TypeTracker end() { result.end() }
573
+
574
+ /**
575
+ * INTERNAL USE ONLY.
576
+ *
577
+ * Gets a valid end point of type tracking with the call bit set to the given value.
578
+ */
579
+ predicate end = Cached::noContentTypeTracker/1;
543
580
}
544
581
545
582
pragma[nomagic]
0 commit comments