54
54
import static com .oracle .graal .python .nodes .SpecialMethodNames .__REPR__ ;
55
55
import static com .oracle .graal .python .nodes .SpecialMethodNames .__SETITEM__ ;
56
56
57
- import java .lang .ref .Reference ;
58
57
import java .util .Arrays ;
59
58
import java .util .List ;
60
59
60
+ import com .oracle .graal .python .PythonLanguage ;
61
61
import com .oracle .graal .python .annotations .ArgumentClinic ;
62
62
import com .oracle .graal .python .builtins .Builtin ;
63
63
import com .oracle .graal .python .builtins .CoreFunctions ;
91
91
import com .oracle .graal .python .runtime .AsyncHandler ;
92
92
import com .oracle .graal .python .runtime .ExecutionContext ;
93
93
import com .oracle .graal .python .runtime .PythonContext ;
94
- import com .oracle .graal .python .runtime .PythonCore ;
95
94
import com .oracle .graal .python .runtime .exception .PException ;
96
95
import com .oracle .graal .python .runtime .sequence .storage .IntSequenceStorage ;
97
96
import com .oracle .graal .python .runtime .sequence .storage .SequenceStorage ;
101
100
import com .oracle .truffle .api .CompilerDirectives .TruffleBoundary ;
102
101
import com .oracle .truffle .api .dsl .Cached ;
103
102
import com .oracle .truffle .api .dsl .Cached .Shared ;
103
+ import com .oracle .truffle .api .dsl .CachedContext ;
104
104
import com .oracle .truffle .api .dsl .Fallback ;
105
105
import com .oracle .truffle .api .dsl .GenerateNodeFactory ;
106
106
import com .oracle .truffle .api .dsl .NodeFactory ;
@@ -146,33 +146,6 @@ public void execute(PythonContext context) {
146
146
}
147
147
}
148
148
149
- @ Override
150
- public void postInitialize (PythonCore core ) {
151
- super .postInitialize (core );
152
- MemoryViewNodes .BufferReferences bufferReferences = new MemoryViewNodes .BufferReferences ();
153
- core .lookupType (PythonBuiltinClassType .PMemoryView ).setAttribute (bufferReferencesKey , bufferReferences );
154
- core .getContext ().registerAsyncAction (() -> {
155
- Reference <? extends PMemoryView > reference = null ;
156
- try {
157
- reference = bufferReferences .queue .remove ();
158
- } catch (InterruptedException e ) {
159
- Thread .currentThread ().interrupt ();
160
- }
161
- if (reference instanceof BufferReference ) {
162
- BufferReference bufferReference = (BufferReference ) reference ;
163
- bufferReferences .set .remove (bufferReference );
164
- if (bufferReference .isReleased ()) {
165
- return null ;
166
- }
167
- ManagedBuffer buffer = bufferReference .getManagedBuffer ();
168
- if (buffer .decrementExports () == 0 ) {
169
- return new NativeBufferReleaseCallback (bufferReference );
170
- }
171
- }
172
- return null ;
173
- });
174
- }
175
-
176
149
@ Builtin (name = __GETITEM__ , minNumOfPositionalArgs = 2 )
177
150
@ GenerateNodeFactory
178
151
abstract static class GetItemNode extends PythonBinaryBuiltinNode {
@@ -192,7 +165,7 @@ Object getitemSlice(PMemoryView self, PSlice slice,
192
165
@ Cached SliceLiteralNode .SliceUnpack sliceUnpack ,
193
166
@ Cached SliceLiteralNode .AdjustIndices adjustIndices ,
194
167
@ Cached MemoryViewNodes .InitFlagsNode initFlagsNode ,
195
- @ Cached MemoryViewNodes . GetBufferReferences getQueue ) {
168
+ @ CachedContext ( PythonLanguage . class ) PythonContext context ) {
196
169
self .checkReleased (this );
197
170
if (zeroDimProfile .profile (self .getDimensions () == 0 )) {
198
171
throw raise (TypeError , ErrorMessages .INVALID_INDEXING_OF_0_DIM_MEMORY );
@@ -209,7 +182,7 @@ Object getitemSlice(PMemoryView self, PSlice slice,
209
182
int [] suboffsets = self .getBufferSuboffsets ();
210
183
int length = self .getLength () - (shape [0 ] - newShape [0 ]) * self .getItemSize ();
211
184
int flags = initFlagsNode .execute (self .getDimensions (), self .getItemSize (), newShape , newStrides , suboffsets );
212
- return factory ().createMemoryView (getQueue . execute () , self .getManagedBuffer (), self .getOwner (), length , self .isReadOnly (),
185
+ return factory ().createMemoryView (context , self .getManagedBuffer (), self .getOwner (), length , self .isReadOnly (),
213
186
self .getItemSize (), self .getFormat (), self .getFormatString (), self .getDimensions (), self .getBufferPointer (),
214
187
self .getOffset () + sliceInfo .start * strides [0 ], newShape , newStrides , suboffsets , flags );
215
188
}
@@ -565,9 +538,9 @@ protected ArgumentClinicProvider getArgumentClinic() {
565
538
public abstract static class ToReadonlyNode extends PythonUnaryBuiltinNode {
566
539
@ Specialization
567
540
PMemoryView toreadonly (PMemoryView self ,
568
- @ Cached MemoryViewNodes . GetBufferReferences getQueue ) {
541
+ @ CachedContext ( PythonLanguage . class ) PythonContext context ) {
569
542
self .checkReleased (this );
570
- return factory ().createMemoryView (getQueue . execute () , self .getManagedBuffer (), self .getOwner (), self .getLength (), true ,
543
+ return factory ().createMemoryView (context , self .getManagedBuffer (), self .getOwner (), self .getLength (), true ,
571
544
self .getItemSize (), self .getFormat (), self .getFormatString (), self .getDimensions (), self .getBufferPointer (),
572
545
self .getOffset (), self .getBufferShape (), self .getBufferStrides (), self .getBufferSuboffsets (), self .getFlags ());
573
546
}
@@ -580,14 +553,14 @@ public abstract static class CastNode extends PythonTernaryClinicBuiltinNode {
580
553
581
554
@ Specialization
582
555
PMemoryView cast (PMemoryView self , String formatString , @ SuppressWarnings ("unused" ) PNone none ,
583
- @ Shared ("getQueue " ) @ Cached MemoryViewNodes . GetBufferReferences getQueue ) {
556
+ @ Shared ("c " ) @ CachedContext ( PythonLanguage . class ) PythonContext context ) {
584
557
self .checkReleased (this );
585
- return doCast (self , formatString , 1 , null , getQueue . execute () );
558
+ return doCast (self , formatString , 1 , null , context );
586
559
}
587
560
588
561
@ Specialization (guards = "isPTuple(shapeObj) || isList(shapeObj)" )
589
562
PMemoryView cast (PMemoryView self , String formatString , Object shapeObj ,
590
- @ Shared ("getQueue " ) @ Cached MemoryViewNodes . GetBufferReferences getQueue ,
563
+ @ Shared ("c " ) @ CachedContext ( PythonLanguage . class ) PythonContext context ,
591
564
@ Cached SequenceNodes .GetSequenceStorageNode getSequenceStorageNode ,
592
565
@ Cached SequenceStorageNodes .LenNode lenNode ,
593
566
@ Cached SequenceStorageNodes .GetItemScalarNode getItemScalarNode ,
@@ -602,7 +575,7 @@ PMemoryView cast(PMemoryView self, String formatString, Object shapeObj,
602
575
throw raise (TypeError , ErrorMessages .MEMORYVIEW_CAST_ELEMENTS_MUST_BE_POSITIVE_INTEGERS );
603
576
}
604
577
}
605
- return doCast (self , formatString , ndim , shape , getQueue . execute () );
578
+ return doCast (self , formatString , ndim , shape , context );
606
579
}
607
580
608
581
@ Specialization (guards = {"!isPTuple(shape)" , "!isList(shape)" , "!isPNone(shape)" })
@@ -611,7 +584,7 @@ PMemoryView error(PMemoryView self, String format, Object shape) {
611
584
throw raise (TypeError , ErrorMessages .ARG_S_MUST_BE_A_LIST_OR_TUPLE , "shape" );
612
585
}
613
586
614
- private PMemoryView doCast (PMemoryView self , String formatString , int ndim , int [] shape , MemoryViewNodes . BufferReferences refQueue ) {
587
+ private PMemoryView doCast (PMemoryView self , String formatString , int ndim , int [] shape , PythonContext context ) {
615
588
if (!self .isCContiguous ()) {
616
589
throw raise (TypeError , ErrorMessages .MEMORYVIEW_CASTS_RESTRICTED_TO_C_CONTIGUOUS );
617
590
}
@@ -664,7 +637,7 @@ private PMemoryView doCast(PMemoryView self, String formatString, int ndim, int[
664
637
}
665
638
newStrides = PMemoryView .initStridesFromShape (ndim , itemsize , shape );
666
639
}
667
- return factory ().createMemoryView (refQueue , self .getManagedBuffer (), self .getOwner (), self .getLength (), self .isReadOnly (),
640
+ return factory ().createMemoryView (context , self .getManagedBuffer (), self .getOwner (), self .getLength (), self .isReadOnly (),
668
641
itemsize , format , formatString , ndim , self .getBufferPointer (),
669
642
self .getOffset (), newShape , newStrides , null , flags );
670
643
}
0 commit comments