@@ -4070,16 +4070,33 @@ static SequenceStorage doNativeInt(Node inliningTarget, NativeIntSequenceStorage
40704070 }
40714071
40724072 @ Specialization
4073- protected static SequenceStorage doNativeStorage (Node inliningTarget , NativeSequenceStorage storage , int index , Object value ,
4073+ protected static SequenceStorage doNativeObjectStorage (Node inliningTarget , NativeObjectSequenceStorage storage , int index , Object value ,
40744074 @ Exclusive @ Cached EnsureCapacityNode ensureCapacityNode ,
4075- @ Cached (inline = false ) GetItemScalarNode getItem ,
4076- @ Cached SetItemScalarNode setItem ) {
4075+ @ Cached (inline = false ) CStructAccess .ReadPointerNode readPointerNode ,
4076+ @ Cached (inline = false ) CStructAccess .WritePointerNode writePointerNode ,
4077+ @ Cached PythonToNativeNewRefNode toNative ) {
40774078 int newLength = storage .length () + 1 ;
40784079 ensureCapacityNode .execute (inliningTarget , storage , newLength );
40794080 for (int i = storage .length (); i > index ; i --) {
4080- setItem . execute ( inliningTarget , storage , i , getItem . execute ( inliningTarget , storage , i - 1 ));
4081+ writePointerNode . writeArrayElement ( storage . getPtr () , i , readPointerNode . readArrayElement ( storage . getPtr () , i - 1 ));
40814082 }
4082- setItem .execute (inliningTarget , storage , index , value );
4083+ writePointerNode .writeArrayElement (storage .getPtr (), index , toNative .execute (value ));
4084+ storage .setNewLength (newLength );
4085+ return storage ;
4086+ }
4087+
4088+ @ Specialization
4089+ protected static SequenceStorage doNativeByteStorage (Node inliningTarget , NativeByteSequenceStorage storage , int index , Object value ,
4090+ @ Exclusive @ Cached EnsureCapacityNode ensureCapacityNode ,
4091+ @ Cached (inline = false ) CStructAccess .ReadByteNode readByteNode ,
4092+ @ Cached (inline = false ) CStructAccess .WriteByteNode writeByteNode ,
4093+ @ Cached CastToByteNode castToByteNode ) {
4094+ int newLength = storage .length () + 1 ;
4095+ ensureCapacityNode .execute (inliningTarget , storage , newLength );
4096+ for (int i = storage .length (); i > index ; i --) {
4097+ writeByteNode .writeArrayElement (storage .getPtr (), i , readByteNode .readArrayElement (storage .getPtr (), i - 1 ));
4098+ }
4099+ writeByteNode .writeArrayElement (storage .getPtr (), index , castToByteNode .execute (null , value ));
40834100 storage .setNewLength (newLength );
40844101 return storage ;
40854102 }
0 commit comments