add a CopyStep type-tracking step, for loadStoreSteps that loads and stores the same property

This commit is contained in:
Erik Krogh Kristensen
2020-04-01 11:21:05 +02:00
parent 9fc8ed17cd
commit 1be326a37b
4 changed files with 11 additions and 6 deletions

View File

@@ -87,10 +87,10 @@ module CollectionsTypeTracking {
summary = StoreStep(field) and
step.store(pred, result, field)
or
summary = CopyStep(field) and
step.loadStore(pred, result, field)
or
exists(string toField | summary = LoadStoreStep(field, toField) |
field = toField and
step.loadStore(pred, result, field)
or
step.loadStore(pred, result, field, toField)
)
)

View File

@@ -176,7 +176,7 @@ module PromiseTypeTracking {
summary = StoreStep(field) and
step.store(pred, result, field)
or
summary = LoadStoreStep(field, field) and
summary = CopyStep(field) and
step.loadStore(pred, result, field)
)
}

View File

@@ -57,6 +57,8 @@ class TypeTracker extends TTypeTracker {
result = MkTypeTracker(hasCall, toProp)
)
or
step = CopyStep(prop) and result = this
or
step = CallStep() and result = MkTypeTracker(true, prop)
or
step = ReturnStep() and hasCall = false and result = this
@@ -219,6 +221,8 @@ class TypeBackTracker extends TTypeBackTracker {
result = MkTypeBackTracker(hasReturn, fromProp)
)
or
step = CopyStep(prop) and result = this
or
step = CallStep() and hasReturn = false and result = this
or
step = ReturnStep() and result = MkTypeBackTracker(true, prop)

View File

@@ -40,9 +40,8 @@ newtype TStepSummary =
ReturnStep() or
StoreStep(PropertyName prop) or
LoadStep(PropertyName prop) or
CopyStep(PropertyName prop) or
LoadStoreStep(PropertyName fromProp, PropertyName toProp) {
fromProp = toProp
or
exists(TypeTrackingPseudoProperty prop | fromProp = prop and toProp = prop.getLoadStoreToProp())
}
@@ -64,6 +63,8 @@ class StepSummary extends TStepSummary {
or
exists(string prop | this = LoadStep(prop) | result = "load " + prop)
or
exists(string prop | this = CopyStep(prop) | result = "copy " + prop)
or
exists(string fromProp, string toProp | this = LoadStoreStep(fromProp, toProp) |
result = "copy " + fromProp + " to " + toProp
)