@@ -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
@@ -340,6 +339,8 @@ class StepSummary extends TStepSummary {
340
339
341
340
/** Provides predicates for updating step summaries (`StepSummary`s). */
342
341
module StepSummary {
342
+ predicate append = Cached:: append / 2 ;
343
+
343
344
/**
344
345
* Gets the summary that corresponds to having taken a forwards
345
346
* inter-procedural step from `nodeFrom` to `nodeTo`.
@@ -400,6 +401,35 @@ module StepSummary {
400
401
}
401
402
402
403
deprecated predicate localSourceStoreStep = flowsToStoreStep / 3 ;
404
+
405
+ /** Gets the step summary for a level step. */
406
+ StepSummary levelStep ( ) { result = LevelStep ( ) }
407
+
408
+ /** Gets the step summary for a call step. */
409
+ StepSummary callStep ( ) { result = CallStep ( ) }
410
+
411
+ /** Gets the step summary for a return step. */
412
+ StepSummary returnStep ( ) { result = ReturnStep ( ) }
413
+
414
+ /** Gets the step summary for storing into `content`. */
415
+ StepSummary storeStep ( TypeTrackerContent content ) { result = StoreStep ( content ) }
416
+
417
+ /** Gets the step summary for loading from `content`. */
418
+ StepSummary loadStep ( TypeTrackerContent content ) { result = LoadStep ( content ) }
419
+
420
+ /** Gets the step summary for loading from `load` and then storing into `store`. */
421
+ StepSummary loadStoreStep ( TypeTrackerContent load , TypeTrackerContent store ) {
422
+ result = LoadStoreStep ( load , store )
423
+ }
424
+
425
+ /** Gets the step summary for a step that only permits contents matched by `filter`. */
426
+ StepSummary withContent ( ContentFilter filter ) { result = WithContent ( filter ) }
427
+
428
+ /** Gets the step summary for a step that blocks contents matched by `filter`. */
429
+ StepSummary withoutContent ( ContentFilter filter ) { result = WithoutContent ( filter ) }
430
+
431
+ /** Gets the step summary for a jump step. */
432
+ StepSummary jumpStep ( ) { result = JumpStep ( ) }
403
433
}
404
434
405
435
/**
@@ -545,6 +575,13 @@ module TypeTracker {
545
575
* Gets a valid end point of type tracking.
546
576
*/
547
577
TypeTracker end ( ) { result .end ( ) }
578
+
579
+ /**
580
+ * INTERNAL USE ONLY.
581
+ *
582
+ * Gets a valid end point of type tracking with the call bit set to the given value.
583
+ */
584
+ predicate end = Cached:: noContentTypeTracker / 1 ;
548
585
}
549
586
550
587
pragma [ nomagic]
0 commit comments