diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/attributes/RemoveFixedAttributeNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/attributes/RemoveFixedAttributeNode.java index 93561001034cd3559fefbd1e64295c5d884d9496..b9c737057e670e1ed1d3938bbedabf588c48c737 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/attributes/RemoveFixedAttributeNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/attributes/RemoveFixedAttributeNode.java @@ -26,6 +26,8 @@ import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.dsl.Cached; import com.oracle.truffle.api.dsl.Specialization; import com.oracle.truffle.api.object.DynamicObject; +import com.oracle.truffle.api.object.Location; +import com.oracle.truffle.api.object.Shape; import com.oracle.truffle.api.profiles.BranchProfile; import com.oracle.truffle.api.profiles.ConditionProfile; import com.oracle.truffle.api.profiles.ValueProfile; @@ -68,6 +70,15 @@ public abstract class RemoveFixedAttributeNode extends FixedAttributeAccessNode public abstract void execute(Object attrs); + @Specialization(limit = "3", // + guards = {"shapeCheck(shape, attrs)", "location == null"}, // + assumptions = {"shape.getValidAssumption()"}) + protected void removeNonExistantAttr(@SuppressWarnings("unused") DynamicObject attrs, + @SuppressWarnings("unused") @Cached("lookupShape(attrs)") Shape shape, + @SuppressWarnings("unused") @Cached("lookupLocation(shape, name)") Location location) { + // do nothing + } + @Specialization @TruffleBoundary protected void removeAttrFallback(DynamicObject attrs) {