@@ -1161,7 +1161,24 @@ protected SequenceStorage doScalarGeneric(SequenceStorage storage, Object idx, O
1161
1161
}
1162
1162
1163
1163
@ Specialization
1164
- protected SequenceStorage doSlice (SequenceStorage storage , PSlice slice , Object iterable ,
1164
+ protected SequenceStorage doSliceSequence (SequenceStorage storage , PSlice slice , PSequence sequence ,
1165
+ @ Shared ("generalizeProfile" ) @ Cached BranchProfile generalizeProfile ,
1166
+ @ Cached SetItemSliceNode setItemSliceNode ,
1167
+ @ Cached LenNode lenNode ) {
1168
+ SliceInfo info = slice .computeIndices (lenNode .execute (storage ));
1169
+ try {
1170
+ setItemSliceNode .execute (storage , info , sequence );
1171
+ return storage ;
1172
+ } catch (SequenceStoreException e ) {
1173
+ generalizeProfile .enter ();
1174
+ SequenceStorage generalized = generalizeStore (storage , e .getIndicationValue ());
1175
+ setItemSliceNode .execute (generalized , info , sequence );
1176
+ return generalized ;
1177
+ }
1178
+ }
1179
+
1180
+ @ Specialization (replaces = "doSliceSequence" )
1181
+ protected SequenceStorage doSliceGeneric (SequenceStorage storage , PSlice slice , Object iterable ,
1165
1182
@ Shared ("generalizeProfile" ) @ Cached BranchProfile generalizeProfile ,
1166
1183
@ Cached SetItemSliceNode setItemSliceNode ,
1167
1184
@ Cached ListNodes .ConstructListNode constructListNode ) {
@@ -2010,12 +2027,12 @@ byte[] doNativeByte(NativeSequenceStorage s) {
2010
2027
return barr ;
2011
2028
}
2012
2029
2013
- @ Specialization (guards = { "len(lenNode, s) == cachedLen" , "cachedLen <= 32" })
2030
+ @ Specialization (guards = {"len(lenNode, s) == cachedLen" , "cachedLen <= 32" })
2014
2031
@ ExplodeLoop
2015
2032
byte [] doGenericLenCached (SequenceStorage s ,
2016
- @ Cached CastToByteNode castToByteNode ,
2017
- @ Cached @ SuppressWarnings ("unused" ) LenNode lenNode ,
2018
- @ Cached ("len(lenNode, s)" ) int cachedLen ) {
2033
+ @ Cached CastToByteNode castToByteNode ,
2034
+ @ Cached @ SuppressWarnings ("unused" ) LenNode lenNode ,
2035
+ @ Cached ("len(lenNode, s)" ) int cachedLen ) {
2019
2036
byte [] barr = new byte [cachedLen ];
2020
2037
for (int i = 0 ; i < cachedLen ; i ++) {
2021
2038
barr [i ] = castToByteNode .execute (getGetItemNode ().execute (s , i ));
0 commit comments