JS: ensure PropWrites exist for all instance members

This commit is contained in:
Asger F
2019-01-29 10:12:54 +00:00
parent 5815aa1e8b
commit 60cef60c1d
4 changed files with 36 additions and 2 deletions

View File

@@ -494,6 +494,29 @@ module DataFlow {
override ControlFlowNode getWriteNode() { result = prop }
}
/**
* An instance method definition, viewed as a data flow node that adds
* a property to an unseen value.
*/
private class InstanceMethodAsPropWrite extends PropWrite, PropNode {
override MethodDefinition prop;
InstanceMethodAsPropWrite() { not prop.isStatic() }
override Node getBase() { none() } // The prototype has no DataFlow node
override Expr getPropertyNameExpr() { result = prop.getNameExpr() }
override string getPropertyName() { result = prop.getName() }
override Node getRhs() {
not prop instanceof AccessorMethodDefinition and
result = valueNode(prop.getInit())
}
override ControlFlowNode getWriteNode() { result = prop }
}
/**
* A JSX attribute definition, viewed as a data flow node that writes properties to
* the JSX element it is in.
@@ -532,14 +555,13 @@ module DataFlow {
}
/**
* An instance field with an initializer expression, seen as a property write.
* An instance field, seen as a property write.
*/
private class InstanceFieldAsPropWrite extends PropWrite, PropNode {
override FieldDefinition prop;
InstanceFieldAsPropWrite() {
not prop.isStatic() and
exists(prop.getInit()) and
not prop instanceof ParameterField
}