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

Side by Side Diff: runtime/vm/dart_api_impl.cc

Issue 14676020: Fix dartbug.com/10674: (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 7 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 | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698