Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 "include/dart_api.h" | 5 #include "include/dart_api.h" |
| 6 | 6 |
| 7 #include "platform/assert.h" | 7 #include "platform/assert.h" |
| 8 #include "vm/bigint_operations.h" | 8 #include "vm/bigint_operations.h" |
| 9 #include "vm/class_finalizer.h" | 9 #include "vm/class_finalizer.h" |
| 10 #include "vm/compiler.h" | 10 #include "vm/compiler.h" |
| (...skipping 2470 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2481 | 2481 |
| 2482 static Dart_Handle NewTypedData(Isolate* isolate, | 2482 static Dart_Handle NewTypedData(Isolate* isolate, |
| 2483 intptr_t cid, | 2483 intptr_t cid, |
| 2484 intptr_t length) { | 2484 intptr_t length) { |
| 2485 CHECK_LENGTH(length, TypedData::MaxElements(cid)); | 2485 CHECK_LENGTH(length, TypedData::MaxElements(cid)); |
| 2486 return Api::NewHandle(isolate, TypedData::New(cid, length)); | 2486 return Api::NewHandle(isolate, TypedData::New(cid, length)); |
| 2487 } | 2487 } |
| 2488 | 2488 |
| 2489 | 2489 |
| 2490 static Dart_Handle NewExternalTypedData( | 2490 static Dart_Handle NewExternalTypedData( |
| 2491 Isolate* isolate, | |
| 2491 intptr_t cid, | 2492 intptr_t cid, |
| 2492 void* data, | 2493 void* data, |
| 2493 intptr_t length, | 2494 intptr_t length, |
| 2494 void* peer, | 2495 void* peer, |
| 2495 Dart_WeakPersistentHandleFinalizer callback) { | 2496 Dart_WeakPersistentHandleFinalizer callback) { |
| 2496 CHECK_LENGTH(length, ExternalTypedData::MaxElements(cid)); | 2497 CHECK_LENGTH(length, ExternalTypedData::MaxElements(cid)); |
| 2497 const ExternalTypedData& obj = ExternalTypedData::Handle( | 2498 const ExternalTypedData& result = ExternalTypedData::Handle( |
|
siva
2013/05/16 18:28:18
isolate,
here too since it is available.
| |
| 2498 ExternalTypedData::New(cid, | 2499 ExternalTypedData::New(cid, reinterpret_cast<uint8_t*>(data), length)); |
| 2499 reinterpret_cast<uint8_t*>(data), | 2500 result.AddFinalizer(peer, callback); |
| 2500 length)); | 2501 return Api::NewHandle(isolate, result.raw()); |
| 2501 return reinterpret_cast<Dart_Handle>(obj.AddFinalizer(peer, callback)); | |
| 2502 } | 2502 } |
| 2503 | 2503 |
| 2504 | 2504 |
| 2505 static Dart_Handle NewExternalByteData(Isolate* isolate, | 2505 static Dart_Handle NewExternalByteData(Isolate* isolate, |
| 2506 void* data, | 2506 void* data, |
| 2507 intptr_t length, | 2507 intptr_t length, |
| 2508 void* peer, | 2508 void* peer, |
| 2509 Dart_WeakPersistentHandleFinalizer cb) { | 2509 Dart_WeakPersistentHandleFinalizer cb) { |
| 2510 Dart_Handle ext_data = NewExternalTypedData(kExternalTypedDataUint8ArrayCid, | 2510 Dart_Handle ext_data = NewExternalTypedData(isolate, |
| 2511 kExternalTypedDataUint8ArrayCid, | |
| 2511 data, | 2512 data, |
| 2512 length, | 2513 length, |
| 2513 peer, | 2514 peer, |
| 2514 cb); | 2515 cb); |
| 2515 if (::Dart_IsError(ext_data)) { | 2516 if (::Dart_IsError(ext_data)) { |
| 2516 return ext_data; | 2517 return ext_data; |
| 2517 } | 2518 } |
| 2518 Object& result = Object::Handle(isolate); | 2519 Object& result = Object::Handle(isolate); |
| 2519 result = GetByteDataConstructor(isolate, Symbols::ByteDataDotview(), 3); | 2520 result = GetByteDataConstructor(isolate, Symbols::ByteDataDotview(), 3); |
| 2520 ASSERT(!result.IsNull()); | 2521 ASSERT(!result.IsNull()); |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2593 Isolate* isolate = Isolate::Current(); | 2594 Isolate* isolate = Isolate::Current(); |
| 2594 DARTSCOPE(isolate); | 2595 DARTSCOPE(isolate); |
| 2595 if (data == NULL && length != 0) { | 2596 if (data == NULL && length != 0) { |
| 2596 RETURN_NULL_ERROR(data); | 2597 RETURN_NULL_ERROR(data); |
| 2597 } | 2598 } |
| 2598 CHECK_CALLBACK_STATE(isolate); | 2599 CHECK_CALLBACK_STATE(isolate); |
| 2599 switch (type) { | 2600 switch (type) { |
| 2600 case kByteData: | 2601 case kByteData: |
| 2601 return NewExternalByteData(isolate, data, length, peer, callback); | 2602 return NewExternalByteData(isolate, data, length, peer, callback); |
| 2602 case kInt8: | 2603 case kInt8: |
| 2603 return NewExternalTypedData(kExternalTypedDataInt8ArrayCid, | 2604 return NewExternalTypedData(isolate, |
| 2605 kExternalTypedDataInt8ArrayCid, | |
| 2604 data, | 2606 data, |
| 2605 length, | 2607 length, |
| 2606 peer, | 2608 peer, |
| 2607 callback); | 2609 callback); |
| 2608 case kUint8: | 2610 case kUint8: |
| 2609 return NewExternalTypedData(kExternalTypedDataUint8ArrayCid, | 2611 return NewExternalTypedData(isolate, |
| 2612 kExternalTypedDataUint8ArrayCid, | |
| 2610 data, | 2613 data, |
| 2611 length, | 2614 length, |
| 2612 peer, | 2615 peer, |
| 2613 callback); | 2616 callback); |
| 2614 case kUint8Clamped: | 2617 case kUint8Clamped: |
| 2615 return NewExternalTypedData(kExternalTypedDataUint8ClampedArrayCid, | 2618 return NewExternalTypedData(isolate, |
| 2619 kExternalTypedDataUint8ClampedArrayCid, | |
| 2616 data, | 2620 data, |
| 2617 length, | 2621 length, |
| 2618 peer, | 2622 peer, |
| 2619 callback); | 2623 callback); |
| 2620 case kInt16: | 2624 case kInt16: |
| 2621 return NewExternalTypedData(kExternalTypedDataInt16ArrayCid, | 2625 return NewExternalTypedData(isolate, |
| 2626 kExternalTypedDataInt16ArrayCid, | |
| 2622 data, | 2627 data, |
| 2623 length, | 2628 length, |
| 2624 peer, | 2629 peer, |
| 2625 callback); | 2630 callback); |
| 2626 case kUint16: | 2631 case kUint16: |
| 2627 return NewExternalTypedData(kExternalTypedDataUint16ArrayCid, | 2632 return NewExternalTypedData(isolate, |
| 2633 kExternalTypedDataUint16ArrayCid, | |
| 2628 data, | 2634 data, |
| 2629 length, | 2635 length, |
| 2630 peer, | 2636 peer, |
| 2631 callback); | 2637 callback); |
| 2632 case kInt32: | 2638 case kInt32: |
| 2633 return NewExternalTypedData(kExternalTypedDataInt32ArrayCid, | 2639 return NewExternalTypedData(isolate, |
| 2640 kExternalTypedDataInt32ArrayCid, | |
| 2634 data, | 2641 data, |
| 2635 length, | 2642 length, |
| 2636 peer, | 2643 peer, |
| 2637 callback); | 2644 callback); |
| 2638 case kUint32: | 2645 case kUint32: |
| 2639 return NewExternalTypedData(kExternalTypedDataUint32ArrayCid, | 2646 return NewExternalTypedData(isolate, |
| 2647 kExternalTypedDataUint32ArrayCid, | |
| 2640 data, | 2648 data, |
| 2641 length, | 2649 length, |
| 2642 peer, | 2650 peer, |
| 2643 callback); | 2651 callback); |
| 2644 case kInt64: | 2652 case kInt64: |
| 2645 return NewExternalTypedData(kExternalTypedDataInt64ArrayCid, | 2653 return NewExternalTypedData(isolate, |
| 2654 kExternalTypedDataInt64ArrayCid, | |
| 2646 data, | 2655 data, |
| 2647 length, | 2656 length, |
| 2648 peer, | 2657 peer, |
| 2649 callback); | 2658 callback); |
| 2650 case kUint64: | 2659 case kUint64: |
| 2651 return NewExternalTypedData(kExternalTypedDataUint64ArrayCid, | 2660 return NewExternalTypedData(isolate, |
| 2661 kExternalTypedDataUint64ArrayCid, | |
| 2652 data, | 2662 data, |
| 2653 length, | 2663 length, |
| 2654 peer, | 2664 peer, |
| 2655 callback); | 2665 callback); |
| 2656 case kFloat32: | 2666 case kFloat32: |
| 2657 return NewExternalTypedData(kExternalTypedDataFloat32ArrayCid, | 2667 return NewExternalTypedData(isolate, |
| 2668 kExternalTypedDataFloat32ArrayCid, | |
| 2658 data, | 2669 data, |
| 2659 length, | 2670 length, |
| 2660 peer, | 2671 peer, |
| 2661 callback); | 2672 callback); |
| 2662 case kFloat64: | 2673 case kFloat64: |
| 2663 return NewExternalTypedData(kExternalTypedDataFloat64ArrayCid, | 2674 return NewExternalTypedData(isolate, |
| 2675 kExternalTypedDataFloat64ArrayCid, | |
| 2664 data, | 2676 data, |
| 2665 length, | 2677 length, |
| 2666 peer, | 2678 peer, |
| 2667 callback); | 2679 callback); |
| 2668 case kFloat32x4: | 2680 case kFloat32x4: |
| 2669 return NewExternalTypedData(kExternalTypedDataFloat32x4ArrayCid, | 2681 return NewExternalTypedData(isolate, |
| 2682 kExternalTypedDataFloat32x4ArrayCid, | |
| 2670 data, | 2683 data, |
| 2671 length, | 2684 length, |
| 2672 peer, | 2685 peer, |
| 2673 callback); | 2686 callback); |
| 2674 default: | 2687 default: |
| 2675 return Api::NewError("%s expects argument 'type' to be of" | 2688 return Api::NewError("%s expects argument 'type' to be of" |
| 2676 " 'external TypedData'", CURRENT_FUNC); | 2689 " 'external TypedData'", CURRENT_FUNC); |
| 2677 } | 2690 } |
| 2678 UNREACHABLE(); | 2691 UNREACHABLE(); |
| 2679 return Api::Null(isolate); | 2692 return Api::Null(isolate); |
| (...skipping 2176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4856 } | 4869 } |
| 4857 { | 4870 { |
| 4858 NoGCScope no_gc; | 4871 NoGCScope no_gc; |
| 4859 RawObject* raw_obj = obj.raw(); | 4872 RawObject* raw_obj = obj.raw(); |
| 4860 isolate->heap()->SetPeer(raw_obj, peer); | 4873 isolate->heap()->SetPeer(raw_obj, peer); |
| 4861 } | 4874 } |
| 4862 return Api::Success(isolate); | 4875 return Api::Success(isolate); |
| 4863 } | 4876 } |
| 4864 | 4877 |
| 4865 } // namespace dart | 4878 } // namespace dart |
| OLD | NEW |