Python: type-tracking through dictionary construction

This commit is contained in:
Rasmus Wriedt Larsen
2024-02-23 13:57:57 +01:00
parent ece8245a4b
commit 73fe596753
3 changed files with 4 additions and 3 deletions

View File

@@ -646,6 +646,8 @@ predicate jumpStepNotSharedWithTypeTracker(Node nodeFrom, Node nodeTo) {
*/ */
predicate storeStepCommon(Node nodeFrom, ContentSet c, Node nodeTo) { predicate storeStepCommon(Node nodeFrom, ContentSet c, Node nodeTo) {
tupleStoreStep(nodeFrom, c, nodeTo) tupleStoreStep(nodeFrom, c, nodeTo)
or
dictStoreStep(nodeFrom, c, nodeTo)
} }
/** /**
@@ -659,8 +661,6 @@ predicate storeStep(Node nodeFrom, ContentSet c, Node nodeTo) {
or or
setStoreStep(nodeFrom, c, nodeTo) setStoreStep(nodeFrom, c, nodeTo)
or or
dictStoreStep(nodeFrom, c, nodeTo)
or
moreDictStoreSteps(nodeFrom, c, nodeTo) moreDictStoreSteps(nodeFrom, c, nodeTo)
or or
comprehensionStoreStep(nodeFrom, c, nodeTo) comprehensionStoreStep(nodeFrom, c, nodeTo)

View File

@@ -38,6 +38,7 @@ typeTracker_found_pointsTo_notFound
| code/class_super.py:101:1:101:7 | ControlFlowNode for Attribute() | Z.foo | | code/class_super.py:101:1:101:7 | ControlFlowNode for Attribute() | Z.foo |
| code/class_super.py:108:1:108:8 | ControlFlowNode for Attribute() | Z.foo | | code/class_super.py:108:1:108:8 | ControlFlowNode for Attribute() | Z.foo |
| code/def_in_function.py:22:5:22:11 | ControlFlowNode for Attribute() | test.A.foo | | code/def_in_function.py:22:5:22:11 | ControlFlowNode for Attribute() | test.A.foo |
| code/func_ref_in_content.py:29:1:29:4 | ControlFlowNode for f4() | func |
| code/isinstance.py:9:13:9:22 | ControlFlowNode for Attribute() | A.foo | | code/isinstance.py:9:13:9:22 | ControlFlowNode for Attribute() | A.foo |
| code/isinstance.py:9:13:9:22 | ControlFlowNode for Attribute() | ASub.foo | | code/isinstance.py:9:13:9:22 | ControlFlowNode for Attribute() | ASub.foo |
| code/isinstance.py:14:13:14:22 | ControlFlowNode for Attribute() | A.foo | | code/isinstance.py:14:13:14:22 | ControlFlowNode for Attribute() | A.foo |

View File

@@ -26,7 +26,7 @@ def return_func_in_dict():
dct = return_func_in_dict() # $ pt,tt=return_func_in_dict dct = return_func_in_dict() # $ pt,tt=return_func_in_dict
f4 = dct['func'] f4 = dct['func']
f4() # $ MISSING: tt=func f4() # $ tt=func
def return_func_in_dict_update(): def return_func_in_dict_update():