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

Side by Side Diff: src/typedarray.js

Issue 18313007: Change DataView accessors behavior for insufficient args. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Fixed bug Created 7 years, 5 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
« no previous file with comments | « no previous file | test/mjsunit/harmony/dataview-accessors.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 252
253 function ToPositiveDataViewOffset(offset) { 253 function ToPositiveDataViewOffset(offset) {
254 return ToPositiveInteger(offset, 'invalid_data_view_accessor_offset'); 254 return ToPositiveInteger(offset, 'invalid_data_view_accessor_offset');
255 } 255 }
256 256
257 function DataViewGetInt8(offset, little_endian) { 257 function DataViewGetInt8(offset, little_endian) {
258 if (!IS_DATAVIEW(this)) { 258 if (!IS_DATAVIEW(this)) {
259 throw MakeTypeError('incompatible_method_reciever', 259 throw MakeTypeError('incompatible_method_reciever',
260 ['DataView.getInt8', this]); 260 ['DataView.getInt8', this]);
261 } 261 }
262 if (%_ArgumentsLength() < 1) {
263 throw MakeTypeError('invalid_argument');
264 }
262 return %DataViewGetInt8(this, 265 return %DataViewGetInt8(this,
263 ToPositiveDataViewOffset(offset), 266 ToPositiveDataViewOffset(offset),
264 !!little_endian); 267 !!little_endian);
265 } 268 }
266 269
267 function DataViewSetInt8(offset, value, little_endian) { 270 function DataViewSetInt8(offset, value, little_endian) {
268 if (!IS_DATAVIEW(this)) { 271 if (!IS_DATAVIEW(this)) {
269 throw MakeTypeError('incompatible_method_reciever', 272 throw MakeTypeError('incompatible_method_reciever',
270 ['DataView.setInt8', this]); 273 ['DataView.setInt8', this]);
271 } 274 }
275 if (%_ArgumentsLength() < 1) {
276 throw MakeTypeError('invalid_argument');
277 }
272 %DataViewSetInt8(this, 278 %DataViewSetInt8(this,
273 ToPositiveDataViewOffset(offset), 279 ToPositiveDataViewOffset(offset),
274 TO_NUMBER_INLINE(value), 280 TO_NUMBER_INLINE(value),
275 !!little_endian); 281 !!little_endian);
276 } 282 }
277 283
278 function DataViewGetUint8(offset, little_endian) { 284 function DataViewGetUint8(offset, little_endian) {
279 if (!IS_DATAVIEW(this)) { 285 if (!IS_DATAVIEW(this)) {
280 throw MakeTypeError('incompatible_method_reciever', 286 throw MakeTypeError('incompatible_method_reciever',
281 ['DataView.getUint8', this]); 287 ['DataView.getUint8', this]);
282 } 288 }
289 if (%_ArgumentsLength() < 1) {
290 throw MakeTypeError('invalid_argument');
291 }
283 return %DataViewGetUint8(this, 292 return %DataViewGetUint8(this,
284 ToPositiveDataViewOffset(offset), 293 ToPositiveDataViewOffset(offset),
285 !!little_endian); 294 !!little_endian);
286 } 295 }
287 296
288 function DataViewSetUint8(offset, value, little_endian) { 297 function DataViewSetUint8(offset, value, little_endian) {
289 if (!IS_DATAVIEW(this)) { 298 if (!IS_DATAVIEW(this)) {
290 throw MakeTypeError('incompatible_method_reciever', 299 throw MakeTypeError('incompatible_method_reciever',
291 ['DataView.setUint8', this]); 300 ['DataView.setUint8', this]);
292 } 301 }
302 if (%_ArgumentsLength() < 1) {
303 throw MakeTypeError('invalid_argument');
304 }
293 %DataViewSetUint8(this, 305 %DataViewSetUint8(this,
294 ToPositiveDataViewOffset(offset), 306 ToPositiveDataViewOffset(offset),
295 TO_NUMBER_INLINE(value), 307 TO_NUMBER_INLINE(value),
296 !!little_endian); 308 !!little_endian);
297 } 309 }
298 310
299 function DataViewGetInt16(offset, little_endian) { 311 function DataViewGetInt16(offset, little_endian) {
300 if (!IS_DATAVIEW(this)) { 312 if (!IS_DATAVIEW(this)) {
301 throw MakeTypeError('incompatible_method_reciever', 313 throw MakeTypeError('incompatible_method_reciever',
302 ['DataView.getInt16', this]); 314 ['DataView.getInt16', this]);
303 } 315 }
316 if (%_ArgumentsLength() < 1) {
317 throw MakeTypeError('invalid_argument');
318 }
304 return %DataViewGetInt16(this, 319 return %DataViewGetInt16(this,
305 ToPositiveDataViewOffset(offset), 320 ToPositiveDataViewOffset(offset),
306 !!little_endian); 321 !!little_endian);
307 } 322 }
308 323
309 function DataViewSetInt16(offset, value, little_endian) { 324 function DataViewSetInt16(offset, value, little_endian) {
310 if (!IS_DATAVIEW(this)) { 325 if (!IS_DATAVIEW(this)) {
311 throw MakeTypeError('incompatible_method_reciever', 326 throw MakeTypeError('incompatible_method_reciever',
312 ['DataView.setInt16', this]); 327 ['DataView.setInt16', this]);
313 } 328 }
329 if (%_ArgumentsLength() < 1) {
330 throw MakeTypeError('invalid_argument');
331 }
314 %DataViewSetInt16(this, 332 %DataViewSetInt16(this,
315 ToPositiveDataViewOffset(offset), 333 ToPositiveDataViewOffset(offset),
316 TO_NUMBER_INLINE(value), 334 TO_NUMBER_INLINE(value),
317 !!little_endian); 335 !!little_endian);
318 } 336 }
319 337
320 function DataViewGetUint16(offset, little_endian) { 338 function DataViewGetUint16(offset, little_endian) {
321 if (!IS_DATAVIEW(this)) { 339 if (!IS_DATAVIEW(this)) {
322 throw MakeTypeError('incompatible_method_reciever', 340 throw MakeTypeError('incompatible_method_reciever',
323 ['DataView.getUint16', this]); 341 ['DataView.getUint16', this]);
324 } 342 }
343 if (%_ArgumentsLength() < 1) {
344 throw MakeTypeError('invalid_argument');
345 }
325 return %DataViewGetUint16(this, 346 return %DataViewGetUint16(this,
326 ToPositiveDataViewOffset(offset), 347 ToPositiveDataViewOffset(offset),
327 !!little_endian); 348 !!little_endian);
328 } 349 }
329 350
330 function DataViewSetUint16(offset, value, little_endian) { 351 function DataViewSetUint16(offset, value, little_endian) {
331 if (!IS_DATAVIEW(this)) { 352 if (!IS_DATAVIEW(this)) {
332 throw MakeTypeError('incompatible_method_reciever', 353 throw MakeTypeError('incompatible_method_reciever',
333 ['DataView.setUint16', this]); 354 ['DataView.setUint16', this]);
334 } 355 }
356 if (%_ArgumentsLength() < 1) {
357 throw MakeTypeError('invalid_argument');
358 }
335 %DataViewSetUint16(this, 359 %DataViewSetUint16(this,
336 ToPositiveDataViewOffset(offset), 360 ToPositiveDataViewOffset(offset),
337 TO_NUMBER_INLINE(value), 361 TO_NUMBER_INLINE(value),
338 !!little_endian); 362 !!little_endian);
339 } 363 }
340 364
341 function DataViewGetInt32(offset, little_endian) { 365 function DataViewGetInt32(offset, little_endian) {
342 if (!IS_DATAVIEW(this)) { 366 if (!IS_DATAVIEW(this)) {
343 throw MakeTypeError('incompatible_method_reciever', 367 throw MakeTypeError('incompatible_method_reciever',
344 ['DataView.getInt32', this]); 368 ['DataView.getInt32', this]);
345 } 369 }
370 if (%_ArgumentsLength() < 1) {
371 throw MakeTypeError('invalid_argument');
372 }
346 return %DataViewGetInt32(this, 373 return %DataViewGetInt32(this,
347 ToPositiveDataViewOffset(offset), 374 ToPositiveDataViewOffset(offset),
348 !!little_endian); 375 !!little_endian);
349 } 376 }
350 377
351 function DataViewSetInt32(offset, value, little_endian) { 378 function DataViewSetInt32(offset, value, little_endian) {
352 if (!IS_DATAVIEW(this)) { 379 if (!IS_DATAVIEW(this)) {
353 throw MakeTypeError('incompatible_method_reciever', 380 throw MakeTypeError('incompatible_method_reciever',
354 ['DataView.setInt32', this]); 381 ['DataView.setInt32', this]);
355 } 382 }
383 if (%_ArgumentsLength() < 2) {
384 throw MakeTypeError('invalid_argument');
385 }
356 %DataViewSetInt32(this, 386 %DataViewSetInt32(this,
357 ToPositiveDataViewOffset(offset), 387 ToPositiveDataViewOffset(offset),
358 TO_NUMBER_INLINE(value), 388 TO_NUMBER_INLINE(value),
359 !!little_endian); 389 !!little_endian);
360 } 390 }
361 391
362 function DataViewGetUint32(offset, little_endian) { 392 function DataViewGetUint32(offset, little_endian) {
363 if (!IS_DATAVIEW(this)) { 393 if (!IS_DATAVIEW(this)) {
364 throw MakeTypeError('incompatible_method_reciever', 394 throw MakeTypeError('incompatible_method_reciever',
365 ['DataView.getUint32', this]); 395 ['DataView.getUint32', this]);
366 } 396 }
397 if (%_ArgumentsLength() < 1) {
398 throw MakeTypeError('invalid_argument');
399 }
367 return %DataViewGetUint32(this, 400 return %DataViewGetUint32(this,
368 ToPositiveDataViewOffset(offset), 401 ToPositiveDataViewOffset(offset),
369 !!little_endian); 402 !!little_endian);
370 } 403 }
371 404
372 function DataViewSetUint32(offset, value, little_endian) { 405 function DataViewSetUint32(offset, value, little_endian) {
373 if (!IS_DATAVIEW(this)) { 406 if (!IS_DATAVIEW(this)) {
374 throw MakeTypeError('incompatible_method_reciever', 407 throw MakeTypeError('incompatible_method_reciever',
375 ['DataView.setUint32', this]); 408 ['DataView.setUint32', this]);
376 } 409 }
410 if (%_ArgumentsLength() < 1) {
411 throw MakeTypeError('invalid_argument');
412 }
377 %DataViewSetUint32(this, 413 %DataViewSetUint32(this,
378 ToPositiveDataViewOffset(offset), 414 ToPositiveDataViewOffset(offset),
379 TO_NUMBER_INLINE(value), 415 TO_NUMBER_INLINE(value),
380 !!little_endian); 416 !!little_endian);
381 } 417 }
382 418
383 function DataViewGetFloat32(offset, little_endian) { 419 function DataViewGetFloat32(offset, little_endian) {
384 if (!IS_DATAVIEW(this)) { 420 if (!IS_DATAVIEW(this)) {
385 throw MakeTypeError('incompatible_method_reciever', 421 throw MakeTypeError('incompatible_method_reciever',
386 ['DataView.getFloat32', this]); 422 ['DataView.getFloat32', this]);
387 } 423 }
424 if (%_ArgumentsLength() < 1) {
425 throw MakeTypeError('invalid_argument');
426 }
388 return %DataViewGetFloat32(this, 427 return %DataViewGetFloat32(this,
389 ToPositiveDataViewOffset(offset), 428 ToPositiveDataViewOffset(offset),
390 !!little_endian); 429 !!little_endian);
391 } 430 }
392 431
393 function DataViewSetFloat32(offset, value, little_endian) { 432 function DataViewSetFloat32(offset, value, little_endian) {
394 if (!IS_DATAVIEW(this)) { 433 if (!IS_DATAVIEW(this)) {
395 throw MakeTypeError('incompatible_method_reciever', 434 throw MakeTypeError('incompatible_method_reciever',
396 ['DataView.setFloat32', this]); 435 ['DataView.setFloat32', this]);
397 } 436 }
437 if (%_ArgumentsLength() < 1) {
438 throw MakeTypeError('invalid_argument');
439 }
398 %DataViewSetFloat32(this, 440 %DataViewSetFloat32(this,
399 ToPositiveDataViewOffset(offset), 441 ToPositiveDataViewOffset(offset),
400 TO_NUMBER_INLINE(value), 442 TO_NUMBER_INLINE(value),
401 !!little_endian); 443 !!little_endian);
402 } 444 }
403 445
404 function DataViewGetFloat64(offset, little_endian) { 446 function DataViewGetFloat64(offset, little_endian) {
405 if (!IS_DATAVIEW(this)) { 447 if (!IS_DATAVIEW(this)) {
406 throw MakeTypeError('incompatible_method_reciever', 448 throw MakeTypeError('incompatible_method_reciever',
407 ['DataView.getFloat64', this]); 449 ['DataView.getFloat64', this]);
408 } 450 }
409 offset = TO_INTEGER(offset); 451 if (%_ArgumentsLength() < 1) {
410 if (offset < 0) { 452 throw MakeTypeError('invalid_argument');
411 throw MakeRangeError("invalid_data_view_accessor_offset");
412 } 453 }
413 return %DataViewGetFloat64(this, 454 return %DataViewGetFloat64(this,
414 ToPositiveDataViewOffset(offset), 455 ToPositiveDataViewOffset(offset),
415 !!little_endian); 456 !!little_endian);
416 } 457 }
417 458
418 function DataViewSetFloat64(offset, value, little_endian) { 459 function DataViewSetFloat64(offset, value, little_endian) {
419 if (!IS_DATAVIEW(this)) { 460 if (!IS_DATAVIEW(this)) {
420 throw MakeTypeError('incompatible_method_reciever', 461 throw MakeTypeError('incompatible_method_reciever',
421 ['DataView.setFloat64', this]); 462 ['DataView.setFloat64', this]);
422 } 463 }
423 offset = TO_INTEGER(offset); 464 if (%_ArgumentsLength() < 1) {
424 if (offset < 0) { 465 throw MakeTypeError('invalid_argument');
425 throw MakeRangeError("invalid_data_view_accessor_offset");
426 } 466 }
427 %DataViewSetFloat64(this, 467 %DataViewSetFloat64(this,
428 ToPositiveDataViewOffset(offset), 468 ToPositiveDataViewOffset(offset),
429 TO_NUMBER_INLINE(value), 469 TO_NUMBER_INLINE(value),
430 !!little_endian); 470 !!little_endian);
431 } 471 }
432 472
433 function SetupDataView() { 473 function SetupDataView() {
434 %CheckIsBootstrapping(); 474 %CheckIsBootstrapping();
435 475
(...skipping 29 matching lines...) Expand all
465 505
466 "getFloat32", DataViewGetFloat32, 506 "getFloat32", DataViewGetFloat32,
467 "setFloat32", DataViewSetFloat32, 507 "setFloat32", DataViewSetFloat32,
468 508
469 "getFloat64", DataViewGetFloat64, 509 "getFloat64", DataViewGetFloat64,
470 "setFloat64", DataViewSetFloat64 510 "setFloat64", DataViewSetFloat64
471 )); 511 ));
472 } 512 }
473 513
474 SetupDataView(); 514 SetupDataView();
OLDNEW
« no previous file with comments | « no previous file | test/mjsunit/harmony/dataview-accessors.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698