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

Side by Side Diff: src/typedarray.js

Issue 17153011: DataView implementation. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Self-review Created 7 years, 6 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 // arrayIds below should be synchronized with Runtime_TypedArrayInitialize. 190 // arrayIds below should be synchronized with Runtime_TypedArrayInitialize.
191 SetupTypedArray(1, "Uint8Array", global.Uint8Array, 1); 191 SetupTypedArray(1, "Uint8Array", global.Uint8Array, 1);
192 SetupTypedArray(2, "Int8Array", global.Int8Array, 1); 192 SetupTypedArray(2, "Int8Array", global.Int8Array, 1);
193 SetupTypedArray(3, "Uint16Array", global.Uint16Array, 2); 193 SetupTypedArray(3, "Uint16Array", global.Uint16Array, 2);
194 SetupTypedArray(4, "Int16Array", global.Int16Array, 2); 194 SetupTypedArray(4, "Int16Array", global.Int16Array, 2);
195 SetupTypedArray(5, "Uint32Array", global.Uint32Array, 4); 195 SetupTypedArray(5, "Uint32Array", global.Uint32Array, 4);
196 SetupTypedArray(6, "Int32Array", global.Int32Array, 4); 196 SetupTypedArray(6, "Int32Array", global.Int32Array, 4);
197 SetupTypedArray(7, "Float32Array", global.Float32Array, 4); 197 SetupTypedArray(7, "Float32Array", global.Float32Array, 4);
198 SetupTypedArray(8, "Float64Array", global.Float64Array, 8); 198 SetupTypedArray(8, "Float64Array", global.Float64Array, 8);
199 SetupTypedArray(9, "Uint8ClampedArray", global.Uint8ClampedArray, 1); 199 SetupTypedArray(9, "Uint8ClampedArray", global.Uint8ClampedArray, 1);
200
201
202 // --------------------------- DataView -----------------------------
203
204 var $DataView = global.DataView;
205
206 function DataViewConstructor(buffer, byteOffset, byteLength) { // length = 3
207 if (%_IsConstructCall()) {
208 if (!IS_ARRAYBUFFER(buffer)) {
209 throw MakeTypeError('data_view_not_array_buffer',[]);
210 }
211 var bufferByteLength = %ArrayBufferGetByteLength(buffer);
212 var offset = IS_UNDEFINED(byteOffset) ? 0 : TO_POSITIVE_INTEGER(byteOffset);
213 if (offset > bufferByteLength) {
214 throw MakeRangeError('invalid_data_view_offset',[]);
rossberg 2013/06/21 08:44:01 Nit: space after comma
Dmitry Lomov (no reviews) 2013/06/21 11:32:10 Done.
215 }
216 var length = IS_UNDEFINED(byteLength) ?
217 bufferByteLength - offset : TO_POSITIVE_INTEGER(byteLength);
218 if (offset + length > bufferByteLength) {
219 throw new MakeRangeError('invalid_data_view_length');
220 }
221 %DataViewInitialize(this, buffer, offset, length);
222 } else {
223 return new $DataView(buffer, byteOffset, byteLength)
224 }
225 }
226
227 function DataViewGetBuffer() {
228 return %DataViewGetBuffer(this);
229 }
230
231 function DataViewGetByteOffset() {
232 return %DataViewGetByteOffset(this);
233 }
234
235 function DataViewGetByteLength() {
236 return %DataViewGetByteLength(this);
237 }
238
239 function DataViewGetInt8(offset, little_endian) {
240 if (!IS_DATAVIEW(this)) {
241 throw MakeTypeError('incompatible_method_reciever',
242 ['DataView.getInt8', this]);
243 }
244 var little_endian = IS_UNDEFINED(little_endian)
rossberg 2013/06/21 08:44:01 Don't use redundant 'var' (here and below). Also,
Dmitry Lomov (no reviews) 2013/06/21 11:32:10 Done.
245 ? false : (little_endian ? true : false);
246 var offset = TO_POSITIVE_INTEGER(offset);
247 return %DataViewGetInt8(this, offset, little_endian);
248 }
249
250 function DataViewSetInt8(offset, value, little_endian) {
251 if (!IS_DATAVIEW(this)) {
252 throw MakeTypeError('incompatible_method_reciever',
253 ['DataView.setInt8', this]);
254 }
255 var little_endian = IS_UNDEFINED(little_endian)
256 ? false : (little_endian ? true : false);
257 var value = TO_NUMBER_INLINE(value);
258 var offset = TO_POSITIVE_INTEGER(offset);
259 %DataViewSetInt8(this, offset, value, little_endian);
260 }
261
262 function DataViewGetUint8(offset, little_endian) {
263 if (!IS_DATAVIEW(this)) {
264 throw MakeTypeError('incompatible_method_reciever',
265 ['DataView.getUint8', this]);
266 }
267 var little_endian = IS_UNDEFINED(little_endian)
268 ? false : (little_endian ? true : false);
269 var offset = TO_POSITIVE_INTEGER(offset);
270 return %DataViewGetUint8(this, offset, little_endian);
271 }
272
273 function DataViewSetUint8(offset, value, little_endian) {
274 if (!IS_DATAVIEW(this)) {
275 throw MakeTypeError('incompatible_method_reciever',
276 ['DataView.setUint8', this]);
277 }
278 var little_endian = IS_UNDEFINED(little_endian)
279 ? false : (little_endian ? true : false);
280 var value = TO_NUMBER_INLINE(value);
281 var offset = TO_POSITIVE_INTEGER(offset);
282 %DataViewSetUint8(this, offset, value, little_endian);
283 }
284 function DataViewGetInt16(offset, little_endian) {
285 if (!IS_DATAVIEW(this)) {
286 throw MakeTypeError('incompatible_method_reciever',
287 ['DataView.getInt16', this]);
288 }
289 var little_endian = IS_UNDEFINED(little_endian)
290 ? false : (little_endian ? true : false);
291 var offset = TO_POSITIVE_INTEGER(offset);
292 return %DataViewGetInt16(this, offset, little_endian);
293 }
294
295 function DataViewSetInt16(offset, value, little_endian) {
296 if (!IS_DATAVIEW(this)) {
297 throw MakeTypeError('incompatible_method_reciever',
298 ['DataView.setInt16', this]);
299 }
300 var little_endian = IS_UNDEFINED(little_endian)
301 ? false : (little_endian ? true : false);
302 var value = TO_NUMBER_INLINE(value);
303 var offset = TO_POSITIVE_INTEGER(offset);
304 %DataViewSetInt16(this, offset, value, little_endian);
305 }
306
307 function DataViewGetUint16(offset, little_endian) {
308 if (!IS_DATAVIEW(this)) {
309 throw MakeTypeError('incompatible_method_reciever',
310 ['DataView.getUint16', this]);
311 }
312 var little_endian = IS_UNDEFINED(little_endian)
313 ? false : (little_endian ? true : false);
314 var offset = TO_POSITIVE_INTEGER(offset);
315 return %DataViewGetUint16(this, offset, little_endian);
316 }
317
318 function DataViewSetUint16(offset, value, little_endian) {
319 if (!IS_DATAVIEW(this)) {
320 throw MakeTypeError('incompatible_method_reciever',
321 ['DataView.setUint16', this]);
322 }
323 var little_endian = IS_UNDEFINED(little_endian)
324 ? false : (little_endian ? true : false);
325 var value = TO_NUMBER_INLINE(value);
326 var offset = TO_POSITIVE_INTEGER(offset);
327 %DataViewSetUint16(this, offset, value, little_endian);
328 }
329
330 function DataViewGetInt32(offset, little_endian) {
331 if (!IS_DATAVIEW(this)) {
332 throw MakeTypeError('incompatible_method_reciever',
333 ['DataView.getInt32', this]);
334 }
335 var little_endian = IS_UNDEFINED(little_endian)
336 ? false : (little_endian ? true : false);
337 var offset = TO_POSITIVE_INTEGER(offset);
338 return %DataViewGetInt32(this, offset, little_endian);
339 }
340
341 function DataViewSetInt32(offset, value, little_endian) {
342 if (!IS_DATAVIEW(this)) {
343 throw MakeTypeError('incompatible_method_reciever',
344 ['DataView.setInt32', this]);
345 }
346 var little_endian = IS_UNDEFINED(little_endian)
347 ? false : (little_endian ? true : false);
348 var value = TO_NUMBER_INLINE(value);
349 var offset = TO_POSITIVE_INTEGER(offset);
350 %DataViewSetInt32(this, offset, value, little_endian);
351 }
352
353 function DataViewGetUint32(offset, little_endian) {
354 if (!IS_DATAVIEW(this)) {
355 throw MakeTypeError('incompatible_method_reciever',
356 ['DataView.getUint32', this]);
357 }
358 var little_endian = IS_UNDEFINED(little_endian)
359 ? false : (little_endian ? true : false);
360 var offset = TO_POSITIVE_INTEGER(offset);
361 return %DataViewGetUint32(this, offset, little_endian);
362 }
363
364 function DataViewSetUint32(offset, value, little_endian) {
365 if (!IS_DATAVIEW(this)) {
366 throw MakeTypeError('incompatible_method_reciever',
367 ['DataView.setUint32', this]);
368 }
369 var little_endian = IS_UNDEFINED(little_endian)
370 ? false : (little_endian ? true : false);
371 var value = TO_NUMBER_INLINE(value);
372 var offset = TO_POSITIVE_INTEGER(offset);
373 %DataViewSetUint32(this, offset, value, little_endian);
374 }
375
376 function DataViewGetFloat32(offset, little_endian) {
377 if (!IS_DATAVIEW(this)) {
378 throw MakeTypeError('incompatible_method_reciever',
379 ['DataView.getFloat32', this]);
380 }
381 var little_endian = IS_UNDEFINED(little_endian)
382 ? false : (little_endian ? true : false);
383 var offset = TO_POSITIVE_INTEGER(offset);
384 return %DataViewGetFloat32(this, offset, little_endian);
385 }
386
387 function DataViewSetFloat32(offset, value, little_endian) {
388 if (!IS_DATAVIEW(this)) {
389 throw MakeTypeError('incompatible_method_reciever',
390 ['DataView.setFloat32', this]);
391 }
392 var little_endian = IS_UNDEFINED(little_endian)
393 ? false : (little_endian ? true : false);
394 var value = TO_NUMBER_INLINE(value);
395 var offset = TO_POSITIVE_INTEGER(offset);
396 %DataViewSetFloat32(this, offset, value, little_endian);
397 }
398
399 function DataViewGetFloat64(offset, little_endian) {
400 if (!IS_DATAVIEW(this)) {
401 throw MakeTypeError('incompatible_method_reciever',
402 ['DataView.getFloat64', this]);
403 }
404 var little_endian = IS_UNDEFINED(little_endian)
405 ? false : (little_endian ? true : false);
406 var offset = TO_POSITIVE_INTEGER(offset);
407 return %DataViewGetFloat64(this, offset, little_endian);
408 }
409
410 function DataViewSetFloat64(offset, value, little_endian) {
411 if (!IS_DATAVIEW(this)) {
412 throw MakeTypeError('incompatible_method_reciever',
413 ['DataView.setFloat64', this]);
414 }
415 var little_endian = IS_UNDEFINED(little_endian)
416 ? false : (little_endian ? true : false);
417 var value = TO_NUMBER_INLINE(value);
418 var offset = TO_POSITIVE_INTEGER(offset);
419 %DataViewSetFloat64(this, offset, value, little_endian);
420 }
421
422 function SetupDataView() {
423 %CheckIsBootstrapping();
424
425 // Setup the DataView constructor.
426 %SetCode($DataView, DataViewConstructor);
427 %FunctionSetPrototype($DataView, new $Object);
428
429 // Set up constructor property on the DataView prototype.
430 %SetProperty($DataView.prototype, "constructor", $DataView, DONT_ENUM);
431
432 InstallGetter($DataView.prototype, "buffer", DataViewGetBuffer);
433 InstallGetter($DataView.prototype, "byteOffset", DataViewGetByteOffset);
434 InstallGetter($DataView.prototype, "byteLength", DataViewGetByteLength);
435
436 InstallFunctions($DataView.prototype, DONT_ENUM, $Array(
437 "getInt8", DataViewGetInt8,
438 "setInt8", DataViewSetInt8,
439
440 "getUint8", DataViewGetUint8,
441 "setUint8", DataViewSetUint8,
442
443 "getInt16", DataViewGetInt16,
444 "setInt16", DataViewSetInt16,
445
446 "getUint16", DataViewGetUint16,
447 "setUint16", DataViewSetUint16,
448
449 "getInt32", DataViewGetInt32,
450 "setInt32", DataViewSetInt32,
451
452 "getUint32", DataViewGetUint32,
453 "setUint32", DataViewSetUint32,
454
455 "getFloat32", DataViewGetFloat32,
456 "setFloat32", DataViewSetFloat32,
457
458 "getFloat64", DataViewGetFloat64,
459 "setFloat64", DataViewSetFloat64
460 ));
461 }
462
463 SetupDataView();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698