@@ -641,11 +641,18 @@ predicate jumpStepNotSharedWithTypeTracker(Node nodeFrom, Node nodeTo) {
641641//--------
642642// Field flow
643643//--------
644+ /**
645+ * Subset of `storeStep` that should be shared with type-tracking.
646+ */
647+ predicate storeStepCommon ( Node nodeFrom , ContentSet c , Node nodeTo ) { none ( ) }
648+
644649/**
645650 * Holds if data can flow from `nodeFrom` to `nodeTo` via an assignment to
646651 * content `c`.
647652 */
648653predicate storeStep ( Node nodeFrom , ContentSet c , Node nodeTo ) {
654+ storeStepCommon ( nodeFrom , c , nodeTo )
655+ or
649656 listStoreStep ( nodeFrom , c , nodeTo )
650657 or
651658 setStoreStep ( nodeFrom , c , nodeTo )
@@ -891,10 +898,17 @@ predicate attributeStoreStep(Node nodeFrom, AttributeContent c, Node nodeTo) {
891898 )
892899}
893900
901+ /**
902+ * Subset of `readStep` that should be shared with type-tracking.
903+ */
904+ predicate readStepCommon ( Node nodeFrom , ContentSet c , Node nodeTo ) { none ( ) }
905+
894906/**
895907 * Holds if data can flow from `nodeFrom` to `nodeTo` via a read of content `c`.
896908 */
897909predicate readStep ( Node nodeFrom , ContentSet c , Node nodeTo ) {
910+ readStepCommon ( nodeFrom , c , nodeTo )
911+ or
898912 subscriptReadStep ( nodeFrom , c , nodeTo )
899913 or
900914 iterableUnpackingReadStep ( nodeFrom , c , nodeTo )
0 commit comments