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(global, utils) { | 5 (function(global, utils) { |
6 | 6 |
7 "use strict"; | 7 "use strict"; |
8 | 8 |
9 %CheckIsBootstrapping(); | 9 %CheckIsBootstrapping(); |
10 | 10 |
11 // ------------------------------------------------------------------- | 11 // ------------------------------------------------------------------- |
12 // Imports | 12 // Imports |
13 | 13 |
14 var GlobalArray = global.Array; | 14 var GlobalArray = global.Array; |
15 var GlobalArrayBuffer = global.ArrayBuffer; | 15 var GlobalArrayBuffer = global.ArrayBuffer; |
16 var GlobalDataView = global.DataView; | 16 var GlobalDataView = global.DataView; |
17 var GlobalObject = global.Object; | 17 var GlobalObject = global.Object; |
| 18 var iteratorSymbol = utils.ImportNow("iterator_symbol"); |
| 19 var toStringTagSymbol = utils.ImportNow("to_string_tag_symbol"); |
18 | 20 |
19 macro TYPED_ARRAYS(FUNCTION) | 21 macro TYPED_ARRAYS(FUNCTION) |
20 // arrayIds below should be synchronized with Runtime_TypedArrayInitialize. | 22 // arrayIds below should be synchronized with Runtime_TypedArrayInitialize. |
21 FUNCTION(1, Uint8Array, 1) | 23 FUNCTION(1, Uint8Array, 1) |
22 FUNCTION(2, Int8Array, 1) | 24 FUNCTION(2, Int8Array, 1) |
23 FUNCTION(3, Uint16Array, 2) | 25 FUNCTION(3, Uint16Array, 2) |
24 FUNCTION(4, Int16Array, 2) | 26 FUNCTION(4, Int16Array, 2) |
25 FUNCTION(5, Uint32Array, 4) | 27 FUNCTION(5, Uint32Array, 4) |
26 FUNCTION(6, Int32Array, 4) | 28 FUNCTION(6, Int32Array, 4) |
27 FUNCTION(7, Float32Array, 4) | 29 FUNCTION(7, Float32Array, 4) |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
140 // observable with getters, so instead, we call the function which | 142 // observable with getters, so instead, we call the function which |
141 // was already looked up, and wrap it in another iterable. The | 143 // was already looked up, and wrap it in another iterable. The |
142 // __proto__ of the new iterable is set to null to avoid any chance | 144 // __proto__ of the new iterable is set to null to avoid any chance |
143 // of modifications to Object.prototype being observable here. | 145 // of modifications to Object.prototype being observable here. |
144 var iterator = %_CallFunction(iterable, iteratorFn); | 146 var iterator = %_CallFunction(iterable, iteratorFn); |
145 var newIterable = { | 147 var newIterable = { |
146 __proto__: null | 148 __proto__: null |
147 }; | 149 }; |
148 // TODO(littledan): Computed properties don't work yet in nosnap. | 150 // TODO(littledan): Computed properties don't work yet in nosnap. |
149 // Rephrase when they do. | 151 // Rephrase when they do. |
150 newIterable[symbolIterator] = function() { return iterator; } | 152 newIterable[iteratorSymbol] = function() { return iterator; } |
151 for (var value of newIterable) { | 153 for (var value of newIterable) { |
152 list.push(value); | 154 list.push(value); |
153 } | 155 } |
154 NAMEConstructByArrayLike(obj, list); | 156 NAMEConstructByArrayLike(obj, list); |
155 } | 157 } |
156 | 158 |
157 function NAMEConstructor(arg1, arg2, arg3) { | 159 function NAMEConstructor(arg1, arg2, arg3) { |
158 if (%_IsConstructCall()) { | 160 if (%_IsConstructCall()) { |
159 if (IS_ARRAYBUFFER(arg1) || IS_SHAREDARRAYBUFFER(arg1)) { | 161 if (IS_ARRAYBUFFER(arg1) || IS_SHAREDARRAYBUFFER(arg1)) { |
160 NAMEConstructByArrayBuffer(this, arg1, arg2, arg3); | 162 NAMEConstructByArrayBuffer(this, arg1, arg2, arg3); |
161 } else if (IS_NUMBER(arg1) || IS_STRING(arg1) || | 163 } else if (IS_NUMBER(arg1) || IS_STRING(arg1) || |
162 IS_BOOLEAN(arg1) || IS_UNDEFINED(arg1)) { | 164 IS_BOOLEAN(arg1) || IS_UNDEFINED(arg1)) { |
163 NAMEConstructByLength(this, arg1); | 165 NAMEConstructByLength(this, arg1); |
164 } else { | 166 } else { |
165 var iteratorFn = arg1[symbolIterator]; | 167 var iteratorFn = arg1[iteratorSymbol]; |
166 if (IS_UNDEFINED(iteratorFn) || iteratorFn === $arrayValues) { | 168 if (IS_UNDEFINED(iteratorFn) || iteratorFn === $arrayValues) { |
167 NAMEConstructByArrayLike(this, arg1); | 169 NAMEConstructByArrayLike(this, arg1); |
168 } else { | 170 } else { |
169 NAMEConstructByIterable(this, arg1, iteratorFn); | 171 NAMEConstructByIterable(this, arg1, iteratorFn); |
170 } | 172 } |
171 } | 173 } |
172 } else { | 174 } else { |
173 throw MakeTypeError(kConstructorNotFunction, "NAME") | 175 throw MakeTypeError(kConstructorNotFunction, "NAME") |
174 } | 176 } |
175 } | 177 } |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
361 %AddNamedProperty(GlobalNAME.prototype, | 363 %AddNamedProperty(GlobalNAME.prototype, |
362 "BYTES_PER_ELEMENT", ELEMENT_SIZE, | 364 "BYTES_PER_ELEMENT", ELEMENT_SIZE, |
363 READ_ONLY | DONT_ENUM | DONT_DELETE); | 365 READ_ONLY | DONT_ENUM | DONT_DELETE); |
364 utils.InstallGetter(GlobalNAME.prototype, "buffer", NAME_GetBuffer); | 366 utils.InstallGetter(GlobalNAME.prototype, "buffer", NAME_GetBuffer); |
365 utils.InstallGetter(GlobalNAME.prototype, "byteOffset", NAME_GetByteOffset, | 367 utils.InstallGetter(GlobalNAME.prototype, "byteOffset", NAME_GetByteOffset, |
366 DONT_ENUM | DONT_DELETE); | 368 DONT_ENUM | DONT_DELETE); |
367 utils.InstallGetter(GlobalNAME.prototype, "byteLength", NAME_GetByteLength, | 369 utils.InstallGetter(GlobalNAME.prototype, "byteLength", NAME_GetByteLength, |
368 DONT_ENUM | DONT_DELETE); | 370 DONT_ENUM | DONT_DELETE); |
369 utils.InstallGetter(GlobalNAME.prototype, "length", NAME_GetLength, | 371 utils.InstallGetter(GlobalNAME.prototype, "length", NAME_GetLength, |
370 DONT_ENUM | DONT_DELETE); | 372 DONT_ENUM | DONT_DELETE); |
371 utils.InstallGetter(GlobalNAME.prototype, symbolToStringTag, | 373 utils.InstallGetter(GlobalNAME.prototype, toStringTagSymbol, |
372 TypedArrayGetToStringTag); | 374 TypedArrayGetToStringTag); |
373 utils.InstallFunctions(GlobalNAME.prototype, DONT_ENUM, [ | 375 utils.InstallFunctions(GlobalNAME.prototype, DONT_ENUM, [ |
374 "subarray", NAMESubArray, | 376 "subarray", NAMESubArray, |
375 "set", TypedArraySet | 377 "set", TypedArraySet |
376 ]); | 378 ]); |
377 endmacro | 379 endmacro |
378 | 380 |
379 TYPED_ARRAYS(SETUP_TYPED_ARRAY) | 381 TYPED_ARRAYS(SETUP_TYPED_ARRAY) |
380 | 382 |
381 // --------------------------- DataView ----------------------------- | 383 // --------------------------- DataView ----------------------------- |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
467 | 469 |
468 DATA_VIEW_TYPES(DATA_VIEW_GETTER_SETTER) | 470 DATA_VIEW_TYPES(DATA_VIEW_GETTER_SETTER) |
469 | 471 |
470 // Setup the DataView constructor. | 472 // Setup the DataView constructor. |
471 %SetCode(GlobalDataView, DataViewConstructor); | 473 %SetCode(GlobalDataView, DataViewConstructor); |
472 %FunctionSetPrototype(GlobalDataView, new GlobalObject); | 474 %FunctionSetPrototype(GlobalDataView, new GlobalObject); |
473 | 475 |
474 // Set up constructor property on the DataView prototype. | 476 // Set up constructor property on the DataView prototype. |
475 %AddNamedProperty(GlobalDataView.prototype, "constructor", GlobalDataView, | 477 %AddNamedProperty(GlobalDataView.prototype, "constructor", GlobalDataView, |
476 DONT_ENUM); | 478 DONT_ENUM); |
477 %AddNamedProperty(GlobalDataView.prototype, symbolToStringTag, "DataView", | 479 %AddNamedProperty(GlobalDataView.prototype, toStringTagSymbol, "DataView", |
478 READ_ONLY|DONT_ENUM); | 480 READ_ONLY|DONT_ENUM); |
479 | 481 |
480 utils.InstallGetter(GlobalDataView.prototype, "buffer", DataViewGetBufferJS); | 482 utils.InstallGetter(GlobalDataView.prototype, "buffer", DataViewGetBufferJS); |
481 utils.InstallGetter(GlobalDataView.prototype, "byteOffset", | 483 utils.InstallGetter(GlobalDataView.prototype, "byteOffset", |
482 DataViewGetByteOffset); | 484 DataViewGetByteOffset); |
483 utils.InstallGetter(GlobalDataView.prototype, "byteLength", | 485 utils.InstallGetter(GlobalDataView.prototype, "byteLength", |
484 DataViewGetByteLength); | 486 DataViewGetByteLength); |
485 | 487 |
486 utils.InstallFunctions(GlobalDataView.prototype, DONT_ENUM, [ | 488 utils.InstallFunctions(GlobalDataView.prototype, DONT_ENUM, [ |
487 "getInt8", DataViewGetInt8JS, | 489 "getInt8", DataViewGetInt8JS, |
(...skipping 15 matching lines...) Expand all Loading... |
503 "setUint32", DataViewSetUint32JS, | 505 "setUint32", DataViewSetUint32JS, |
504 | 506 |
505 "getFloat32", DataViewGetFloat32JS, | 507 "getFloat32", DataViewGetFloat32JS, |
506 "setFloat32", DataViewSetFloat32JS, | 508 "setFloat32", DataViewSetFloat32JS, |
507 | 509 |
508 "getFloat64", DataViewGetFloat64JS, | 510 "getFloat64", DataViewGetFloat64JS, |
509 "setFloat64", DataViewSetFloat64JS | 511 "setFloat64", DataViewSetFloat64JS |
510 ]); | 512 ]); |
511 | 513 |
512 }) | 514 }) |
OLD | NEW |