@@ -51,7 +51,7 @@ module StepSummary {
5151 * heap and/or inter-procedural step from `nodeFrom` to `nodeTo`.
5252 */
5353 cached
54- predicate step ( Node nodeFrom , Node nodeTo , StepSummary summary ) {
54+ predicate step ( LocalSourceNode nodeFrom , Node nodeTo , StepSummary summary ) {
5555 exists ( Node mid | typePreservingStep * ( nodeFrom , mid ) and smallstep ( mid , nodeTo , summary ) )
5656 }
5757
@@ -82,9 +82,8 @@ module StepSummary {
8282
8383/** Holds if it's reasonable to expect the data flow step from `nodeFrom` to `nodeTo` to preserve types. */
8484private predicate typePreservingStep ( Node nodeFrom , Node nodeTo ) {
85- EssaFlow:: essaFlowStep ( nodeFrom , nodeTo ) or
86- jumpStep ( nodeFrom , nodeTo ) or
87- nodeFrom = nodeTo .( PostUpdateNode ) .getPreUpdateNode ( )
85+ simpleLocalFlowStep ( nodeFrom , nodeTo ) or
86+ jumpStep ( nodeFrom , nodeTo )
8887}
8988
9089/**
@@ -142,11 +141,11 @@ predicate returnStep(ReturnNode nodeFrom, Node nodeTo) {
142141 * function. This means we will track the fact that `x.attr` can have the type of `y` into the
143142 * assignment to `z` inside `bar`, even though this attribute write happens _after_ `bar` is called.
144143 */
145- predicate basicStoreStep ( Node nodeFrom , Node nodeTo , string attr ) {
144+ predicate basicStoreStep ( Node nodeFrom , LocalSourceNode nodeTo , string attr ) {
146145 exists ( AttrWrite a |
147146 a .mayHaveAttributeName ( attr ) and
148147 nodeFrom = a .getValue ( ) and
149- simpleLocalFlowStep * ( nodeTo , a .getObject ( ) )
148+ nodeTo . flowsTo ( a .getObject ( ) )
150149 )
151150}
152151
@@ -275,7 +274,7 @@ class TypeTracker extends TTypeTracker {
275274 * heap and/or inter-procedural step from `nodeFrom` to `nodeTo`.
276275 */
277276 pragma [ inline]
278- TypeTracker step ( Node nodeFrom , Node nodeTo ) {
277+ TypeTracker step ( LocalSourceNode nodeFrom , Node nodeTo ) {
279278 exists ( StepSummary summary |
280279 StepSummary:: step ( nodeFrom , nodeTo , summary ) and
281280 result = this .append ( summary )
0 commit comments