@@ -4070,16 +4070,33 @@ static SequenceStorage doNativeInt(Node inliningTarget, NativeIntSequenceStorage
4070
4070
}
4071
4071
4072
4072
@ 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 ,
4074
4074
@ 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 ) {
4077
4078
int newLength = storage .length () + 1 ;
4078
4079
ensureCapacityNode .execute (inliningTarget , storage , newLength );
4079
4080
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 ));
4081
4082
}
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 ));
4083
4100
storage .setNewLength (newLength );
4084
4101
return storage ;
4085
4102
}
0 commit comments