File tree Expand file tree Collapse file tree
javascript/ql/src/semmle/javascript Expand file tree Collapse file tree Original file line number Diff line number Diff line change 99private import javascript
1010private import internal.FlowSteps
1111private import internal.StepSummary
12+ private import semmle.javascript.internal.CachedStages
1213
1314private newtype TTypeTracker = MkTypeTracker ( Boolean hasCall , OptionalPropertyName prop )
1415
@@ -51,7 +52,9 @@ class TypeTracker extends TTypeTracker {
5152 /** Gets the summary resulting from appending `step` to this type-tracking summary. */
5253 cached
5354 TypeTracker append ( StepSummary step ) {
54- step = LevelStep ( ) and result = this
55+ Stages:: TypeTracking:: ref ( ) and
56+ step = LevelStep ( ) and
57+ result = this
5558 or
5659 exists ( string toProp | step = LoadStoreStep ( prop , toProp ) |
5760 result = MkTypeTracker ( hasCall , toProp )
@@ -214,8 +217,11 @@ class TypeBackTracker extends TTypeBackTracker {
214217 TypeBackTracker ( ) { this = MkTypeBackTracker ( hasReturn , prop ) }
215218
216219 /** Gets the summary resulting from prepending `step` to this type-tracking summary. */
220+ cached
217221 TypeBackTracker prepend ( StepSummary step ) {
218- step = LevelStep ( ) and result = this
222+ Stages:: TypeTracking:: ref ( ) and
223+ step = LevelStep ( ) and
224+ result = this
219225 or
220226 exists ( string fromProp | step = LoadStoreStep ( fromProp , prop ) |
221227 result = MkTypeBackTracker ( hasReturn , fromProp )
Original file line number Diff line number Diff line change @@ -181,6 +181,10 @@ module Stages {
181181 PreCallGraphStep:: loadStep ( _, _, _)
182182 or
183183 basicLoadStep ( _, _, _)
184+ or
185+ exists ( any ( DataFlow:: TypeTracker t ) .append ( _) )
186+ or
187+ exists ( any ( DataFlow:: TypeBackTracker t ) .prepend ( _) )
184188 }
185189 }
186190
You can’t perform that action at this time.
0 commit comments