@@ -56,6 +56,18 @@ private module Cached {
56
56
exists ( DataFlow:: Node mid | pred .flowsTo ( mid ) | StepSummary:: smallstep ( mid , succ , summary ) )
57
57
}
58
58
59
+ pragma [ nomagic]
60
+ private DataFlow:: Node getAGlobalStepPredecessor ( string global ) {
61
+ result = AccessPath:: getAnAssignmentTo ( global ) and
62
+ AccessPath:: isAssignedInUniqueFile ( global )
63
+ }
64
+
65
+ pragma [ nomagic]
66
+ private DataFlow:: Node getAGlobalStepSuccessor ( string global ) {
67
+ result = AccessPath:: getAReferenceTo ( global ) and
68
+ AccessPath:: isAssignedInUniqueFile ( global )
69
+ }
70
+
59
71
/**
60
72
* INTERNAL: Use `TypeBackTracker.smallstep()` instead.
61
73
*/
@@ -106,20 +118,10 @@ private module Cached {
106
118
SharedTypeTrackingStep:: step ( pred , succ ) and
107
119
summary = LevelStep ( )
108
120
or
109
- // Store to global access path
110
- exists ( string name |
111
- pred = AccessPath:: getAnAssignmentTo ( name ) and
112
- AccessPath:: isAssignedInUniqueFile ( name ) and
113
- succ = DataFlow:: globalAccessPathRootPseudoNode ( ) and
114
- summary = StoreStep ( name )
115
- )
116
- or
117
- // Load from global access path
118
- exists ( string name |
119
- succ = AccessPath:: getAReferenceTo ( name ) and
120
- AccessPath:: isAssignedInUniqueFile ( name ) and
121
- pred = DataFlow:: globalAccessPathRootPseudoNode ( ) and
122
- summary = LoadStep ( name )
121
+ summary = LevelStep ( ) and
122
+ exists ( string global |
123
+ pred = getAGlobalStepPredecessor ( global ) and
124
+ succ = getAGlobalStepSuccessor ( global )
123
125
)
124
126
or
125
127
// Store to non-global access path
0 commit comments