JS: Make PropWrite not depend on SourceNode

This commit is contained in:
Asger Feldthaus
2020-04-27 15:27:39 +01:00
parent e3440c1410
commit a8283593a9

View File

@@ -647,25 +647,24 @@ module DataFlow {
* writes to the corresponding property.
*/
private class ObjectDefinePropertyAsPropWrite extends PropWrite, ValueNode {
CallToObjectDefineProperty odp;
override MethodCallExpr astNode;
ObjectDefinePropertyAsPropWrite() { odp = this }
override Node getBase() { result = odp.getBaseObject() }
override Expr getPropertyNameExpr() { result = odp.getArgument(1).asExpr() }
override string getPropertyName() { result = odp.getPropertyName() }
override Node getRhs() {
// not using `CallToObjectDefineProperty::getAPropertyAttribute` for performance reasons
exists(ObjectLiteralNode propdesc |
propdesc.flowsTo(odp.getPropertyDescriptor()) and
propdesc.hasPropertyWrite("value", result)
)
ObjectDefinePropertyAsPropWrite() {
astNode.getReceiver().(GlobalVarAccess).getName() = "Object" and
astNode.getMethodName() = "defineProperty"
}
override ControlFlowNode getWriteNode() { result = odp.getAstNode() }
override Node getBase() { result = astNode.getArgument(0).flow() }
override Expr getPropertyNameExpr() { result = astNode.getArgument(1) }
override string getPropertyName() { result = astNode.getArgument(1).getStringValue() }
override Node getRhs() {
result = astNode.getArgument(2).(ObjectExpr).getPropertyByName("value").getInit().flow()
}
override ControlFlowNode getWriteNode() { result = astNode }
}
/**