Skip to content

Commit ae96351

Browse files
committed
PropertySetNode with setOwnProperty should behave like CreateDataProperty.
1 parent ec98665 commit ae96351

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

graal-js/src/com.oracle.truffle.js/src/com/oracle/truffle/js/nodes/access/PropertySetNode.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1033,6 +1033,13 @@ private SetCacheNode createCachedPropertyNodeJSObject(Property property, JSDynam
10331033
Shape cacheShape = thisObj.getShape();
10341034
AbstractShapeCheckNode shapeCheck = createShapeCheckNode(cacheShape, thisObj, depth, false, false);
10351035

1036+
// isOwnProperty() means CreateDataProperty, i.e., we must redefine
1037+
// the property when the current flags do not match data property and
1038+
// when it is possible to do so (i.e. when it is configurable)
1039+
if (isOwnProperty() && JSAttributes.isConfigurable(property.getFlags()) && JSAttributes.configurableEnumerableWritable() != property.getFlags()) {
1040+
return new DataPropertyPutWithFlagsNode(key, shapeCheck);
1041+
}
1042+
10361043
if (JSProperty.isData(property)) {
10371044
return createCachedDataPropertyNodeJSObject(thisObj, depth, value, shapeCheck, property);
10381045
} else {

0 commit comments

Comments
 (0)