@@ -214,7 +214,8 @@ public enum PExternalFunctionWrapper {
214
214
LENFUNC (38 , 0 , AllToSulongNode ::create , CheckPrimitiveFunctionResultNodeGen ::create ),
215
215
OBJOBJPROC (39 , 0 , AllToSulongNode ::create , CheckInquiryResultNodeGen ::create ),
216
216
OBJOBJARGPROC (40 , 0 , AllToSulongNode ::create , CheckPrimitiveFunctionResultNodeGen ::create ),
217
- NEW (41 );
217
+ NEW (41 ),
218
+ MP_DELITEM (42 , 0 , AllToSulongNode ::create , CheckPrimitiveFunctionResultNodeGen ::create );
218
219
219
220
@ CompilationFinal (dimensions = 1 ) private static final PExternalFunctionWrapper [] VALUES = Arrays .copyOf (values (), values ().length );
220
221
@@ -379,6 +380,10 @@ static RootCallTarget getOrCreateCallTarget(PExternalFunctionWrapper sig, Python
379
380
nodeKlass = SetterRoot .class ;
380
381
rootNodeFunction = l -> new SetterRoot (l , name , sig );
381
382
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 ;
382
387
default :
383
388
throw CompilerDirectives .shouldNotReachHere ();
384
389
}
@@ -1353,6 +1358,44 @@ public Signature getSignature() {
1353
1358
}
1354
1359
}
1355
1360
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
+
1356
1399
/**
1357
1400
* Wrapper root node for reverse binary operations.
1358
1401
*/
0 commit comments