Skip to content

Commit 1da3fa3

Browse files
committed
Add mapping from __delitem__ to the mapping slot
1 parent 8e5c613 commit 1da3fa3

File tree

3 files changed

+46
-1
lines changed

3 files changed

+46
-1
lines changed

graalpython/com.oracle.graal.python.cext/src/capi.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,7 @@ void initialize_hashes();
331331
#define JWRAPPER_OBJOBJPROC 39
332332
#define JWRAPPER_OBJOBJARGPROC 40
333333
#define JWRAPPER_NEW 41
334+
#define JWRAPPER_MP_DELITEM 42
334335

335336
#define TDEBUG __builtin_debugtrap()
336337
#define get_method_flags_wrapper(flags) \

graalpython/com.oracle.graal.python.cext/src/typeobject.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -680,6 +680,7 @@ int PyType_Ready(PyTypeObject* cls) {
680680
ADD_SLOT_CONV("__len__", mappings->mp_length, -1, JWRAPPER_LENFUNC);
681681
ADD_SLOT_CONV("__getitem__", mappings->mp_subscript, -2, JWRAPPER_BINARYFUNC);
682682
ADD_SLOT_CONV("__setitem__", mappings->mp_ass_subscript, -3, JWRAPPER_OBJOBJARGPROC);
683+
ADD_SLOT_CONV("__delitem__", mappings->mp_ass_subscript, -3, JWRAPPER_MP_DELITEM);
683684
}
684685

685686
PyAsyncMethods* async = cls->tp_as_async;

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi/ExternalFunctionNodes.java

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,8 @@ public enum PExternalFunctionWrapper {
214214
LENFUNC(38, 0, AllToSulongNode::create, CheckPrimitiveFunctionResultNodeGen::create),
215215
OBJOBJPROC(39, 0, AllToSulongNode::create, CheckInquiryResultNodeGen::create),
216216
OBJOBJARGPROC(40, 0, AllToSulongNode::create, CheckPrimitiveFunctionResultNodeGen::create),
217-
NEW(41);
217+
NEW(41),
218+
MP_DELITEM(42, 0, AllToSulongNode::create, CheckPrimitiveFunctionResultNodeGen::create);
218219

219220
@CompilationFinal(dimensions = 1) private static final PExternalFunctionWrapper[] VALUES = Arrays.copyOf(values(), values().length);
220221

@@ -379,6 +380,10 @@ static RootCallTarget getOrCreateCallTarget(PExternalFunctionWrapper sig, Python
379380
nodeKlass = SetterRoot.class;
380381
rootNodeFunction = l -> new SetterRoot(l, name, sig);
381382
break;
383+
case MP_DELITEM:
384+
nodeKlass = MpDelItemRootNode.class;
385+
rootNodeFunction = doArgAndResultConversion ? l -> new MpDelItemRootNode(l, name, sig) : l -> new MpDelItemRootNode(l, name);
386+
break;
382387
default:
383388
throw CompilerDirectives.shouldNotReachHere();
384389
}
@@ -1353,6 +1358,44 @@ public Signature getSignature() {
13531358
}
13541359
}
13551360

1361+
/**
1362+
* Implement mapping of {@code __delitem__} to {@code mp_ass_subscript}. It handles adding the
1363+
* NULL 3rd argument.
1364+
*/
1365+
static final class MpDelItemRootNode extends MethodDescriptorRoot {
1366+
private static final Signature SIGNATURE = new Signature(-1, false, -1, false, new String[]{"self", "i"}, KEYWORDS_HIDDEN_CALLABLE, true);
1367+
@Child private ReadIndexedArgumentNode readArg1Node;
1368+
1369+
MpDelItemRootNode(PythonLanguage language, String name) {
1370+
super(language, name, false);
1371+
}
1372+
1373+
MpDelItemRootNode(PythonLanguage language, String name, PExternalFunctionWrapper provider) {
1374+
super(language, name, false, provider);
1375+
this.readArg1Node = ReadIndexedArgumentNode.create(1);
1376+
}
1377+
1378+
@Override
1379+
protected Object[] prepareCArguments(VirtualFrame frame) {
1380+
Object self = readSelf(frame);
1381+
Object arg1 = readArg1Node.execute(frame);
1382+
return new Object[]{self, arg1, PNone.NO_VALUE};
1383+
}
1384+
1385+
@Override
1386+
protected void postprocessCArguments(VirtualFrame frame, Object[] cArguments) {
1387+
ReleaseNativeWrapperNode releaseNativeWrapperNode = ensureReleaseNativeWrapperNode();
1388+
releaseNativeWrapperNode.execute(cArguments[0]);
1389+
releaseNativeWrapperNode.execute(cArguments[1]);
1390+
releaseNativeWrapperNode.execute(cArguments[2]);
1391+
}
1392+
1393+
@Override
1394+
public Signature getSignature() {
1395+
return SIGNATURE;
1396+
}
1397+
}
1398+
13561399
/**
13571400
* Wrapper root node for reverse binary operations.
13581401
*/

0 commit comments

Comments
 (0)