85
85
import com .oracle .truffle .api .dsl .Bind ;
86
86
import com .oracle .truffle .api .dsl .Cached ;
87
87
import com .oracle .truffle .api .dsl .Cached .Exclusive ;
88
+ import com .oracle .truffle .api .dsl .Cached .Shared ;
88
89
import com .oracle .truffle .api .dsl .Fallback ;
89
90
import com .oracle .truffle .api .dsl .GenerateNodeFactory ;
90
91
import com .oracle .truffle .api .dsl .ImportStatic ;
@@ -121,8 +122,8 @@ abstract static class ArrayNode extends PythonVarargsBuiltinNode {
121
122
Object array2 (VirtualFrame frame , Object cls , Object [] args , PKeyword [] kwargs ,
122
123
@ Bind ("this" ) Node inliningTarget ,
123
124
@ Exclusive @ Cached InlineIsBuiltinClassProfile isNotSubtypeProfile ,
124
- @ Cached CastToTruffleStringCheckedNode cast ,
125
- @ Cached ArrayNodeInternal arrayNodeInternal ) {
125
+ @ Shared @ Cached CastToTruffleStringCheckedNode cast ,
126
+ @ Shared @ Cached ArrayNodeInternal arrayNodeInternal ) {
126
127
checkKwargs (cls , kwargs , inliningTarget , isNotSubtypeProfile );
127
128
return arrayNodeInternal .execute (frame , cls , cast .cast (args [0 ], ErrorMessages .ARG_1_MUST_BE_UNICODE_NOT_P , args [0 ]), PNone .NO_VALUE );
128
129
}
@@ -131,8 +132,8 @@ Object array2(VirtualFrame frame, Object cls, Object[] args, PKeyword[] kwargs,
131
132
Object array3 (VirtualFrame frame , Object cls , Object [] args , PKeyword [] kwargs ,
132
133
@ Bind ("this" ) Node inliningTarget ,
133
134
@ Exclusive @ Cached InlineIsBuiltinClassProfile isNotSubtypeProfile ,
134
- @ Cached CastToTruffleStringCheckedNode cast ,
135
- @ Cached ArrayNodeInternal arrayNodeInternal ) {
135
+ @ Shared @ Cached CastToTruffleStringCheckedNode cast ,
136
+ @ Shared @ Cached ArrayNodeInternal arrayNodeInternal ) {
136
137
checkKwargs (cls , kwargs , inliningTarget , isNotSubtypeProfile );
137
138
return arrayNodeInternal .execute (frame , cls , cast .cast (args [0 ], ErrorMessages .ARG_1_MUST_BE_UNICODE_NOT_P , args [0 ]), args [1 ]);
138
139
}
@@ -174,17 +175,17 @@ abstract static class ArrayNodeInternal extends Node {
174
175
175
176
@ Specialization (guards = "isNoValue(initializer)" )
176
177
PArray array (Object cls , TruffleString typeCode , @ SuppressWarnings ("unused" ) PNone initializer ,
177
- @ Cached TruffleString .CodePointLengthNode lengthNode ,
178
- @ Cached TruffleString .CodePointAtIndexNode atIndexNode ) {
178
+ @ Shared @ Cached TruffleString .CodePointLengthNode lengthNode ,
179
+ @ Shared @ Cached TruffleString .CodePointAtIndexNode atIndexNode ) {
179
180
BufferFormat format = getFormatChecked (typeCode , lengthNode , atIndexNode );
180
181
return getFactory ().createArray (cls , typeCode , format );
181
182
}
182
183
183
184
@ Specialization
184
185
PArray arrayWithRangeInitializer (Object cls , TruffleString typeCode , PIntRange range ,
185
- @ Cached ArrayNodes .PutValueNode putValueNode ,
186
- @ Cached TruffleString .CodePointLengthNode lengthNode ,
187
- @ Cached TruffleString .CodePointAtIndexNode atIndexNode ) {
186
+ @ Shared @ Cached ArrayNodes .PutValueNode putValueNode ,
187
+ @ Shared @ Cached TruffleString .CodePointLengthNode lengthNode ,
188
+ @ Shared @ Cached TruffleString .CodePointAtIndexNode atIndexNode ) {
188
189
BufferFormat format = getFormatChecked (typeCode , lengthNode , atIndexNode );
189
190
PArray array ;
190
191
try {
@@ -208,8 +209,8 @@ PArray arrayWithRangeInitializer(Object cls, TruffleString typeCode, PIntRange r
208
209
@ Specialization
209
210
PArray arrayWithBytesInitializer (VirtualFrame frame , Object cls , TruffleString typeCode , PBytesLike bytes ,
210
211
@ Cached ArrayBuiltins .FromBytesNode fromBytesNode ,
211
- @ Cached TruffleString .CodePointLengthNode lengthNode ,
212
- @ Cached TruffleString .CodePointAtIndexNode atIndexNode ) {
212
+ @ Shared @ Cached TruffleString .CodePointLengthNode lengthNode ,
213
+ @ Shared @ Cached TruffleString .CodePointAtIndexNode atIndexNode ) {
213
214
PArray array = getFactory ().createArray (cls , typeCode , getFormatChecked (typeCode , lengthNode , atIndexNode ));
214
215
fromBytesNode .executeWithoutClinic (frame , array , bytes );
215
216
return array ;
@@ -218,8 +219,8 @@ PArray arrayWithBytesInitializer(VirtualFrame frame, Object cls, TruffleString t
218
219
@ Specialization (guards = "isString(initializer)" )
219
220
PArray arrayWithStringInitializer (VirtualFrame frame , Object cls , TruffleString typeCode , Object initializer ,
220
221
@ Cached ArrayBuiltins .FromUnicodeNode fromUnicodeNode ,
221
- @ Cached TruffleString .CodePointLengthNode lengthNode ,
222
- @ Cached TruffleString .CodePointAtIndexNode atIndexNode ) {
222
+ @ Shared @ Cached TruffleString .CodePointLengthNode lengthNode ,
223
+ @ Shared @ Cached TruffleString .CodePointAtIndexNode atIndexNode ) {
223
224
BufferFormat format = getFormatChecked (typeCode , lengthNode , atIndexNode );
224
225
if (format != BufferFormat .UNICODE ) {
225
226
throw raise (TypeError , ErrorMessages .CANNOT_USE_STR_TO_INITIALIZE_ARRAY , typeCode );
@@ -231,9 +232,10 @@ PArray arrayWithStringInitializer(VirtualFrame frame, Object cls, TruffleString
231
232
232
233
@ Specialization
233
234
PArray arrayArrayInitializer (VirtualFrame frame , Object cls , TruffleString typeCode , PArray initializer ,
234
- @ Cached ArrayNodes .PutValueNode putValueNode ,
235
- @ Cached ArrayNodes .GetValueNode getValueNode , @ Cached TruffleString .CodePointLengthNode lengthNode ,
236
- @ Cached TruffleString .CodePointAtIndexNode atIndexNode ) {
235
+ @ Shared @ Cached ArrayNodes .PutValueNode putValueNode ,
236
+ @ Cached ArrayNodes .GetValueNode getValueNode ,
237
+ @ Shared @ Cached TruffleString .CodePointLengthNode lengthNode ,
238
+ @ Shared @ Cached TruffleString .CodePointAtIndexNode atIndexNode ) {
237
239
BufferFormat format = getFormatChecked (typeCode , lengthNode , atIndexNode );
238
240
try {
239
241
PArray array = getFactory ().createArray (cls , typeCode , format , initializer .getLength ());
@@ -249,11 +251,11 @@ PArray arrayArrayInitializer(VirtualFrame frame, Object cls, TruffleString typeC
249
251
250
252
@ Specialization (guards = "!isBytes(initializer)" )
251
253
PArray arraySequenceInitializer (VirtualFrame frame , Object cls , TruffleString typeCode , PSequence initializer ,
252
- @ Cached ArrayNodes .PutValueNode putValueNode ,
254
+ @ Shared @ Cached ArrayNodes .PutValueNode putValueNode ,
253
255
@ Cached SequenceNodes .GetSequenceStorageNode getSequenceStorageNode ,
254
256
@ Cached SequenceStorageNodes .GetItemScalarNode getItemNode ,
255
- @ Cached TruffleString .CodePointLengthNode lengthNode ,
256
- @ Cached TruffleString .CodePointAtIndexNode atIndexNode ) {
257
+ @ Shared @ Cached TruffleString .CodePointLengthNode lengthNode ,
258
+ @ Shared @ Cached TruffleString .CodePointAtIndexNode atIndexNode ) {
257
259
BufferFormat format = getFormatChecked (typeCode , lengthNode , atIndexNode );
258
260
SequenceStorage storage = getSequenceStorageNode .execute (initializer );
259
261
int length = storage .length ();
@@ -270,14 +272,15 @@ PArray arraySequenceInitializer(VirtualFrame frame, Object cls, TruffleString ty
270
272
}
271
273
272
274
@ Specialization (guards = {"!isBytes(initializer)" , "!isString(initializer)" , "!isPSequence(initializer)" })
275
+ @ SuppressWarnings ("truffle-static-method" )
273
276
PArray arrayIteratorInitializer (VirtualFrame frame , Object cls , TruffleString typeCode , Object initializer ,
274
277
@ Bind ("this" ) Node inliningTarget ,
275
278
@ Cached PyObjectGetIter getIter ,
276
- @ Cached ArrayNodes .PutValueNode putValueNode ,
279
+ @ Shared @ Cached ArrayNodes .PutValueNode putValueNode ,
277
280
@ Cached GetNextNode nextNode ,
278
281
@ Cached IsBuiltinObjectProfile errorProfile ,
279
- @ Cached TruffleString .CodePointLengthNode lengthNode ,
280
- @ Cached TruffleString .CodePointAtIndexNode atIndexNode ) {
282
+ @ Shared @ Cached TruffleString .CodePointLengthNode lengthNode ,
283
+ @ Shared @ Cached TruffleString .CodePointAtIndexNode atIndexNode ) {
281
284
Object iter = getIter .execute (frame , initializer );
282
285
283
286
BufferFormat format = getFormatChecked (typeCode , lengthNode , atIndexNode );
@@ -348,17 +351,17 @@ private PythonObjectFactory getFactory() {
348
351
@ ArgumentClinic (name = "mformatCode" , conversion = ArgumentClinic .ClinicConversion .Index )
349
352
@ GenerateNodeFactory
350
353
abstract static class ArrayReconstructorNode extends PythonClinicBuiltinNode {
351
- @ Specialization (guards = "mformatCode == cachedCode" )
354
+ @ Specialization (guards = "mformatCode == cachedCode" , limit = "3" )
352
355
Object reconstructCached (VirtualFrame frame , Object arrayType , TruffleString typeCode , @ SuppressWarnings ("unused" ) int mformatCode , PBytes bytes ,
353
356
@ Cached ("mformatCode" ) int cachedCode ,
354
357
@ Cached ("createIdentityProfile()" ) ValueProfile formatProfile ,
355
- @ Cached PyObjectCallMethodObjArgs callDecode ,
356
- @ Cached ArrayBuiltins .FromBytesNode fromBytesNode ,
357
- @ Cached ArrayBuiltins .FromUnicodeNode fromUnicodeNode ,
358
- @ Cached IsSubtypeNode isSubtypeNode ,
359
- @ Cached ArrayBuiltins .ByteSwapNode byteSwapNode ,
360
- @ Cached TruffleString .CodePointLengthNode lengthNode ,
361
- @ Cached TruffleString .CodePointAtIndexNode atIndexNode ) {
358
+ @ Exclusive @ Cached PyObjectCallMethodObjArgs callDecode ,
359
+ @ Exclusive @ Cached ArrayBuiltins .FromBytesNode fromBytesNode ,
360
+ @ Exclusive @ Cached ArrayBuiltins .FromUnicodeNode fromUnicodeNode ,
361
+ @ Exclusive @ Cached IsSubtypeNode isSubtypeNode ,
362
+ @ Exclusive @ Cached ArrayBuiltins .ByteSwapNode byteSwapNode ,
363
+ @ Exclusive @ Cached TruffleString .CodePointLengthNode lengthNode ,
364
+ @ Exclusive @ Cached TruffleString .CodePointAtIndexNode atIndexNode ) {
362
365
BufferFormat format = BufferFormat .forArray (typeCode , lengthNode , atIndexNode );
363
366
if (format == null ) {
364
367
throw raise (ValueError , ErrorMessages .BAD_TYPECODE );
@@ -368,13 +371,13 @@ Object reconstructCached(VirtualFrame frame, Object arrayType, TruffleString typ
368
371
369
372
@ Specialization (replaces = "reconstructCached" )
370
373
Object reconstruct (VirtualFrame frame , Object arrayType , TruffleString typeCode , int mformatCode , PBytes bytes ,
371
- @ Cached PyObjectCallMethodObjArgs callDecode ,
372
- @ Cached ArrayBuiltins .FromBytesNode fromBytesNode ,
373
- @ Cached ArrayBuiltins .FromUnicodeNode fromUnicodeNode ,
374
- @ Cached IsSubtypeNode isSubtypeNode ,
375
- @ Cached ArrayBuiltins .ByteSwapNode byteSwapNode ,
376
- @ Cached TruffleString .CodePointLengthNode lengthNode ,
377
- @ Cached TruffleString .CodePointAtIndexNode atIndexNode ) {
374
+ @ Exclusive @ Cached PyObjectCallMethodObjArgs callDecode ,
375
+ @ Exclusive @ Cached ArrayBuiltins .FromBytesNode fromBytesNode ,
376
+ @ Exclusive @ Cached ArrayBuiltins .FromUnicodeNode fromUnicodeNode ,
377
+ @ Exclusive @ Cached IsSubtypeNode isSubtypeNode ,
378
+ @ Exclusive @ Cached ArrayBuiltins .ByteSwapNode byteSwapNode ,
379
+ @ Exclusive @ Cached TruffleString .CodePointLengthNode lengthNode ,
380
+ @ Exclusive @ Cached TruffleString .CodePointAtIndexNode atIndexNode ) {
378
381
BufferFormat format = BufferFormat .forArray (typeCode , lengthNode , atIndexNode );
379
382
if (format == null ) {
380
383
throw raise (ValueError , ErrorMessages .BAD_TYPECODE );
0 commit comments