Skip to content

Commit 5ff82b9

Browse files
committed
Add appropriate not-implemented handler to 'DeleteItemNode'.
1 parent 27645ee commit 5ff82b9

File tree

2 files changed

+22
-12
lines changed

2 files changed

+22
-12
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/mappingproxy/MappingproxyBuiltins.java

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
import static com.oracle.graal.python.nodes.SpecialMethodNames.ITEMS;
2929
import static com.oracle.graal.python.nodes.SpecialMethodNames.KEYS;
3030
import static com.oracle.graal.python.nodes.SpecialMethodNames.__CONTAINS__;
31-
import static com.oracle.graal.python.nodes.SpecialMethodNames.__DELITEM__;
3231
import static com.oracle.graal.python.nodes.SpecialMethodNames.__GETITEM__;
3332
import static com.oracle.graal.python.nodes.SpecialMethodNames.__INIT__;
3433
import static com.oracle.graal.python.nodes.SpecialMethodNames.__ITER__;
@@ -167,16 +166,6 @@ Object run(PMappingproxy self, Object key, Object value) {
167166
}
168167
}
169168

170-
@Builtin(name = __DELITEM__, fixedNumOfArguments = 2)
171-
@GenerateNodeFactory
172-
public abstract static class DelItemNode extends PythonBinaryBuiltinNode {
173-
@Specialization
174-
@SuppressWarnings("unused")
175-
Object run(PMappingproxy self, Object key) {
176-
throw raise(TypeError, "'mappingproxy' object does not support item deletion");
177-
}
178-
}
179-
180169
@Builtin(name = __CONTAINS__, fixedNumOfArguments = 2)
181170
@GenerateNodeFactory
182171
public abstract static class ContainsNode extends PythonBuiltinNode {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/subscript/DeleteItemNode.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,15 @@
2626
package com.oracle.graal.python.nodes.subscript;
2727

2828
import static com.oracle.graal.python.nodes.SpecialMethodNames.__DELITEM__;
29+
import static com.oracle.graal.python.runtime.exception.PythonErrorType.TypeError;
30+
31+
import java.util.function.Supplier;
2932

3033
import com.oracle.graal.python.builtins.objects.object.PythonObject;
3134
import com.oracle.graal.python.nodes.PNode;
35+
import com.oracle.graal.python.nodes.SpecialMethodNames;
3236
import com.oracle.graal.python.nodes.call.special.LookupAndCallBinaryNode;
37+
import com.oracle.graal.python.nodes.call.special.LookupAndCallBinaryNode.NotImplementedHandler;
3338
import com.oracle.graal.python.nodes.expression.BinaryOpNode;
3439
import com.oracle.truffle.api.dsl.Cached;
3540
import com.oracle.truffle.api.dsl.Specialization;
@@ -38,6 +43,17 @@
3843
@NodeInfo(shortName = __DELITEM__)
3944
public abstract class DeleteItemNode extends BinaryOpNode {
4045

46+
private final Supplier<NotImplementedHandler> notImplementedHandler;
47+
48+
public DeleteItemNode() {
49+
this.notImplementedHandler = () -> new NotImplementedHandler() {
50+
@Override
51+
public Object execute(Object arg, Object arg2) {
52+
throw raise(TypeError, "'%p' object doesn't support item deletion", arg);
53+
}
54+
};
55+
}
56+
4157
public PNode getPrimary() {
4258
return getLeftNode();
4359
}
@@ -48,10 +64,15 @@ public PNode getSlice() {
4864

4965
@Specialization
5066
public Object doObject(Object primary, Object slice,
51-
@Cached("create(__DELITEM__)") LookupAndCallBinaryNode callDelitemNode) {
67+
@Cached("createDelItemNode()") LookupAndCallBinaryNode callDelitemNode) {
5268
return callDelitemNode.executeObject(primary, slice);
5369
}
5470

71+
protected LookupAndCallBinaryNode createDelItemNode() {
72+
return LookupAndCallBinaryNode.create(SpecialMethodNames.__DELITEM__, null, notImplementedHandler);
73+
74+
}
75+
5576
public static DeleteItemNode create() {
5677
return DeleteItemNodeGen.create(null, null);
5778
}

0 commit comments

Comments
 (0)