@@ -3597,7 +3597,7 @@ static void doLastItem(Node inliningTarget, SequenceStorage s, @SuppressWarnings
3597
3597
setLenNode .execute (inliningTarget , s , s .length () - 1 );
3598
3598
}
3599
3599
3600
- @ Specialization (guards = "! isForeignSequenceStorage(s)" )
3600
+ @ Specialization (guards = { "!isNativeObjectStorage(s)" , "! isForeignSequenceStorage(s)"} )
3601
3601
static void doGeneric (Node inliningTarget , SequenceStorage s , int idx ,
3602
3602
@ Cached GetItemScalarNode getItemNode ,
3603
3603
@ Cached SetItemScalarNode setItemNode ,
@@ -3610,6 +3610,21 @@ static void doGeneric(Node inliningTarget, SequenceStorage s, int idx,
3610
3610
setLenNode .execute (inliningTarget , s , len - 1 );
3611
3611
}
3612
3612
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
+
3613
3628
@ Specialization
3614
3629
static void doForeign (Node inliningTarget , ForeignSequenceStorage s , int idx ,
3615
3630
@ Cached ForeignSequenceStorage .RemoveNode removeNode ) {
0 commit comments