| OLD | NEW |
| 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 Loading... |
| 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) { | 288 DEFINE_NATIVE_ENTRY(Int8Array_newTransferable, 1) { |
| 289 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); | 289 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); |
| 290 intptr_t len = length.Value(); | 290 intptr_t len = length.Value(); |
| 291 LengthCheck(len, Int8Array::kMaxElements); | 291 LengthCheck(len, Int8Array::kMaxElements); |
| 292 int8_t* bytes = OS::AllocateAlignedArray<int8_t>( | 292 int8_t* bytes = OS::AllocateAlignedArray<int8_t>( |
| 293 len, | 293 len, |
| 294 ExternalByteArrayData<int8_t>::kAlignment); | 294 ExternalByteArrayData<int8_t>::kAlignment); |
| 295 return ExternalInt8Array::New(bytes, | 295 return ExternalInt8Array::New(bytes, |
| 296 len, | 296 len, |
| 297 bytes, | 297 bytes, |
| 298 OS::AlignedFree); | 298 OS::AlignedFree); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 312 // Uint8Array | 312 // Uint8Array |
| 313 | 313 |
| 314 DEFINE_NATIVE_ENTRY(Uint8Array_new, 1) { | 314 DEFINE_NATIVE_ENTRY(Uint8Array_new, 1) { |
| 315 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); | 315 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); |
| 316 intptr_t len = length.Value(); | 316 intptr_t len = length.Value(); |
| 317 LengthCheck(len, Uint8Array::kMaxElements); | 317 LengthCheck(len, Uint8Array::kMaxElements); |
| 318 return Uint8Array::New(len); | 318 return Uint8Array::New(len); |
| 319 } | 319 } |
| 320 | 320 |
| 321 | 321 |
| 322 DEFINE_NATIVE_ENTRY(Uint8Array_newTransferrable, 1) { | 322 DEFINE_NATIVE_ENTRY(Uint8Array_newTransferable, 1) { |
| 323 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); | 323 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); |
| 324 intptr_t len = length.Value(); | 324 intptr_t len = length.Value(); |
| 325 LengthCheck(len, Uint8Array::kMaxElements); | 325 LengthCheck(len, Uint8Array::kMaxElements); |
| 326 uint8_t* bytes = OS::AllocateAlignedArray<uint8_t>( | 326 uint8_t* bytes = OS::AllocateAlignedArray<uint8_t>( |
| 327 len, | 327 len, |
| 328 ExternalByteArrayData<uint8_t>::kAlignment); | 328 ExternalByteArrayData<uint8_t>::kAlignment); |
| 329 return ExternalUint8Array::New(bytes, | 329 return ExternalUint8Array::New(bytes, |
| 330 len, | 330 len, |
| 331 bytes, | 331 bytes, |
| 332 OS::AlignedFree); | 332 OS::AlignedFree); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 346 // Int16Array | 346 // Int16Array |
| 347 | 347 |
| 348 DEFINE_NATIVE_ENTRY(Int16Array_new, 1) { | 348 DEFINE_NATIVE_ENTRY(Int16Array_new, 1) { |
| 349 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); | 349 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); |
| 350 intptr_t len = length.Value(); | 350 intptr_t len = length.Value(); |
| 351 LengthCheck(len, Int16Array::kMaxElements); | 351 LengthCheck(len, Int16Array::kMaxElements); |
| 352 return Int16Array::New(len); | 352 return Int16Array::New(len); |
| 353 } | 353 } |
| 354 | 354 |
| 355 | 355 |
| 356 DEFINE_NATIVE_ENTRY(Int16Array_newTransferrable, 1) { | 356 DEFINE_NATIVE_ENTRY(Int16Array_newTransferable, 1) { |
| 357 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); | 357 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); |
| 358 intptr_t len = length.Value(); | 358 intptr_t len = length.Value(); |
| 359 LengthCheck(len, Int16Array::kMaxElements); | 359 LengthCheck(len, Int16Array::kMaxElements); |
| 360 int16_t* bytes = OS::AllocateAlignedArray<int16_t>( | 360 int16_t* bytes = OS::AllocateAlignedArray<int16_t>( |
| 361 len, | 361 len, |
| 362 ExternalByteArrayData<int16_t>::kAlignment); | 362 ExternalByteArrayData<int16_t>::kAlignment); |
| 363 return ExternalInt16Array::New(bytes, | 363 return ExternalInt16Array::New(bytes, |
| 364 len, | 364 len, |
| 365 bytes, | 365 bytes, |
| 366 OS::AlignedFree); | 366 OS::AlignedFree); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 380 // Uint16Array | 380 // Uint16Array |
| 381 | 381 |
| 382 DEFINE_NATIVE_ENTRY(Uint16Array_new, 1) { | 382 DEFINE_NATIVE_ENTRY(Uint16Array_new, 1) { |
| 383 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); | 383 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); |
| 384 intptr_t len = length.Value(); | 384 intptr_t len = length.Value(); |
| 385 LengthCheck(len, Uint16Array::kMaxElements); | 385 LengthCheck(len, Uint16Array::kMaxElements); |
| 386 return Uint16Array::New(len); | 386 return Uint16Array::New(len); |
| 387 } | 387 } |
| 388 | 388 |
| 389 | 389 |
| 390 DEFINE_NATIVE_ENTRY(Uint16Array_newTransferrable, 1) { | 390 DEFINE_NATIVE_ENTRY(Uint16Array_newTransferable, 1) { |
| 391 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); | 391 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); |
| 392 intptr_t len = length.Value(); | 392 intptr_t len = length.Value(); |
| 393 LengthCheck(len, Uint16Array::kMaxElements); | 393 LengthCheck(len, Uint16Array::kMaxElements); |
| 394 uint16_t* bytes = OS::AllocateAlignedArray<uint16_t>( | 394 uint16_t* bytes = OS::AllocateAlignedArray<uint16_t>( |
| 395 len, | 395 len, |
| 396 ExternalByteArrayData<uint16_t>::kAlignment); | 396 ExternalByteArrayData<uint16_t>::kAlignment); |
| 397 return ExternalUint16Array::New(bytes, | 397 return ExternalUint16Array::New(bytes, |
| 398 len, | 398 len, |
| 399 bytes, | 399 bytes, |
| 400 OS::AlignedFree); | 400 OS::AlignedFree); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 414 // Int32Array | 414 // Int32Array |
| 415 | 415 |
| 416 DEFINE_NATIVE_ENTRY(Int32Array_new, 1) { | 416 DEFINE_NATIVE_ENTRY(Int32Array_new, 1) { |
| 417 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); | 417 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); |
| 418 intptr_t len = length.Value(); | 418 intptr_t len = length.Value(); |
| 419 LengthCheck(len, Int32Array::kMaxElements); | 419 LengthCheck(len, Int32Array::kMaxElements); |
| 420 return Int32Array::New(len); | 420 return Int32Array::New(len); |
| 421 } | 421 } |
| 422 | 422 |
| 423 | 423 |
| 424 DEFINE_NATIVE_ENTRY(Int32Array_newTransferrable, 1) { | 424 DEFINE_NATIVE_ENTRY(Int32Array_newTransferable, 1) { |
| 425 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); | 425 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); |
| 426 intptr_t len = length.Value(); | 426 intptr_t len = length.Value(); |
| 427 LengthCheck(len, Int32Array::kMaxElements); | 427 LengthCheck(len, Int32Array::kMaxElements); |
| 428 int32_t* bytes = OS::AllocateAlignedArray<int32_t>( | 428 int32_t* bytes = OS::AllocateAlignedArray<int32_t>( |
| 429 len, | 429 len, |
| 430 ExternalByteArrayData<int32_t>::kAlignment); | 430 ExternalByteArrayData<int32_t>::kAlignment); |
| 431 return ExternalInt32Array::New(bytes, | 431 return ExternalInt32Array::New(bytes, |
| 432 len, | 432 len, |
| 433 bytes, | 433 bytes, |
| 434 OS::AlignedFree); | 434 OS::AlignedFree); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 448 // Uint32Array | 448 // Uint32Array |
| 449 | 449 |
| 450 DEFINE_NATIVE_ENTRY(Uint32Array_new, 1) { | 450 DEFINE_NATIVE_ENTRY(Uint32Array_new, 1) { |
| 451 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); | 451 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); |
| 452 intptr_t len = length.Value(); | 452 intptr_t len = length.Value(); |
| 453 LengthCheck(len, Uint32Array::kMaxElements); | 453 LengthCheck(len, Uint32Array::kMaxElements); |
| 454 return Uint32Array::New(len); | 454 return Uint32Array::New(len); |
| 455 } | 455 } |
| 456 | 456 |
| 457 | 457 |
| 458 DEFINE_NATIVE_ENTRY(Uint32Array_newTransferrable, 1) { | 458 DEFINE_NATIVE_ENTRY(Uint32Array_newTransferable, 1) { |
| 459 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); | 459 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); |
| 460 intptr_t len = length.Value(); | 460 intptr_t len = length.Value(); |
| 461 LengthCheck(len, Uint32Array::kMaxElements); | 461 LengthCheck(len, Uint32Array::kMaxElements); |
| 462 uint32_t* bytes = OS::AllocateAlignedArray<uint32_t>( | 462 uint32_t* bytes = OS::AllocateAlignedArray<uint32_t>( |
| 463 len, | 463 len, |
| 464 ExternalByteArrayData<uint32_t>::kAlignment); | 464 ExternalByteArrayData<uint32_t>::kAlignment); |
| 465 return ExternalUint32Array::New(bytes, | 465 return ExternalUint32Array::New(bytes, |
| 466 len, | 466 len, |
| 467 bytes, | 467 bytes, |
| 468 OS::AlignedFree); | 468 OS::AlignedFree); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 482 // Int64Array | 482 // Int64Array |
| 483 | 483 |
| 484 DEFINE_NATIVE_ENTRY(Int64Array_new, 1) { | 484 DEFINE_NATIVE_ENTRY(Int64Array_new, 1) { |
| 485 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); | 485 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); |
| 486 intptr_t len = length.Value(); | 486 intptr_t len = length.Value(); |
| 487 LengthCheck(len, Int64Array::kMaxElements); | 487 LengthCheck(len, Int64Array::kMaxElements); |
| 488 return Int64Array::New(len); | 488 return Int64Array::New(len); |
| 489 } | 489 } |
| 490 | 490 |
| 491 | 491 |
| 492 DEFINE_NATIVE_ENTRY(Int64Array_newTransferrable, 1) { | 492 DEFINE_NATIVE_ENTRY(Int64Array_newTransferable, 1) { |
| 493 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); | 493 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); |
| 494 intptr_t len = length.Value(); | 494 intptr_t len = length.Value(); |
| 495 LengthCheck(len, Int64Array::kMaxElements); | 495 LengthCheck(len, Int64Array::kMaxElements); |
| 496 int64_t* bytes = OS::AllocateAlignedArray<int64_t>( | 496 int64_t* bytes = OS::AllocateAlignedArray<int64_t>( |
| 497 len, | 497 len, |
| 498 ExternalByteArrayData<int64_t>::kAlignment); | 498 ExternalByteArrayData<int64_t>::kAlignment); |
| 499 return ExternalInt64Array::New(bytes, | 499 return ExternalInt64Array::New(bytes, |
| 500 len, | 500 len, |
| 501 bytes, | 501 bytes, |
| 502 OS::AlignedFree); | 502 OS::AlignedFree); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 516 // Uint64Array | 516 // Uint64Array |
| 517 | 517 |
| 518 DEFINE_NATIVE_ENTRY(Uint64Array_new, 1) { | 518 DEFINE_NATIVE_ENTRY(Uint64Array_new, 1) { |
| 519 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); | 519 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); |
| 520 intptr_t len = length.Value(); | 520 intptr_t len = length.Value(); |
| 521 LengthCheck(len, Uint64Array::kMaxElements); | 521 LengthCheck(len, Uint64Array::kMaxElements); |
| 522 return Uint64Array::New(len); | 522 return Uint64Array::New(len); |
| 523 } | 523 } |
| 524 | 524 |
| 525 | 525 |
| 526 DEFINE_NATIVE_ENTRY(Uint64Array_newTransferrable, 1) { | 526 DEFINE_NATIVE_ENTRY(Uint64Array_newTransferable, 1) { |
| 527 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); | 527 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); |
| 528 intptr_t len = length.Value(); | 528 intptr_t len = length.Value(); |
| 529 LengthCheck(len, Uint64Array::kMaxElements); | 529 LengthCheck(len, Uint64Array::kMaxElements); |
| 530 uint64_t* bytes = OS::AllocateAlignedArray<uint64_t>( | 530 uint64_t* bytes = OS::AllocateAlignedArray<uint64_t>( |
| 531 len, | 531 len, |
| 532 ExternalByteArrayData<uint64_t>::kAlignment); | 532 ExternalByteArrayData<uint64_t>::kAlignment); |
| 533 return ExternalUint64Array::New(bytes, | 533 return ExternalUint64Array::New(bytes, |
| 534 len, | 534 len, |
| 535 bytes, | 535 bytes, |
| 536 OS::AlignedFree); | 536 OS::AlignedFree); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 550 // Float32Array | 550 // Float32Array |
| 551 | 551 |
| 552 DEFINE_NATIVE_ENTRY(Float32Array_new, 1) { | 552 DEFINE_NATIVE_ENTRY(Float32Array_new, 1) { |
| 553 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); | 553 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); |
| 554 intptr_t len = length.Value(); | 554 intptr_t len = length.Value(); |
| 555 LengthCheck(len, Float32Array::kMaxElements); | 555 LengthCheck(len, Float32Array::kMaxElements); |
| 556 return Float32Array::New(len); | 556 return Float32Array::New(len); |
| 557 } | 557 } |
| 558 | 558 |
| 559 | 559 |
| 560 DEFINE_NATIVE_ENTRY(Float32Array_newTransferrable, 1) { | 560 DEFINE_NATIVE_ENTRY(Float32Array_newTransferable, 1) { |
| 561 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); | 561 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); |
| 562 intptr_t len = length.Value(); | 562 intptr_t len = length.Value(); |
| 563 LengthCheck(len, Float32Array::kMaxElements); | 563 LengthCheck(len, Float32Array::kMaxElements); |
| 564 float* bytes = OS::AllocateAlignedArray<float>( | 564 float* bytes = OS::AllocateAlignedArray<float>( |
| 565 len, | 565 len, |
| 566 ExternalByteArrayData<float>::kAlignment); | 566 ExternalByteArrayData<float>::kAlignment); |
| 567 return ExternalFloat32Array::New(bytes, | 567 return ExternalFloat32Array::New(bytes, |
| 568 len, | 568 len, |
| 569 bytes, | 569 bytes, |
| 570 OS::AlignedFree); | 570 OS::AlignedFree); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 584 // Float64Array | 584 // Float64Array |
| 585 | 585 |
| 586 DEFINE_NATIVE_ENTRY(Float64Array_new, 1) { | 586 DEFINE_NATIVE_ENTRY(Float64Array_new, 1) { |
| 587 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); | 587 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); |
| 588 intptr_t len = length.Value(); | 588 intptr_t len = length.Value(); |
| 589 LengthCheck(len, Float64Array::kMaxElements); | 589 LengthCheck(len, Float64Array::kMaxElements); |
| 590 return Float64Array::New(len); | 590 return Float64Array::New(len); |
| 591 } | 591 } |
| 592 | 592 |
| 593 | 593 |
| 594 DEFINE_NATIVE_ENTRY(Float64Array_newTransferrable, 1) { | 594 DEFINE_NATIVE_ENTRY(Float64Array_newTransferable, 1) { |
| 595 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); | 595 GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); |
| 596 intptr_t len = length.Value(); | 596 intptr_t len = length.Value(); |
| 597 LengthCheck(len, Float64Array::kMaxElements); | 597 LengthCheck(len, Float64Array::kMaxElements); |
| 598 double* bytes = OS::AllocateAlignedArray<double>( | 598 double* bytes = OS::AllocateAlignedArray<double>( |
| 599 len, | 599 len, |
| 600 ExternalByteArrayData<double>::kAlignment); | 600 ExternalByteArrayData<double>::kAlignment); |
| 601 return ExternalFloat64Array::New(bytes, | 601 return ExternalFloat64Array::New(bytes, |
| 602 len, | 602 len, |
| 603 bytes, | 603 bytes, |
| 604 OS::AlignedFree); | 604 OS::AlignedFree); |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 728 DEFINE_NATIVE_ENTRY(ExternalFloat64Array_getIndexed, 2) { | 728 DEFINE_NATIVE_ENTRY(ExternalFloat64Array_getIndexed, 2) { |
| 729 GETTER(ExternalFloat64Array, Double, double); | 729 GETTER(ExternalFloat64Array, Double, double); |
| 730 } | 730 } |
| 731 | 731 |
| 732 | 732 |
| 733 DEFINE_NATIVE_ENTRY(ExternalFloat64Array_setIndexed, 3) { | 733 DEFINE_NATIVE_ENTRY(ExternalFloat64Array_setIndexed, 3) { |
| 734 SETTER(ExternalFloat64Array, Double, value, double); | 734 SETTER(ExternalFloat64Array, Double, value, double); |
| 735 } | 735 } |
| 736 | 736 |
| 737 } // namespace dart | 737 } // namespace dart |
| OLD | NEW |