OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 (function() { | |
6 | |
7 "use strict"; | 5 "use strict"; |
8 | 6 |
9 %CheckIsBootstrapping(); | 7 // This file relies on the fact that the following declaration has been made |
| 8 // in runtime.js: |
| 9 // var $Array = global.Array; |
| 10 var $ArrayBuffer = global.ArrayBuffer; |
10 | 11 |
11 var GlobalArray = global.Array; | |
12 var GlobalArrayBuffer = global.ArrayBuffer; | |
13 | 12 |
14 // --------------- Typed Arrays --------------------- | 13 // --------------- Typed Arrays --------------------- |
15 macro TYPED_ARRAYS(FUNCTION) | 14 macro TYPED_ARRAYS(FUNCTION) |
16 // arrayIds below should be synchronized with Runtime_TypedArrayInitialize. | 15 // arrayIds below should be synchronized with Runtime_TypedArrayInitialize. |
17 FUNCTION(1, Uint8Array, 1) | 16 FUNCTION(1, Uint8Array, 1) |
18 FUNCTION(2, Int8Array, 1) | 17 FUNCTION(2, Int8Array, 1) |
19 FUNCTION(3, Uint16Array, 2) | 18 FUNCTION(3, Uint16Array, 2) |
20 FUNCTION(4, Int16Array, 2) | 19 FUNCTION(4, Int16Array, 2) |
21 FUNCTION(5, Uint32Array, 4) | 20 FUNCTION(5, Uint32Array, 4) |
22 FUNCTION(6, Int32Array, 4) | 21 FUNCTION(6, Int32Array, 4) |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
72 } | 71 } |
73 | 72 |
74 function NAMEConstructByLength(obj, length) { | 73 function NAMEConstructByLength(obj, length) { |
75 var l = IS_UNDEFINED(length) ? | 74 var l = IS_UNDEFINED(length) ? |
76 0 : ToPositiveInteger(length, "invalid_typed_array_length"); | 75 0 : ToPositiveInteger(length, "invalid_typed_array_length"); |
77 if (l > %_MaxSmi()) { | 76 if (l > %_MaxSmi()) { |
78 throw MakeRangeError("invalid_typed_array_length"); | 77 throw MakeRangeError("invalid_typed_array_length"); |
79 } | 78 } |
80 var byteLength = l * ELEMENT_SIZE; | 79 var byteLength = l * ELEMENT_SIZE; |
81 if (byteLength > %_TypedArrayMaxSizeInHeap()) { | 80 if (byteLength > %_TypedArrayMaxSizeInHeap()) { |
82 var buffer = new GlobalArrayBuffer(byteLength); | 81 var buffer = new $ArrayBuffer(byteLength); |
83 %_TypedArrayInitialize(obj, ARRAY_ID, buffer, 0, byteLength); | 82 %_TypedArrayInitialize(obj, ARRAY_ID, buffer, 0, byteLength); |
84 } else { | 83 } else { |
85 %_TypedArrayInitialize(obj, ARRAY_ID, null, 0, byteLength); | 84 %_TypedArrayInitialize(obj, ARRAY_ID, null, 0, byteLength); |
86 } | 85 } |
87 } | 86 } |
88 | 87 |
89 function NAMEConstructByArrayLike(obj, arrayLike) { | 88 function NAMEConstructByArrayLike(obj, arrayLike) { |
90 var length = arrayLike.length; | 89 var length = arrayLike.length; |
91 var l = ToPositiveInteger(length, "invalid_typed_array_length"); | 90 var l = ToPositiveInteger(length, "invalid_typed_array_length"); |
92 | 91 |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
237 rightIndex >= leftIndex && targetPtr >= sourcePtr; | 236 rightIndex >= leftIndex && targetPtr >= sourcePtr; |
238 rightIndex--) { | 237 rightIndex--) { |
239 target[offset + rightIndex] = source[rightIndex]; | 238 target[offset + rightIndex] = source[rightIndex]; |
240 targetPtr -= targetElementSize; | 239 targetPtr -= targetElementSize; |
241 sourcePtr -= sourceElementSize; | 240 sourcePtr -= sourceElementSize; |
242 } | 241 } |
243 return rightIndex; | 242 return rightIndex; |
244 } | 243 } |
245 var rightIndex = CopyRightPart(); | 244 var rightIndex = CopyRightPart(); |
246 | 245 |
247 var temp = new GlobalArray(rightIndex + 1 - leftIndex); | 246 var temp = new $Array(rightIndex + 1 - leftIndex); |
248 for (var i = leftIndex; i <= rightIndex; i++) { | 247 for (var i = leftIndex; i <= rightIndex; i++) { |
249 temp[i - leftIndex] = source[i]; | 248 temp[i - leftIndex] = source[i]; |
250 } | 249 } |
251 for (i = leftIndex; i <= rightIndex; i++) { | 250 for (i = leftIndex; i <= rightIndex; i++) { |
252 target[offset + i] = temp[i - leftIndex]; | 251 target[offset + i] = temp[i - leftIndex]; |
253 } | 252 } |
254 } | 253 } |
255 | 254 |
256 function TypedArraySet(obj, offset) { | 255 function TypedArraySet(obj, offset) { |
257 var intOffset = IS_UNDEFINED(offset) ? 0 : TO_INTEGER(offset); | 256 var intOffset = IS_UNDEFINED(offset) ? 0 : TO_INTEGER(offset); |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
294 | 293 |
295 function TypedArrayGetToStringTag() { | 294 function TypedArrayGetToStringTag() { |
296 if (!%IsTypedArray(this)) return; | 295 if (!%IsTypedArray(this)) return; |
297 var name = %_ClassOf(this); | 296 var name = %_ClassOf(this); |
298 if (IS_UNDEFINED(name)) return; | 297 if (IS_UNDEFINED(name)) return; |
299 return name; | 298 return name; |
300 } | 299 } |
301 | 300 |
302 // ------------------------------------------------------------------- | 301 // ------------------------------------------------------------------- |
303 | 302 |
| 303 function SetupTypedArrays() { |
304 macro SETUP_TYPED_ARRAY(ARRAY_ID, NAME, ELEMENT_SIZE) | 304 macro SETUP_TYPED_ARRAY(ARRAY_ID, NAME, ELEMENT_SIZE) |
305 %CheckIsBootstrapping(); | 305 %CheckIsBootstrapping(); |
306 %SetCode(global.NAME, NAMEConstructor); | 306 %SetCode(global.NAME, NAMEConstructor); |
307 %FunctionSetPrototype(global.NAME, new $Object()); | 307 %FunctionSetPrototype(global.NAME, new $Object()); |
308 | 308 |
309 %AddNamedProperty(global.NAME, "BYTES_PER_ELEMENT", ELEMENT_SIZE, | 309 %AddNamedProperty(global.NAME, "BYTES_PER_ELEMENT", ELEMENT_SIZE, |
310 READ_ONLY | DONT_ENUM | DONT_DELETE); | 310 READ_ONLY | DONT_ENUM | DONT_DELETE); |
311 %AddNamedProperty(global.NAME.prototype, | 311 %AddNamedProperty(global.NAME.prototype, |
312 "constructor", global.NAME, DONT_ENUM); | 312 "constructor", global.NAME, DONT_ENUM); |
313 %AddNamedProperty(global.NAME.prototype, | 313 %AddNamedProperty(global.NAME.prototype, |
314 "BYTES_PER_ELEMENT", ELEMENT_SIZE, | 314 "BYTES_PER_ELEMENT", ELEMENT_SIZE, |
315 READ_ONLY | DONT_ENUM | DONT_DELETE); | 315 READ_ONLY | DONT_ENUM | DONT_DELETE); |
316 InstallGetter(global.NAME.prototype, "buffer", NAME_GetBuffer); | 316 InstallGetter(global.NAME.prototype, "buffer", NAME_GetBuffer); |
317 InstallGetter(global.NAME.prototype, "byteOffset", NAME_GetByteOffset, | 317 InstallGetter(global.NAME.prototype, "byteOffset", NAME_GetByteOffset, |
318 DONT_ENUM | DONT_DELETE); | 318 DONT_ENUM | DONT_DELETE); |
319 InstallGetter(global.NAME.prototype, "byteLength", NAME_GetByteLength, | 319 InstallGetter(global.NAME.prototype, "byteLength", NAME_GetByteLength, |
320 DONT_ENUM | DONT_DELETE); | 320 DONT_ENUM | DONT_DELETE); |
321 InstallGetter(global.NAME.prototype, "length", NAME_GetLength, | 321 InstallGetter(global.NAME.prototype, "length", NAME_GetLength, |
322 DONT_ENUM | DONT_DELETE); | 322 DONT_ENUM | DONT_DELETE); |
323 InstallGetter(global.NAME.prototype, symbolToStringTag, | 323 InstallGetter(global.NAME.prototype, symbolToStringTag, |
324 TypedArrayGetToStringTag); | 324 TypedArrayGetToStringTag); |
325 InstallFunctions(global.NAME.prototype, DONT_ENUM, [ | 325 InstallFunctions(global.NAME.prototype, DONT_ENUM, [ |
326 "subarray", NAMESubArray, | 326 "subarray", NAMESubArray, |
327 "set", TypedArraySet | 327 "set", TypedArraySet |
328 ]); | 328 ]); |
329 endmacro | 329 endmacro |
330 | 330 |
331 TYPED_ARRAYS(SETUP_TYPED_ARRAY) | 331 TYPED_ARRAYS(SETUP_TYPED_ARRAY) |
| 332 } |
| 333 |
| 334 SetupTypedArrays(); |
332 | 335 |
333 // --------------------------- DataView ----------------------------- | 336 // --------------------------- DataView ----------------------------- |
334 | 337 |
335 var $DataView = global.DataView; | 338 var $DataView = global.DataView; |
336 | 339 |
337 function DataViewConstructor(buffer, byteOffset, byteLength) { // length = 3 | 340 function DataViewConstructor(buffer, byteOffset, byteLength) { // length = 3 |
338 if (%_IsConstructCall()) { | 341 if (%_IsConstructCall()) { |
339 if (!IS_ARRAYBUFFER(buffer)) { | 342 if (!IS_ARRAYBUFFER(buffer)) { |
340 throw MakeTypeError('data_view_not_array_buffer', []); | 343 throw MakeTypeError('data_view_not_array_buffer', []); |
341 } | 344 } |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
429 } | 432 } |
430 %DataViewSetTYPENAME(this, | 433 %DataViewSetTYPENAME(this, |
431 ToPositiveDataViewOffset(offset), | 434 ToPositiveDataViewOffset(offset), |
432 TO_NUMBER_INLINE(value), | 435 TO_NUMBER_INLINE(value), |
433 !!little_endian); | 436 !!little_endian); |
434 } | 437 } |
435 endmacro | 438 endmacro |
436 | 439 |
437 DATA_VIEW_TYPES(DATA_VIEW_GETTER_SETTER) | 440 DATA_VIEW_TYPES(DATA_VIEW_GETTER_SETTER) |
438 | 441 |
439 // Setup the DataView constructor. | 442 function SetupDataView() { |
440 %SetCode($DataView, DataViewConstructor); | 443 %CheckIsBootstrapping(); |
441 %FunctionSetPrototype($DataView, new $Object); | |
442 | 444 |
443 // Set up constructor property on the DataView prototype. | 445 // Setup the DataView constructor. |
444 %AddNamedProperty($DataView.prototype, "constructor", $DataView, DONT_ENUM); | 446 %SetCode($DataView, DataViewConstructor); |
445 %AddNamedProperty( | 447 %FunctionSetPrototype($DataView, new $Object); |
446 $DataView.prototype, symbolToStringTag, "DataView", READ_ONLY|DONT_ENUM); | |
447 | 448 |
448 InstallGetter($DataView.prototype, "buffer", DataViewGetBufferJS); | 449 // Set up constructor property on the DataView prototype. |
449 InstallGetter($DataView.prototype, "byteOffset", DataViewGetByteOffset); | 450 %AddNamedProperty($DataView.prototype, "constructor", $DataView, DONT_ENUM); |
450 InstallGetter($DataView.prototype, "byteLength", DataViewGetByteLength); | 451 %AddNamedProperty( |
| 452 $DataView.prototype, symbolToStringTag, "DataView", READ_ONLY|DONT_ENUM); |
451 | 453 |
452 InstallFunctions($DataView.prototype, DONT_ENUM, [ | 454 InstallGetter($DataView.prototype, "buffer", DataViewGetBufferJS); |
453 "getInt8", DataViewGetInt8JS, | 455 InstallGetter($DataView.prototype, "byteOffset", DataViewGetByteOffset); |
454 "setInt8", DataViewSetInt8JS, | 456 InstallGetter($DataView.prototype, "byteLength", DataViewGetByteLength); |
455 | 457 |
456 "getUint8", DataViewGetUint8JS, | 458 InstallFunctions($DataView.prototype, DONT_ENUM, [ |
457 "setUint8", DataViewSetUint8JS, | 459 "getInt8", DataViewGetInt8JS, |
| 460 "setInt8", DataViewSetInt8JS, |
458 | 461 |
459 "getInt16", DataViewGetInt16JS, | 462 "getUint8", DataViewGetUint8JS, |
460 "setInt16", DataViewSetInt16JS, | 463 "setUint8", DataViewSetUint8JS, |
461 | 464 |
462 "getUint16", DataViewGetUint16JS, | 465 "getInt16", DataViewGetInt16JS, |
463 "setUint16", DataViewSetUint16JS, | 466 "setInt16", DataViewSetInt16JS, |
464 | 467 |
465 "getInt32", DataViewGetInt32JS, | 468 "getUint16", DataViewGetUint16JS, |
466 "setInt32", DataViewSetInt32JS, | 469 "setUint16", DataViewSetUint16JS, |
467 | 470 |
468 "getUint32", DataViewGetUint32JS, | 471 "getInt32", DataViewGetInt32JS, |
469 "setUint32", DataViewSetUint32JS, | 472 "setInt32", DataViewSetInt32JS, |
470 | 473 |
471 "getFloat32", DataViewGetFloat32JS, | 474 "getUint32", DataViewGetUint32JS, |
472 "setFloat32", DataViewSetFloat32JS, | 475 "setUint32", DataViewSetUint32JS, |
473 | 476 |
474 "getFloat64", DataViewGetFloat64JS, | 477 "getFloat32", DataViewGetFloat32JS, |
475 "setFloat64", DataViewSetFloat64JS | 478 "setFloat32", DataViewSetFloat32JS, |
476 ]); | |
477 | 479 |
478 })(); | 480 "getFloat64", DataViewGetFloat64JS, |
| 481 "setFloat64", DataViewSetFloat64JS |
| 482 ]); |
| 483 } |
| 484 |
| 485 SetupDataView(); |
OLD | NEW |