Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: src/typedarray.js

Issue 1126313003: Make one copy for all TypedArray methods (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Adding test and fixing failures (TypedArray.from and TypedArray.prototype.subarray) Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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() { 5 (function() {
6 6
7 "use strict"; 7 "use strict";
8 8
9 %CheckIsBootstrapping(); 9 %CheckIsBootstrapping();
10 10
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 } 146 }
147 return %_ArrayBufferViewGetByteOffset(this); 147 return %_ArrayBufferViewGetByteOffset(this);
148 } 148 }
149 149
150 function NAME_GetLength() { 150 function NAME_GetLength() {
151 if (!(%_ClassOf(this) === 'NAME')) { 151 if (!(%_ClassOf(this) === 'NAME')) {
152 throw MakeTypeError(kIncompatibleMethodReceiver, "NAME.length", this); 152 throw MakeTypeError(kIncompatibleMethodReceiver, "NAME.length", this);
153 } 153 }
154 return %_TypedArrayGetLength(this); 154 return %_TypedArrayGetLength(this);
155 } 155 }
156 endmacro
156 157
157 function NAMESubArray(begin, end) { 158 function TypedArraySubArray(begin, end) {
adamk 2015/05/08 01:13:34 We probably want to change this in the future, but
158 if (!(%_ClassOf(this) === 'NAME')) { 159 if (!%IsTypedArray(this)) {
159 throw MakeTypeError(kIncompatibleMethodReceiver, "NAME.subarray", this); 160 throw MakeTypeError('not_typed_array', []);
160 } 161 }
161 var beginInt = TO_INTEGER(begin); 162 var beginInt = TO_INTEGER(begin);
162 if (!IS_UNDEFINED(end)) { 163 if (!IS_UNDEFINED(end)) {
163 end = TO_INTEGER(end); 164 end = TO_INTEGER(end);
164 } 165 }
165 166
166 var srcLength = %_TypedArrayGetLength(this); 167 var srcLength = %_TypedArrayGetLength(this);
167 if (beginInt < 0) { 168 if (beginInt < 0) {
168 beginInt = $max(0, srcLength + beginInt); 169 beginInt = $max(0, srcLength + beginInt);
169 } else { 170 } else {
170 beginInt = $min(srcLength, beginInt); 171 beginInt = $min(srcLength, beginInt);
171 } 172 }
172 173
173 var endInt = IS_UNDEFINED(end) ? srcLength : end; 174 var endInt = IS_UNDEFINED(end) ? srcLength : end;
174 if (endInt < 0) { 175 if (endInt < 0) {
175 endInt = $max(0, srcLength + endInt); 176 endInt = $max(0, srcLength + endInt);
176 } else { 177 } else {
177 endInt = $min(endInt, srcLength); 178 endInt = $min(endInt, srcLength);
178 } 179 }
179 if (endInt < beginInt) { 180 if (endInt < beginInt) {
180 endInt = beginInt; 181 endInt = beginInt;
181 } 182 }
182 var newLength = endInt - beginInt; 183 var newLength = endInt - beginInt;
183 var beginByteOffset = 184 var beginByteOffset =
184 %_ArrayBufferViewGetByteOffset(this) + beginInt * ELEMENT_SIZE; 185 %_ArrayBufferViewGetByteOffset(this) + beginInt * this.BYTES_PER_ELEMENT;
185 return new GlobalNAME(%TypedArrayGetBuffer(this), 186 return new this.constructor(%TypedArrayGetBuffer(this),
186 beginByteOffset, newLength); 187 beginByteOffset, newLength);
187 } 188 }
188 endmacro
189 189
190 TYPED_ARRAYS(TYPED_ARRAY_CONSTRUCTOR) 190 TYPED_ARRAYS(TYPED_ARRAY_CONSTRUCTOR)
191 191
192 192
193 function TypedArraySetFromArrayLike(target, source, sourceLength, offset) { 193 function TypedArraySetFromArrayLike(target, source, sourceLength, offset) {
194 if (offset > 0) { 194 if (offset > 0) {
195 for (var i = 0; i < sourceLength; i++) { 195 for (var i = 0; i < sourceLength; i++) {
196 target[offset + i] = source[i]; 196 target[offset + i] = source[i];
197 } 197 }
198 } 198 }
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
315 $installGetter(GlobalNAME.prototype, "buffer", NAME_GetBuffer); 315 $installGetter(GlobalNAME.prototype, "buffer", NAME_GetBuffer);
316 $installGetter(GlobalNAME.prototype, "byteOffset", NAME_GetByteOffset, 316 $installGetter(GlobalNAME.prototype, "byteOffset", NAME_GetByteOffset,
317 DONT_ENUM | DONT_DELETE); 317 DONT_ENUM | DONT_DELETE);
318 $installGetter(GlobalNAME.prototype, "byteLength", NAME_GetByteLength, 318 $installGetter(GlobalNAME.prototype, "byteLength", NAME_GetByteLength,
319 DONT_ENUM | DONT_DELETE); 319 DONT_ENUM | DONT_DELETE);
320 $installGetter(GlobalNAME.prototype, "length", NAME_GetLength, 320 $installGetter(GlobalNAME.prototype, "length", NAME_GetLength,
321 DONT_ENUM | DONT_DELETE); 321 DONT_ENUM | DONT_DELETE);
322 $installGetter(GlobalNAME.prototype, symbolToStringTag, 322 $installGetter(GlobalNAME.prototype, symbolToStringTag,
323 TypedArrayGetToStringTag); 323 TypedArrayGetToStringTag);
324 $installFunctions(GlobalNAME.prototype, DONT_ENUM, [ 324 $installFunctions(GlobalNAME.prototype, DONT_ENUM, [
325 "subarray", NAMESubArray, 325 "subarray", TypedArraySubArray,
326 "set", TypedArraySet 326 "set", TypedArraySet
327 ]); 327 ]);
328 endmacro 328 endmacro
329 329
330 TYPED_ARRAYS(SETUP_TYPED_ARRAY) 330 TYPED_ARRAYS(SETUP_TYPED_ARRAY)
331 331
332 // --------------------------- DataView ----------------------------- 332 // --------------------------- DataView -----------------------------
333 333
334 function DataViewConstructor(buffer, byteOffset, byteLength) { // length = 3 334 function DataViewConstructor(buffer, byteOffset, byteLength) { // length = 3
335 if (%_IsConstructCall()) { 335 if (%_IsConstructCall()) {
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
451 "setUint32", DataViewSetUint32JS, 451 "setUint32", DataViewSetUint32JS,
452 452
453 "getFloat32", DataViewGetFloat32JS, 453 "getFloat32", DataViewGetFloat32JS,
454 "setFloat32", DataViewSetFloat32JS, 454 "setFloat32", DataViewSetFloat32JS,
455 455
456 "getFloat64", DataViewGetFloat64JS, 456 "getFloat64", DataViewGetFloat64JS,
457 "setFloat64", DataViewSetFloat64JS 457 "setFloat64", DataViewSetFloat64JS
458 ]); 458 ]);
459 459
460 })(); 460 })();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698