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

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: os.h fix 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/lib/byte_array.dart » ('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) {
Ivan Posva 2012/12/02 14:17:55 The spelling transferable is generally preferred,
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>(
293 len,
294 ExternalByteArrayData<int8_t>::kAlignment);
295 return ExternalInt8Array::New(bytes,
296 len,
297 bytes,
298 OS::AlignedFree);
299 }
300
301
288 DEFINE_NATIVE_ENTRY(Int8Array_getIndexed, 2) { 302 DEFINE_NATIVE_ENTRY(Int8Array_getIndexed, 2) {
289 GETTER(Int8Array, Smi, int8_t); 303 GETTER(Int8Array, Smi, int8_t);
290 } 304 }
291 305
292 306
293 DEFINE_NATIVE_ENTRY(Int8Array_setIndexed, 3) { 307 DEFINE_NATIVE_ENTRY(Int8Array_setIndexed, 3) {
294 SETTER(Int8Array, Smi, Value, int8_t); 308 SETTER(Int8Array, Smi, Value, int8_t);
295 } 309 }
296 310
297 311
298 // Uint8Array 312 // Uint8Array
299 313
300 DEFINE_NATIVE_ENTRY(Uint8Array_new, 1) { 314 DEFINE_NATIVE_ENTRY(Uint8Array_new, 1) {
301 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); 315 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
302 intptr_t len = length.Value(); 316 intptr_t len = length.Value();
303 LengthCheck(len, Uint8Array::kMaxElements); 317 LengthCheck(len, Uint8Array::kMaxElements);
304 return Uint8Array::New(len); 318 return Uint8Array::New(len);
305 } 319 }
306 320
307 321
322 DEFINE_NATIVE_ENTRY(Uint8Array_newTransferrable, 1) {
323 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
324 intptr_t len = length.Value();
325 LengthCheck(len, Uint8Array::kMaxElements);
326 uint8_t* bytes = OS::AllocateAlignedArray<uint8_t>(
327 len,
328 ExternalByteArrayData<uint8_t>::kAlignment);
329 return ExternalUint8Array::New(bytes,
330 len,
331 bytes,
332 OS::AlignedFree);
333 }
334
335
308 DEFINE_NATIVE_ENTRY(Uint8Array_getIndexed, 2) { 336 DEFINE_NATIVE_ENTRY(Uint8Array_getIndexed, 2) {
309 GETTER(Uint8Array, Smi, uint8_t); 337 GETTER(Uint8Array, Smi, uint8_t);
310 } 338 }
311 339
312 340
313 DEFINE_NATIVE_ENTRY(Uint8Array_setIndexed, 3) { 341 DEFINE_NATIVE_ENTRY(Uint8Array_setIndexed, 3) {
314 SETTER(Uint8Array, Smi, Value, uint8_t); 342 SETTER(Uint8Array, Smi, Value, uint8_t);
315 } 343 }
316 344
317 345
318 // Int16Array 346 // Int16Array
319 347
320 DEFINE_NATIVE_ENTRY(Int16Array_new, 1) { 348 DEFINE_NATIVE_ENTRY(Int16Array_new, 1) {
321 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); 349 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
322 intptr_t len = length.Value(); 350 intptr_t len = length.Value();
323 LengthCheck(len, Int16Array::kMaxElements); 351 LengthCheck(len, Int16Array::kMaxElements);
324 return Int16Array::New(len); 352 return Int16Array::New(len);
325 } 353 }
326 354
327 355
356 DEFINE_NATIVE_ENTRY(Int16Array_newTransferrable, 1) {
357 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
358 intptr_t len = length.Value();
359 LengthCheck(len, Int16Array::kMaxElements);
360 int16_t* bytes = OS::AllocateAlignedArray<int16_t>(
361 len,
362 ExternalByteArrayData<int16_t>::kAlignment);
363 return ExternalInt16Array::New(bytes,
364 len,
365 bytes,
366 OS::AlignedFree);
367 }
368
369
328 DEFINE_NATIVE_ENTRY(Int16Array_getIndexed, 2) { 370 DEFINE_NATIVE_ENTRY(Int16Array_getIndexed, 2) {
329 GETTER(Int16Array, Smi, int16_t); 371 GETTER(Int16Array, Smi, int16_t);
330 } 372 }
331 373
332 374
333 DEFINE_NATIVE_ENTRY(Int16Array_setIndexed, 3) { 375 DEFINE_NATIVE_ENTRY(Int16Array_setIndexed, 3) {
334 SETTER(Int16Array, Smi, Value, int16_t); 376 SETTER(Int16Array, Smi, Value, int16_t);
335 } 377 }
336 378
337 379
338 // Uint16Array 380 // Uint16Array
339 381
340 DEFINE_NATIVE_ENTRY(Uint16Array_new, 1) { 382 DEFINE_NATIVE_ENTRY(Uint16Array_new, 1) {
341 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); 383 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
342 intptr_t len = length.Value(); 384 intptr_t len = length.Value();
343 LengthCheck(len, Uint16Array::kMaxElements); 385 LengthCheck(len, Uint16Array::kMaxElements);
344 return Uint16Array::New(len); 386 return Uint16Array::New(len);
345 } 387 }
346 388
347 389
390 DEFINE_NATIVE_ENTRY(Uint16Array_newTransferrable, 1) {
391 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
392 intptr_t len = length.Value();
393 LengthCheck(len, Uint16Array::kMaxElements);
394 uint16_t* bytes = OS::AllocateAlignedArray<uint16_t>(
siva 2012/11/30 22:15:53 The name 'byte' here is not very readable, why not
cshapiro 2012/11/30 22:18:11 The object.h class calls this value data :-)
siva 2012/11/30 22:33:21 Sure data is fine too. On 2012/11/30 22:18:11, cs
395 len,
396 ExternalByteArrayData<uint16_t>::kAlignment);
397 return ExternalUint16Array::New(bytes,
398 len,
399 bytes,
400 OS::AlignedFree);
401 }
402
403
348 DEFINE_NATIVE_ENTRY(Uint16Array_getIndexed, 2) { 404 DEFINE_NATIVE_ENTRY(Uint16Array_getIndexed, 2) {
349 GETTER(Uint16Array, Smi, uint16_t); 405 GETTER(Uint16Array, Smi, uint16_t);
350 } 406 }
351 407
352 408
353 DEFINE_NATIVE_ENTRY(Uint16Array_setIndexed, 3) { 409 DEFINE_NATIVE_ENTRY(Uint16Array_setIndexed, 3) {
354 SETTER(Uint16Array, Smi, Value, uint16_t); 410 SETTER(Uint16Array, Smi, Value, uint16_t);
355 } 411 }
356 412
357 413
358 // Int32Array 414 // Int32Array
359 415
360 DEFINE_NATIVE_ENTRY(Int32Array_new, 1) { 416 DEFINE_NATIVE_ENTRY(Int32Array_new, 1) {
361 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); 417 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
362 intptr_t len = length.Value(); 418 intptr_t len = length.Value();
363 LengthCheck(len, Int32Array::kMaxElements); 419 LengthCheck(len, Int32Array::kMaxElements);
364 return Int32Array::New(len); 420 return Int32Array::New(len);
365 } 421 }
366 422
367 423
424 DEFINE_NATIVE_ENTRY(Int32Array_newTransferrable, 1) {
425 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
426 intptr_t len = length.Value();
427 LengthCheck(len, Int32Array::kMaxElements);
428 int32_t* bytes = OS::AllocateAlignedArray<int32_t>(
429 len,
430 ExternalByteArrayData<int32_t>::kAlignment);
431 return ExternalInt32Array::New(bytes,
432 len,
433 bytes,
434 OS::AlignedFree);
435 }
436
437
368 DEFINE_NATIVE_ENTRY(Int32Array_getIndexed, 2) { 438 DEFINE_NATIVE_ENTRY(Int32Array_getIndexed, 2) {
369 GETTER(Int32Array, Integer, int32_t); 439 GETTER(Int32Array, Integer, int32_t);
370 } 440 }
371 441
372 442
373 DEFINE_NATIVE_ENTRY(Int32Array_setIndexed, 3) { 443 DEFINE_NATIVE_ENTRY(Int32Array_setIndexed, 3) {
374 SETTER(Int32Array, Integer, AsInt64Value, int32_t); 444 SETTER(Int32Array, Integer, AsInt64Value, int32_t);
375 } 445 }
376 446
377 447
378 // Uint32Array 448 // Uint32Array
379 449
380 DEFINE_NATIVE_ENTRY(Uint32Array_new, 1) { 450 DEFINE_NATIVE_ENTRY(Uint32Array_new, 1) {
381 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); 451 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
382 intptr_t len = length.Value(); 452 intptr_t len = length.Value();
383 LengthCheck(len, Uint32Array::kMaxElements); 453 LengthCheck(len, Uint32Array::kMaxElements);
384 return Uint32Array::New(len); 454 return Uint32Array::New(len);
385 } 455 }
386 456
387 457
458 DEFINE_NATIVE_ENTRY(Uint32Array_newTransferrable, 1) {
459 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
460 intptr_t len = length.Value();
461 LengthCheck(len, Uint32Array::kMaxElements);
462 uint32_t* bytes = OS::AllocateAlignedArray<uint32_t>(
463 len,
464 ExternalByteArrayData<uint32_t>::kAlignment);
465 return ExternalUint32Array::New(bytes,
466 len,
467 bytes,
468 OS::AlignedFree);
469 }
470
471
388 DEFINE_NATIVE_ENTRY(Uint32Array_getIndexed, 2) { 472 DEFINE_NATIVE_ENTRY(Uint32Array_getIndexed, 2) {
389 GETTER(Uint32Array, Integer, uint32_t); 473 GETTER(Uint32Array, Integer, uint32_t);
390 } 474 }
391 475
392 476
393 DEFINE_NATIVE_ENTRY(Uint32Array_setIndexed, 3) { 477 DEFINE_NATIVE_ENTRY(Uint32Array_setIndexed, 3) {
394 SETTER(Uint32Array, Integer, AsInt64Value, uint32_t); 478 SETTER(Uint32Array, Integer, AsInt64Value, uint32_t);
395 } 479 }
396 480
397 481
398 // Int64Array 482 // Int64Array
399 483
400 DEFINE_NATIVE_ENTRY(Int64Array_new, 1) { 484 DEFINE_NATIVE_ENTRY(Int64Array_new, 1) {
401 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); 485 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
402 intptr_t len = length.Value(); 486 intptr_t len = length.Value();
403 LengthCheck(len, Int64Array::kMaxElements); 487 LengthCheck(len, Int64Array::kMaxElements);
404 return Int64Array::New(len); 488 return Int64Array::New(len);
405 } 489 }
406 490
407 491
492 DEFINE_NATIVE_ENTRY(Int64Array_newTransferrable, 1) {
493 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
494 intptr_t len = length.Value();
495 LengthCheck(len, Int64Array::kMaxElements);
496 int64_t* bytes = OS::AllocateAlignedArray<int64_t>(
497 len,
498 ExternalByteArrayData<int64_t>::kAlignment);
499 return ExternalInt64Array::New(bytes,
500 len,
501 bytes,
502 OS::AlignedFree);
503 }
504
505
408 DEFINE_NATIVE_ENTRY(Int64Array_getIndexed, 2) { 506 DEFINE_NATIVE_ENTRY(Int64Array_getIndexed, 2) {
409 GETTER(Int64Array, Integer, int64_t); 507 GETTER(Int64Array, Integer, int64_t);
410 } 508 }
411 509
412 510
413 DEFINE_NATIVE_ENTRY(Int64Array_setIndexed, 3) { 511 DEFINE_NATIVE_ENTRY(Int64Array_setIndexed, 3) {
414 SETTER(Int64Array, Integer, AsInt64Value, int64_t); 512 SETTER(Int64Array, Integer, AsInt64Value, int64_t);
415 } 513 }
416 514
417 515
418 // Uint64Array 516 // Uint64Array
419 517
420 DEFINE_NATIVE_ENTRY(Uint64Array_new, 1) { 518 DEFINE_NATIVE_ENTRY(Uint64Array_new, 1) {
421 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); 519 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
422 intptr_t len = length.Value(); 520 intptr_t len = length.Value();
423 LengthCheck(len, Uint64Array::kMaxElements); 521 LengthCheck(len, Uint64Array::kMaxElements);
424 return Uint64Array::New(len); 522 return Uint64Array::New(len);
425 } 523 }
426 524
427 525
526 DEFINE_NATIVE_ENTRY(Uint64Array_newTransferrable, 1) {
527 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
528 intptr_t len = length.Value();
529 LengthCheck(len, Uint64Array::kMaxElements);
530 uint64_t* bytes = OS::AllocateAlignedArray<uint64_t>(
531 len,
532 ExternalByteArrayData<uint64_t>::kAlignment);
533 return ExternalUint64Array::New(bytes,
534 len,
535 bytes,
536 OS::AlignedFree);
537 }
538
539
428 DEFINE_NATIVE_ENTRY(Uint64Array_getIndexed, 2) { 540 DEFINE_NATIVE_ENTRY(Uint64Array_getIndexed, 2) {
429 GETTER_UINT64(Uint64Array); 541 GETTER_UINT64(Uint64Array);
430 } 542 }
431 543
432 544
433 DEFINE_NATIVE_ENTRY(Uint64Array_setIndexed, 3) { 545 DEFINE_NATIVE_ENTRY(Uint64Array_setIndexed, 3) {
434 SETTER_UINT64(Uint64Array); 546 SETTER_UINT64(Uint64Array);
435 } 547 }
436 548
437 549
438 // Float32Array 550 // Float32Array
439 551
440 DEFINE_NATIVE_ENTRY(Float32Array_new, 1) { 552 DEFINE_NATIVE_ENTRY(Float32Array_new, 1) {
441 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); 553 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
442 intptr_t len = length.Value(); 554 intptr_t len = length.Value();
443 LengthCheck(len, Float32Array::kMaxElements); 555 LengthCheck(len, Float32Array::kMaxElements);
444 return Float32Array::New(len); 556 return Float32Array::New(len);
445 } 557 }
446 558
447 559
560 DEFINE_NATIVE_ENTRY(Float32Array_newTransferrable, 1) {
561 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
562 intptr_t len = length.Value();
563 LengthCheck(len, Float32Array::kMaxElements);
564 float* bytes = OS::AllocateAlignedArray<float>(
565 len,
566 ExternalByteArrayData<float>::kAlignment);
567 return ExternalFloat32Array::New(bytes,
568 len,
569 bytes,
570 OS::AlignedFree);
571 }
572
573
448 DEFINE_NATIVE_ENTRY(Float32Array_getIndexed, 2) { 574 DEFINE_NATIVE_ENTRY(Float32Array_getIndexed, 2) {
449 GETTER(Float32Array, Double, float); 575 GETTER(Float32Array, Double, float);
450 } 576 }
451 577
452 578
453 DEFINE_NATIVE_ENTRY(Float32Array_setIndexed, 3) { 579 DEFINE_NATIVE_ENTRY(Float32Array_setIndexed, 3) {
454 SETTER(Float32Array, Double, value, float); 580 SETTER(Float32Array, Double, value, float);
455 } 581 }
456 582
457 583
458 // Float64Array 584 // Float64Array
459 585
460 DEFINE_NATIVE_ENTRY(Float64Array_new, 1) { 586 DEFINE_NATIVE_ENTRY(Float64Array_new, 1) {
461 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); 587 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
462 intptr_t len = length.Value(); 588 intptr_t len = length.Value();
463 LengthCheck(len, Float64Array::kMaxElements); 589 LengthCheck(len, Float64Array::kMaxElements);
464 return Float64Array::New(len); 590 return Float64Array::New(len);
465 } 591 }
466 592
467 593
594 DEFINE_NATIVE_ENTRY(Float64Array_newTransferrable, 1) {
595 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
596 intptr_t len = length.Value();
597 LengthCheck(len, Float64Array::kMaxElements);
598 double* bytes = OS::AllocateAlignedArray<double>(
599 len,
600 ExternalByteArrayData<double>::kAlignment);
601 return ExternalFloat64Array::New(bytes,
602 len,
603 bytes,
604 OS::AlignedFree);
605 }
606
607
468 DEFINE_NATIVE_ENTRY(Float64Array_getIndexed, 2) { 608 DEFINE_NATIVE_ENTRY(Float64Array_getIndexed, 2) {
469 GETTER(Float64Array, Double, double); 609 GETTER(Float64Array, Double, double);
470 } 610 }
471 611
472 612
473 DEFINE_NATIVE_ENTRY(Float64Array_setIndexed, 3) { 613 DEFINE_NATIVE_ENTRY(Float64Array_setIndexed, 3) {
474 SETTER(Float64Array, Double, value, double); 614 SETTER(Float64Array, Double, value, double);
475 } 615 }
476 616
477 617
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
588 DEFINE_NATIVE_ENTRY(ExternalFloat64Array_getIndexed, 2) { 728 DEFINE_NATIVE_ENTRY(ExternalFloat64Array_getIndexed, 2) {
589 GETTER(ExternalFloat64Array, Double, double); 729 GETTER(ExternalFloat64Array, Double, double);
590 } 730 }
591 731
592 732
593 DEFINE_NATIVE_ENTRY(ExternalFloat64Array_setIndexed, 3) { 733 DEFINE_NATIVE_ENTRY(ExternalFloat64Array_setIndexed, 3) {
594 SETTER(ExternalFloat64Array, Double, value, double); 734 SETTER(ExternalFloat64Array, Double, value, double);
595 } 735 }
596 736
597 } // namespace dart 737 } // namespace dart
OLDNEW
« no previous file with comments | « no previous file | runtime/lib/byte_array.dart » ('j') | runtime/lib/byte_array.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698