4040 */
4141package com .oracle .truffle .js .builtins ;
4242
43+ import static com .oracle .truffle .js .runtime .array .TypedArray .BUFFER_TYPE_ARRAY ;
44+ import static com .oracle .truffle .js .runtime .array .TypedArray .BUFFER_TYPE_DIRECT ;
45+ import static com .oracle .truffle .js .runtime .array .TypedArray .BUFFER_TYPE_INTEROP ;
46+ import static com .oracle .truffle .js .runtime .array .TypedArray .BUFFER_TYPE_SHARED ;
47+
4348import java .nio .ByteBuffer ;
4449import java .util .NoSuchElementException ;
4550
@@ -181,19 +186,18 @@ private void checkDetachedBuffer(JSArrayBufferObject buffer) {
181186 protected JSDynamicObject doArrayBuffer (JSDynamicObject newTarget , JSArrayBufferObject arrayBuffer , Object byteOffset0 , Object length0 ,
182187 @ Cached @ Shared InlinedConditionProfile lengthIsUndefined ) {
183188 checkDetachedBuffer (arrayBuffer );
184- return doArrayBufferImpl (arrayBuffer , byteOffset0 , length0 , newTarget , false , false , this , lengthIsUndefined );
189+ return doArrayBufferImpl (arrayBuffer , byteOffset0 , length0 , newTarget , BUFFER_TYPE_ARRAY , this , lengthIsUndefined );
185190 }
186191
187192 @ Specialization (guards = {"!isUndefined(newTarget)" , "isJSDirectArrayBuffer(arrayBuffer)" })
188193 protected JSDynamicObject doDirectArrayBuffer (JSDynamicObject newTarget , JSArrayBufferObject arrayBuffer , Object byteOffset0 , Object length0 ,
189194 @ Cached @ Shared InlinedConditionProfile lengthIsUndefined ) {
190195 checkDetachedBuffer (arrayBuffer );
191- return doArrayBufferImpl (arrayBuffer , byteOffset0 , length0 , newTarget , true , false , this , lengthIsUndefined );
196+ return doArrayBufferImpl (arrayBuffer , byteOffset0 , length0 , newTarget , BUFFER_TYPE_DIRECT , this , lengthIsUndefined );
192197 }
193198
194199 private JSDynamicObject doArrayBufferImpl (JSArrayBufferObject arrayBuffer , Object byteOffset0 , Object length0 , JSDynamicObject newTarget ,
195- boolean direct , boolean isInteropBuffer ,
196- Node node , InlinedConditionProfile lengthIsUndefinedProfile ) {
200+ byte bufferType , Node node , InlinedConditionProfile lengthIsUndefinedProfile ) {
197201 final int elementSize = factory .getBytesPerElement ();
198202
199203 final long byteOffset = toIndex (byteOffset0 );
@@ -227,7 +231,7 @@ private JSDynamicObject doArrayBufferImpl(JSArrayBufferObject arrayBuffer, Objec
227231 }
228232
229233 assert byteOffset <= Integer .MAX_VALUE && length <= Integer .MAX_VALUE ;
230- TypedArray typedArray = factory .createArrayType (direct , byteOffset != 0 , isInteropBuffer );
234+ TypedArray typedArray = factory .createArrayType (bufferType , byteOffset != 0 , length != JSArrayBufferViewBase . AUTO_LENGTH );
231235 return createTypedArray (arrayBuffer , typedArray , (int ) byteOffset , (int ) length , newTarget );
232236 }
233237
@@ -242,7 +246,7 @@ private JSDynamicObject doArrayBufferImpl(JSArrayBufferObject arrayBuffer, Objec
242246 @ Specialization (guards = {"!isUndefined(newTarget)" , "isJSSharedArrayBuffer(arrayBuffer)" })
243247 protected JSDynamicObject doSharedArrayBuffer (JSDynamicObject newTarget , JSArrayBufferObject arrayBuffer , Object byteOffset0 , Object length0 ,
244248 @ Cached @ Shared InlinedConditionProfile lengthIsUndefined ) {
245- return doDirectArrayBuffer ( newTarget , arrayBuffer , byteOffset0 , length0 , lengthIsUndefined );
249+ return doArrayBufferImpl ( arrayBuffer , byteOffset0 , length0 , newTarget , BUFFER_TYPE_SHARED , this , lengthIsUndefined );
246250 }
247251
248252 /**
@@ -256,7 +260,7 @@ protected JSDynamicObject doSharedArrayBuffer(JSDynamicObject newTarget, JSArray
256260 @ Specialization (guards = {"!isUndefined(newTarget)" , "isJSInteropArrayBuffer(arrayBuffer)" })
257261 protected JSDynamicObject doInteropArrayBuffer (JSDynamicObject newTarget , JSArrayBufferObject arrayBuffer , Object byteOffset0 , Object length0 ,
258262 @ Cached @ Shared InlinedConditionProfile lengthIsUndefined ) {
259- return doArrayBufferImpl (arrayBuffer , byteOffset0 , length0 , newTarget , false , true , this , lengthIsUndefined );
263+ return doArrayBufferImpl (arrayBuffer , byteOffset0 , length0 , newTarget , BUFFER_TYPE_INTEROP , this , lengthIsUndefined );
260264 }
261265
262266 /**
@@ -282,7 +286,7 @@ protected JSDynamicObject doTypedArray(JSDynamicObject newTarget, JSTypedArrayOb
282286 throw Errors .createTypeErrorCannotMixBigIntWithOtherTypes (this );
283287 }
284288
285- TypedArray typedArray = factory .createArrayType (getContext ().isOptionDirectByteBuffer (), false );
289+ TypedArray typedArray = factory .createArrayType (getContext ().isOptionDirectByteBuffer () ? BUFFER_TYPE_DIRECT : BUFFER_TYPE_ARRAY , false , true );
286290 JSDynamicObject result = createTypedArray (arrayBuffer , typedArray , 0 , (int ) length , newTarget );
287291
288292 assert typedArray == JSArrayBufferView .typedArrayGetArrayType (result );
@@ -375,7 +379,7 @@ protected JSDynamicObject doObject(JSDynamicObject newTarget, JSObject object, @
375379 SimpleArrayList <Object > values = iterableToListNode .execute (getIteratorFromMethodNode .execute (node , object , usingIterator ));
376380 int len = values .size ();
377381 JSArrayBufferObject arrayBuffer = createTypedArrayBuffer (len );
378- TypedArray typedArray = factory .createArrayType (getContext ().isOptionDirectByteBuffer (), false );
382+ TypedArray typedArray = factory .createArrayType (getContext ().isOptionDirectByteBuffer () ? BUFFER_TYPE_DIRECT : BUFFER_TYPE_ARRAY , false , true );
379383 JSDynamicObject obj = integerIndexedObjectCreate (arrayBuffer , typedArray , 0 , len , proto );
380384 for (int k = 0 ; k < len ; k ++) {
381385 Object kValue = values .get (k );
@@ -388,7 +392,7 @@ protected JSDynamicObject doObject(JSDynamicObject newTarget, JSObject object, @
388392 long len = getLengthNode .executeLong (object );
389393 JSArrayBufferObject arrayBuffer = createTypedArrayBuffer (len );
390394 assert len <= Integer .MAX_VALUE ;
391- TypedArray typedArray = factory .createArrayType (getContext ().isOptionDirectByteBuffer (), false );
395+ TypedArray typedArray = factory .createArrayType (getContext ().isOptionDirectByteBuffer () ? BUFFER_TYPE_DIRECT : BUFFER_TYPE_ARRAY , false , true );
392396 JSDynamicObject obj = integerIndexedObjectCreate (arrayBuffer , typedArray , 0 , (int ) len , proto );
393397 for (int k = 0 ; k < len ; k ++) {
394398 Object kValue = readNode .executeWithTargetAndIndex (object , k );
@@ -409,7 +413,7 @@ protected JSDynamicObject doForeignObject(JSDynamicObject newTarget, Object obje
409413 if (interop .hasBufferElements (object )) {
410414 JSArrayBufferObject arrayBuffer = JSArrayBuffer .createInteropArrayBuffer (getContext (), getRealm (), object );
411415 checkLengthLimit (arrayBuffer .getByteLength (), 1 );
412- return doArrayBufferImpl (arrayBuffer , byteOffset0 , length0 , newTarget , false , true , node , lengthIsUndefined );
416+ return doArrayBufferImpl (arrayBuffer , byteOffset0 , length0 , newTarget , BUFFER_TYPE_INTEROP , node , lengthIsUndefined );
413417 }
414418
415419 long length ;
@@ -482,7 +486,7 @@ private JSArrayBufferObject createTypedArrayBuffer(long length) {
482486 */
483487 private JSDynamicObject createTypedArrayWithLength (long length , JSDynamicObject newTarget ) {
484488 JSArrayBufferObject arrayBuffer = createTypedArrayBuffer (length );
485- TypedArray typedArray = factory .createArrayType (getContext ().isOptionDirectByteBuffer (), false );
489+ TypedArray typedArray = factory .createArrayType (getContext ().isOptionDirectByteBuffer () ? BUFFER_TYPE_DIRECT : BUFFER_TYPE_ARRAY , false , true );
486490 return createTypedArray (arrayBuffer , typedArray , 0 , (int ) length , newTarget );
487491 }
488492
0 commit comments