Ruby: go to local source in load-store steps

This commit is contained in:
Asger F
2022-09-30 23:12:24 +02:00
parent 8b389fe5f9
commit 8c43ab627f

View File

@@ -171,7 +171,7 @@ private module Cached {
)
or
exists(TypeTrackerContent loadContent, TypeTrackerContent storeContent |
basicLoadStoreStep(nodeFrom, nodeTo, loadContent, storeContent) and
flowsToLoadStoreStep(nodeFrom, nodeTo, loadContent, storeContent) and
summary = LoadStoreStep(loadContent, storeContent)
)
}
@@ -218,6 +218,18 @@ private predicate flowsToStoreStep(
exists(Node obj | nodeTo.flowsTo(obj) and basicStoreStep(nodeFrom, obj, content))
}
/**
* Holds if `loadContent` is loaded from `nodeFrom` and written to `storeContent` of `nodeTo`.
*/
predicate flowsToLoadStoreStep(
Node nodeFrom, TypeTrackingNode nodeTo, TypeTrackerContent loadContent,
TypeTrackerContent storeContent
) {
exists(Node obj |
nodeTo.flowsTo(obj) and basicLoadStoreStep(nodeFrom, obj, loadContent, storeContent)
)
}
/**
* INTERNAL: Use `TypeTracker` or `TypeBackTracker` instead.
*