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

Side by Side Diff: runtime/lib/byte_array.cc

Issue 11414211: Expose transferable constructor to Int8List (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Final review fixes Created 8 years 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 | runtime/lib/byte_array.dart » ('j') | runtime/vm/os.h » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/bootstrap_natives.h" 5 #include "vm/bootstrap_natives.h"
6 6
7 #include "vm/bigint_operations.h" 7 #include "vm/bigint_operations.h"
8 #include "vm/exceptions.h" 8 #include "vm/exceptions.h"
9 #include "vm/native_entry.h" 9 #include "vm/native_entry.h"
10 #include "vm/object.h" 10 #include "vm/object.h"
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 // Int8Array 278 // Int8Array
279 279
280 DEFINE_NATIVE_ENTRY(Int8Array_new, 1) { 280 DEFINE_NATIVE_ENTRY(Int8Array_new, 1) {
281 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); 281 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
282 intptr_t len = length.Value(); 282 intptr_t len = length.Value();
283 LengthCheck(len, Int8Array::kMaxElements); 283 LengthCheck(len, Int8Array::kMaxElements);
284 return Int8Array::New(len); 284 return Int8Array::New(len);
285 } 285 }
286 286
287 287
288 DEFINE_NATIVE_ENTRY(Int8Array_newTransferrable, 1) {
289 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
290 intptr_t len = length.Value();
291 LengthCheck(len, Int8Array::kMaxElements);
292 int8_t* bytes = OS::AllocateAlignedArray<int8_t>(len,
cshapiro 2012/11/30 18:40:26 newline after the open paren and 4 space indent
Cutch 2012/11/30 19:27:10 Done.
293 ExternalByteArrayData<int8_t>::kAlignment);
294 return ExternalInt8Array::New(bytes,
295 len,
296 bytes,
297 OS::AlignedFree);
298 }
299
300
288 DEFINE_NATIVE_ENTRY(Int8Array_getIndexed, 2) { 301 DEFINE_NATIVE_ENTRY(Int8Array_getIndexed, 2) {
289 GETTER(Int8Array, Smi, int8_t); 302 GETTER(Int8Array, Smi, int8_t);
290 } 303 }
291 304
292 305
293 DEFINE_NATIVE_ENTRY(Int8Array_setIndexed, 3) { 306 DEFINE_NATIVE_ENTRY(Int8Array_setIndexed, 3) {
294 SETTER(Int8Array, Smi, Value, int8_t); 307 SETTER(Int8Array, Smi, Value, int8_t);
295 } 308 }
296 309
297 310
298 // Uint8Array 311 // Uint8Array
299 312
300 DEFINE_NATIVE_ENTRY(Uint8Array_new, 1) { 313 DEFINE_NATIVE_ENTRY(Uint8Array_new, 1) {
301 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); 314 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
302 intptr_t len = length.Value(); 315 intptr_t len = length.Value();
303 LengthCheck(len, Uint8Array::kMaxElements); 316 LengthCheck(len, Uint8Array::kMaxElements);
304 return Uint8Array::New(len); 317 return Uint8Array::New(len);
305 } 318 }
306 319
307 320
321 DEFINE_NATIVE_ENTRY(Uint8Array_newTransferrable, 1) {
322 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
323 intptr_t len = length.Value();
324 LengthCheck(len, Uint8Array::kMaxElements);
325 uint8_t* bytes = OS::AllocateAlignedArray<uint8_t>(len,
326 ExternalByteArrayData<uint8_t>::kAlignment);
327 return ExternalUint8Array::New(bytes,
328 len,
329 bytes,
330 OS::AlignedFree);
331 }
332
333
308 DEFINE_NATIVE_ENTRY(Uint8Array_getIndexed, 2) { 334 DEFINE_NATIVE_ENTRY(Uint8Array_getIndexed, 2) {
309 GETTER(Uint8Array, Smi, uint8_t); 335 GETTER(Uint8Array, Smi, uint8_t);
310 } 336 }
311 337
312 338
313 DEFINE_NATIVE_ENTRY(Uint8Array_setIndexed, 3) { 339 DEFINE_NATIVE_ENTRY(Uint8Array_setIndexed, 3) {
314 SETTER(Uint8Array, Smi, Value, uint8_t); 340 SETTER(Uint8Array, Smi, Value, uint8_t);
315 } 341 }
316 342
317 343
318 // Int16Array 344 // Int16Array
319 345
320 DEFINE_NATIVE_ENTRY(Int16Array_new, 1) { 346 DEFINE_NATIVE_ENTRY(Int16Array_new, 1) {
321 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); 347 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
322 intptr_t len = length.Value(); 348 intptr_t len = length.Value();
323 LengthCheck(len, Int16Array::kMaxElements); 349 LengthCheck(len, Int16Array::kMaxElements);
324 return Int16Array::New(len); 350 return Int16Array::New(len);
325 } 351 }
326 352
327 353
354 DEFINE_NATIVE_ENTRY(Int16Array_newTransferrable, 1) {
355 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
356 intptr_t len = length.Value();
357 LengthCheck(len, Int16Array::kMaxElements);
358 int16_t* bytes = OS::AllocateAlignedArray<int16_t>(len,
359 ExternalByteArrayData<int16_t>::kAlignment);
360 return ExternalInt16Array::New(bytes,
361 len,
362 bytes,
363 OS::AlignedFree);
364 }
365
366
328 DEFINE_NATIVE_ENTRY(Int16Array_getIndexed, 2) { 367 DEFINE_NATIVE_ENTRY(Int16Array_getIndexed, 2) {
329 GETTER(Int16Array, Smi, int16_t); 368 GETTER(Int16Array, Smi, int16_t);
330 } 369 }
331 370
332 371
333 DEFINE_NATIVE_ENTRY(Int16Array_setIndexed, 3) { 372 DEFINE_NATIVE_ENTRY(Int16Array_setIndexed, 3) {
334 SETTER(Int16Array, Smi, Value, int16_t); 373 SETTER(Int16Array, Smi, Value, int16_t);
335 } 374 }
336 375
337 376
338 // Uint16Array 377 // Uint16Array
339 378
340 DEFINE_NATIVE_ENTRY(Uint16Array_new, 1) { 379 DEFINE_NATIVE_ENTRY(Uint16Array_new, 1) {
341 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); 380 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
342 intptr_t len = length.Value(); 381 intptr_t len = length.Value();
343 LengthCheck(len, Uint16Array::kMaxElements); 382 LengthCheck(len, Uint16Array::kMaxElements);
344 return Uint16Array::New(len); 383 return Uint16Array::New(len);
345 } 384 }
346 385
347 386
387 DEFINE_NATIVE_ENTRY(Uint16Array_newTransferrable, 1) {
388 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
389 intptr_t len = length.Value();
390 LengthCheck(len, Uint16Array::kMaxElements);
391 uint16_t* bytes = OS::AllocateAlignedArray<uint16_t>(len,
392 ExternalByteArrayData<uint16_t>::kAlignment);
393 return ExternalUint16Array::New(bytes,
394 len,
395 bytes,
396 OS::AlignedFree);
397 }
398
399
348 DEFINE_NATIVE_ENTRY(Uint16Array_getIndexed, 2) { 400 DEFINE_NATIVE_ENTRY(Uint16Array_getIndexed, 2) {
349 GETTER(Uint16Array, Smi, uint16_t); 401 GETTER(Uint16Array, Smi, uint16_t);
350 } 402 }
351 403
352 404
353 DEFINE_NATIVE_ENTRY(Uint16Array_setIndexed, 3) { 405 DEFINE_NATIVE_ENTRY(Uint16Array_setIndexed, 3) {
354 SETTER(Uint16Array, Smi, Value, uint16_t); 406 SETTER(Uint16Array, Smi, Value, uint16_t);
355 } 407 }
356 408
357 409
358 // Int32Array 410 // Int32Array
359 411
360 DEFINE_NATIVE_ENTRY(Int32Array_new, 1) { 412 DEFINE_NATIVE_ENTRY(Int32Array_new, 1) {
361 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); 413 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
362 intptr_t len = length.Value(); 414 intptr_t len = length.Value();
363 LengthCheck(len, Int32Array::kMaxElements); 415 LengthCheck(len, Int32Array::kMaxElements);
364 return Int32Array::New(len); 416 return Int32Array::New(len);
365 } 417 }
366 418
367 419
420 DEFINE_NATIVE_ENTRY(Int32Array_newTransferrable, 1) {
421 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
422 intptr_t len = length.Value();
423 LengthCheck(len, Int32Array::kMaxElements);
424 int32_t* bytes = OS::AllocateAlignedArray<int32_t>(len,
425 ExternalByteArrayData<int32_t>::kAlignment);
426 return ExternalInt32Array::New(bytes,
427 len,
428 bytes,
429 OS::AlignedFree);
430 }
431
432
368 DEFINE_NATIVE_ENTRY(Int32Array_getIndexed, 2) { 433 DEFINE_NATIVE_ENTRY(Int32Array_getIndexed, 2) {
369 GETTER(Int32Array, Integer, int32_t); 434 GETTER(Int32Array, Integer, int32_t);
370 } 435 }
371 436
372 437
373 DEFINE_NATIVE_ENTRY(Int32Array_setIndexed, 3) { 438 DEFINE_NATIVE_ENTRY(Int32Array_setIndexed, 3) {
374 SETTER(Int32Array, Integer, AsInt64Value, int32_t); 439 SETTER(Int32Array, Integer, AsInt64Value, int32_t);
375 } 440 }
376 441
377 442
378 // Uint32Array 443 // Uint32Array
379 444
380 DEFINE_NATIVE_ENTRY(Uint32Array_new, 1) { 445 DEFINE_NATIVE_ENTRY(Uint32Array_new, 1) {
381 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); 446 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
382 intptr_t len = length.Value(); 447 intptr_t len = length.Value();
383 LengthCheck(len, Uint32Array::kMaxElements); 448 LengthCheck(len, Uint32Array::kMaxElements);
384 return Uint32Array::New(len); 449 return Uint32Array::New(len);
385 } 450 }
386 451
387 452
453 DEFINE_NATIVE_ENTRY(Uint32Array_newTransferrable, 1) {
454 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
455 intptr_t len = length.Value();
456 LengthCheck(len, Uint32Array::kMaxElements);
457 uint32_t* bytes = OS::AllocateAlignedArray<uint32_t>(len,
458 ExternalByteArrayData<uint32_t>::kAlignment);
459 return ExternalUint32Array::New(bytes,
460 len,
461 bytes,
462 OS::AlignedFree);
463 }
464
465
388 DEFINE_NATIVE_ENTRY(Uint32Array_getIndexed, 2) { 466 DEFINE_NATIVE_ENTRY(Uint32Array_getIndexed, 2) {
389 GETTER(Uint32Array, Integer, uint32_t); 467 GETTER(Uint32Array, Integer, uint32_t);
390 } 468 }
391 469
392 470
393 DEFINE_NATIVE_ENTRY(Uint32Array_setIndexed, 3) { 471 DEFINE_NATIVE_ENTRY(Uint32Array_setIndexed, 3) {
394 SETTER(Uint32Array, Integer, AsInt64Value, uint32_t); 472 SETTER(Uint32Array, Integer, AsInt64Value, uint32_t);
395 } 473 }
396 474
397 475
398 // Int64Array 476 // Int64Array
399 477
400 DEFINE_NATIVE_ENTRY(Int64Array_new, 1) { 478 DEFINE_NATIVE_ENTRY(Int64Array_new, 1) {
401 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); 479 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
402 intptr_t len = length.Value(); 480 intptr_t len = length.Value();
403 LengthCheck(len, Int64Array::kMaxElements); 481 LengthCheck(len, Int64Array::kMaxElements);
404 return Int64Array::New(len); 482 return Int64Array::New(len);
405 } 483 }
406 484
407 485
486 DEFINE_NATIVE_ENTRY(Int64Array_newTransferrable, 1) {
487 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
488 intptr_t len = length.Value();
489 LengthCheck(len, Int64Array::kMaxElements);
490 int64_t* bytes = OS::AllocateAlignedArray<int64_t>(len,
491 ExternalByteArrayData<int64_t>::kAlignment);
492 return ExternalInt64Array::New(bytes,
493 len,
494 bytes,
495 OS::AlignedFree);
496 }
497
498
408 DEFINE_NATIVE_ENTRY(Int64Array_getIndexed, 2) { 499 DEFINE_NATIVE_ENTRY(Int64Array_getIndexed, 2) {
409 GETTER(Int64Array, Integer, int64_t); 500 GETTER(Int64Array, Integer, int64_t);
410 } 501 }
411 502
412 503
413 DEFINE_NATIVE_ENTRY(Int64Array_setIndexed, 3) { 504 DEFINE_NATIVE_ENTRY(Int64Array_setIndexed, 3) {
414 SETTER(Int64Array, Integer, AsInt64Value, int64_t); 505 SETTER(Int64Array, Integer, AsInt64Value, int64_t);
415 } 506 }
416 507
417 508
418 // Uint64Array 509 // Uint64Array
419 510
420 DEFINE_NATIVE_ENTRY(Uint64Array_new, 1) { 511 DEFINE_NATIVE_ENTRY(Uint64Array_new, 1) {
421 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); 512 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
422 intptr_t len = length.Value(); 513 intptr_t len = length.Value();
423 LengthCheck(len, Uint64Array::kMaxElements); 514 LengthCheck(len, Uint64Array::kMaxElements);
424 return Uint64Array::New(len); 515 return Uint64Array::New(len);
425 } 516 }
426 517
427 518
519 DEFINE_NATIVE_ENTRY(Uint64Array_newTransferrable, 1) {
520 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
521 intptr_t len = length.Value();
522 LengthCheck(len, Uint64Array::kMaxElements);
523 uint64_t* bytes = OS::AllocateAlignedArray<uint64_t>(len,
524 ExternalByteArrayData<uint64_t>::kAlignment);
525 return ExternalUint64Array::New(bytes,
526 len,
527 bytes,
528 OS::AlignedFree);
529 }
530
531
428 DEFINE_NATIVE_ENTRY(Uint64Array_getIndexed, 2) { 532 DEFINE_NATIVE_ENTRY(Uint64Array_getIndexed, 2) {
429 GETTER_UINT64(Uint64Array); 533 GETTER_UINT64(Uint64Array);
430 } 534 }
431 535
432 536
433 DEFINE_NATIVE_ENTRY(Uint64Array_setIndexed, 3) { 537 DEFINE_NATIVE_ENTRY(Uint64Array_setIndexed, 3) {
434 SETTER_UINT64(Uint64Array); 538 SETTER_UINT64(Uint64Array);
435 } 539 }
436 540
437 541
438 // Float32Array 542 // Float32Array
439 543
440 DEFINE_NATIVE_ENTRY(Float32Array_new, 1) { 544 DEFINE_NATIVE_ENTRY(Float32Array_new, 1) {
441 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); 545 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
442 intptr_t len = length.Value(); 546 intptr_t len = length.Value();
443 LengthCheck(len, Float32Array::kMaxElements); 547 LengthCheck(len, Float32Array::kMaxElements);
444 return Float32Array::New(len); 548 return Float32Array::New(len);
445 } 549 }
446 550
447 551
552 DEFINE_NATIVE_ENTRY(Float32Array_newTransferrable, 1) {
553 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
554 intptr_t len = length.Value();
555 LengthCheck(len, Float32Array::kMaxElements);
556 float* bytes = OS::AllocateAlignedArray<float>(len,
557 ExternalByteArrayData<float>::kAlignment);
558 return ExternalFloat32Array::New(bytes,
559 len,
560 bytes,
561 OS::AlignedFree);
562 }
563
564
448 DEFINE_NATIVE_ENTRY(Float32Array_getIndexed, 2) { 565 DEFINE_NATIVE_ENTRY(Float32Array_getIndexed, 2) {
449 GETTER(Float32Array, Double, float); 566 GETTER(Float32Array, Double, float);
450 } 567 }
451 568
452 569
453 DEFINE_NATIVE_ENTRY(Float32Array_setIndexed, 3) { 570 DEFINE_NATIVE_ENTRY(Float32Array_setIndexed, 3) {
454 SETTER(Float32Array, Double, value, float); 571 SETTER(Float32Array, Double, value, float);
455 } 572 }
456 573
457 574
458 // Float64Array 575 // Float64Array
459 576
460 DEFINE_NATIVE_ENTRY(Float64Array_new, 1) { 577 DEFINE_NATIVE_ENTRY(Float64Array_new, 1) {
461 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); 578 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
462 intptr_t len = length.Value(); 579 intptr_t len = length.Value();
463 LengthCheck(len, Float64Array::kMaxElements); 580 LengthCheck(len, Float64Array::kMaxElements);
464 return Float64Array::New(len); 581 return Float64Array::New(len);
465 } 582 }
466 583
467 584
585 DEFINE_NATIVE_ENTRY(Float64Array_newTransferrable, 1) {
586 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
587 intptr_t len = length.Value();
588 LengthCheck(len, Float64Array::kMaxElements);
589 double* bytes = OS::AllocateAlignedArray<double>(len,
590 ExternalByteArrayData<double>::kAlignment);
591 return ExternalFloat64Array::New(bytes,
592 len,
593 bytes,
594 OS::AlignedFree);
595 }
596
597
468 DEFINE_NATIVE_ENTRY(Float64Array_getIndexed, 2) { 598 DEFINE_NATIVE_ENTRY(Float64Array_getIndexed, 2) {
469 GETTER(Float64Array, Double, double); 599 GETTER(Float64Array, Double, double);
470 } 600 }
471 601
472 602
473 DEFINE_NATIVE_ENTRY(Float64Array_setIndexed, 3) { 603 DEFINE_NATIVE_ENTRY(Float64Array_setIndexed, 3) {
474 SETTER(Float64Array, Double, value, double); 604 SETTER(Float64Array, Double, value, double);
475 } 605 }
476 606
477 607
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
588 DEFINE_NATIVE_ENTRY(ExternalFloat64Array_getIndexed, 2) { 718 DEFINE_NATIVE_ENTRY(ExternalFloat64Array_getIndexed, 2) {
589 GETTER(ExternalFloat64Array, Double, double); 719 GETTER(ExternalFloat64Array, Double, double);
590 } 720 }
591 721
592 722
593 DEFINE_NATIVE_ENTRY(ExternalFloat64Array_setIndexed, 3) { 723 DEFINE_NATIVE_ENTRY(ExternalFloat64Array_setIndexed, 3) {
594 SETTER(ExternalFloat64Array, Double, value, double); 724 SETTER(ExternalFloat64Array, Double, value, double);
595 } 725 }
596 726
597 } // namespace dart 727 } // namespace dart
OLDNEW
« no previous file with comments | « no previous file | runtime/lib/byte_array.dart » ('j') | runtime/vm/os.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698