@@ -3597,7 +3597,7 @@ static void doLastItem(Node inliningTarget, SequenceStorage s, @SuppressWarnings
35973597 setLenNode .execute (inliningTarget , s , s .length () - 1 );
35983598 }
35993599
3600- @ Specialization (guards = "! isForeignSequenceStorage(s)" )
3600+ @ Specialization (guards = { "!isNativeObjectStorage(s)" , "! isForeignSequenceStorage(s)"} )
36013601 static void doGeneric (Node inliningTarget , SequenceStorage s , int idx ,
36023602 @ Cached GetItemScalarNode getItemNode ,
36033603 @ Cached SetItemScalarNode setItemNode ,
@@ -3610,6 +3610,21 @@ static void doGeneric(Node inliningTarget, SequenceStorage s, int idx,
36103610 setLenNode .execute (inliningTarget , s , len - 1 );
36113611 }
36123612
3613+ @ Specialization
3614+ static void doNativeObjectStorage (Node inliningTarget , NativeObjectSequenceStorage s , int idx ,
3615+ @ Cached (inline = false ) CStructAccess .ReadPointerNode readPointerNode ,
3616+ @ Cached (inline = false ) CStructAccess .WritePointerNode writePointerNode ,
3617+ @ Cached CExtNodes .XDecRefPointerNode decRefNode ) {
3618+ int len = s .length ();
3619+ Object deleted = readPointerNode .readArrayElement (s .getPtr (), idx );
3620+ for (int i = idx ; i < len - 1 ; i ++) {
3621+ writePointerNode .writeArrayElement (s .getPtr (), i , readPointerNode .readArrayElement (s .getPtr (), i + 1 ));
3622+ }
3623+ writePointerNode .writeArrayElement (s .getPtr (), len - 1 , 0L );
3624+ s .setNewLength (len - 1 );
3625+ decRefNode .execute (inliningTarget , deleted );
3626+ }
3627+
36133628 @ Specialization
36143629 static void doForeign (Node inliningTarget , ForeignSequenceStorage s , int idx ,
36153630 @ Cached ForeignSequenceStorage .RemoveNode removeNode ) {
0 commit comments