@@ -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