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

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

Issue 15689013: - Modify dart_api.h to be a proper C API. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 6 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 | « runtime/vm/bootstrap.cc ('k') | runtime/vm/dart_api_impl_test.cc » ('j') | 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 2344 matching lines...) Expand 10 before | Expand all | Expand 10 after
2355 2355
2356 2356
2357 // --- Typed Data --- 2357 // --- Typed Data ---
2358 2358
2359 2359
2360 // Helper method to get the type of a TypedData object. 2360 // Helper method to get the type of a TypedData object.
2361 static Dart_TypedData_Type GetType(intptr_t class_id) { 2361 static Dart_TypedData_Type GetType(intptr_t class_id) {
2362 Dart_TypedData_Type type; 2362 Dart_TypedData_Type type;
2363 switch (class_id) { 2363 switch (class_id) {
2364 case kByteDataViewCid : 2364 case kByteDataViewCid :
2365 type = kByteData; 2365 type = Dart_TypedData_kByteData;
2366 break; 2366 break;
2367 case kTypedDataInt8ArrayCid : 2367 case kTypedDataInt8ArrayCid :
2368 case kTypedDataInt8ArrayViewCid : 2368 case kTypedDataInt8ArrayViewCid :
2369 case kExternalTypedDataInt8ArrayCid : 2369 case kExternalTypedDataInt8ArrayCid :
2370 type = kInt8; 2370 type = Dart_TypedData_kInt8;
2371 break; 2371 break;
2372 case kTypedDataUint8ArrayCid : 2372 case kTypedDataUint8ArrayCid :
2373 case kTypedDataUint8ArrayViewCid : 2373 case kTypedDataUint8ArrayViewCid :
2374 case kExternalTypedDataUint8ArrayCid : 2374 case kExternalTypedDataUint8ArrayCid :
2375 type = kUint8; 2375 type = Dart_TypedData_kUint8;
2376 break; 2376 break;
2377 case kTypedDataUint8ClampedArrayCid : 2377 case kTypedDataUint8ClampedArrayCid :
2378 case kTypedDataUint8ClampedArrayViewCid : 2378 case kTypedDataUint8ClampedArrayViewCid :
2379 case kExternalTypedDataUint8ClampedArrayCid : 2379 case kExternalTypedDataUint8ClampedArrayCid :
2380 type = kUint8Clamped; 2380 type = Dart_TypedData_kUint8Clamped;
2381 break; 2381 break;
2382 case kTypedDataInt16ArrayCid : 2382 case kTypedDataInt16ArrayCid :
2383 case kTypedDataInt16ArrayViewCid : 2383 case kTypedDataInt16ArrayViewCid :
2384 case kExternalTypedDataInt16ArrayCid : 2384 case kExternalTypedDataInt16ArrayCid :
2385 type = kInt16; 2385 type = Dart_TypedData_kInt16;
2386 break; 2386 break;
2387 case kTypedDataUint16ArrayCid : 2387 case kTypedDataUint16ArrayCid :
2388 case kTypedDataUint16ArrayViewCid : 2388 case kTypedDataUint16ArrayViewCid :
2389 case kExternalTypedDataUint16ArrayCid : 2389 case kExternalTypedDataUint16ArrayCid :
2390 type = kUint16; 2390 type = Dart_TypedData_kUint16;
2391 break; 2391 break;
2392 case kTypedDataInt32ArrayCid : 2392 case kTypedDataInt32ArrayCid :
2393 case kTypedDataInt32ArrayViewCid : 2393 case kTypedDataInt32ArrayViewCid :
2394 case kExternalTypedDataInt32ArrayCid : 2394 case kExternalTypedDataInt32ArrayCid :
2395 type = kInt32; 2395 type = Dart_TypedData_kInt32;
2396 break; 2396 break;
2397 case kTypedDataUint32ArrayCid : 2397 case kTypedDataUint32ArrayCid :
2398 case kTypedDataUint32ArrayViewCid : 2398 case kTypedDataUint32ArrayViewCid :
2399 case kExternalTypedDataUint32ArrayCid : 2399 case kExternalTypedDataUint32ArrayCid :
2400 type = kUint32; 2400 type = Dart_TypedData_kUint32;
2401 break; 2401 break;
2402 case kTypedDataInt64ArrayCid : 2402 case kTypedDataInt64ArrayCid :
2403 case kTypedDataInt64ArrayViewCid : 2403 case kTypedDataInt64ArrayViewCid :
2404 case kExternalTypedDataInt64ArrayCid : 2404 case kExternalTypedDataInt64ArrayCid :
2405 type = kInt64; 2405 type = Dart_TypedData_kInt64;
2406 break; 2406 break;
2407 case kTypedDataUint64ArrayCid : 2407 case kTypedDataUint64ArrayCid :
2408 case kTypedDataUint64ArrayViewCid : 2408 case kTypedDataUint64ArrayViewCid :
2409 case kExternalTypedDataUint64ArrayCid : 2409 case kExternalTypedDataUint64ArrayCid :
2410 type = kUint64; 2410 type = Dart_TypedData_kUint64;
2411 break; 2411 break;
2412 case kTypedDataFloat32ArrayCid : 2412 case kTypedDataFloat32ArrayCid :
2413 case kTypedDataFloat32ArrayViewCid : 2413 case kTypedDataFloat32ArrayViewCid :
2414 case kExternalTypedDataFloat32ArrayCid : 2414 case kExternalTypedDataFloat32ArrayCid :
2415 type = kFloat32; 2415 type = Dart_TypedData_kFloat32;
2416 break; 2416 break;
2417 case kTypedDataFloat64ArrayCid : 2417 case kTypedDataFloat64ArrayCid :
2418 case kTypedDataFloat64ArrayViewCid : 2418 case kTypedDataFloat64ArrayViewCid :
2419 case kExternalTypedDataFloat64ArrayCid : 2419 case kExternalTypedDataFloat64ArrayCid :
2420 type = kFloat64; 2420 type = Dart_TypedData_kFloat64;
2421 break; 2421 break;
2422 case kTypedDataFloat32x4ArrayCid : 2422 case kTypedDataFloat32x4ArrayCid :
2423 case kTypedDataFloat32x4ArrayViewCid : 2423 case kTypedDataFloat32x4ArrayViewCid :
2424 case kExternalTypedDataFloat32x4ArrayCid : 2424 case kExternalTypedDataFloat32x4ArrayCid :
2425 type = kFloat32x4; 2425 type = Dart_TypedData_kFloat32x4;
2426 break; 2426 break;
2427 default: 2427 default:
2428 type = kInvalid; 2428 type = Dart_TypedData_kInvalid;
2429 break; 2429 break;
2430 } 2430 }
2431 return type; 2431 return type;
2432 } 2432 }
2433 2433
2434 2434
2435 DART_EXPORT Dart_TypedData_Type Dart_GetTypeOfTypedData(Dart_Handle object) { 2435 DART_EXPORT Dart_TypedData_Type Dart_GetTypeOfTypedData(Dart_Handle object) {
2436 intptr_t class_id = Api::ClassId(object); 2436 intptr_t class_id = Api::ClassId(object);
2437 if (RawObject::IsTypedDataClassId(class_id) || 2437 if (RawObject::IsTypedDataClassId(class_id) ||
2438 RawObject::IsTypedDataViewClassId(class_id)) { 2438 RawObject::IsTypedDataViewClassId(class_id)) {
2439 return GetType(class_id); 2439 return GetType(class_id);
2440 } 2440 }
2441 return kInvalid; 2441 return Dart_TypedData_kInvalid;
2442 } 2442 }
2443 2443
2444 2444
2445 DART_EXPORT Dart_TypedData_Type Dart_GetTypeOfExternalTypedData( 2445 DART_EXPORT Dart_TypedData_Type Dart_GetTypeOfExternalTypedData(
2446 Dart_Handle object) { 2446 Dart_Handle object) {
2447 intptr_t class_id = Api::ClassId(object); 2447 intptr_t class_id = Api::ClassId(object);
2448 if (RawObject::IsExternalTypedDataClassId(class_id) || 2448 if (RawObject::IsExternalTypedDataClassId(class_id) ||
2449 RawObject::IsTypedDataViewClassId(class_id)) { 2449 RawObject::IsTypedDataViewClassId(class_id)) {
2450 return GetType(class_id); 2450 return GetType(class_id);
2451 } 2451 }
2452 return kInvalid; 2452 return Dart_TypedData_kInvalid;
2453 } 2453 }
2454 2454
2455 2455
2456 static RawObject* GetByteDataConstructor(Isolate* isolate, 2456 static RawObject* GetByteDataConstructor(Isolate* isolate,
2457 const String& constructor_name, 2457 const String& constructor_name,
2458 intptr_t num_args) { 2458 intptr_t num_args) {
2459 const Library& lib = 2459 const Library& lib =
2460 Library::Handle(isolate->object_store()->typed_data_library()); 2460 Library::Handle(isolate->object_store()->typed_data_library());
2461 ASSERT(!lib.IsNull()); 2461 ASSERT(!lib.IsNull());
2462 const Class& cls = 2462 const Class& cls =
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
2544 return Api::NewHandle(isolate, result.raw()); 2544 return Api::NewHandle(isolate, result.raw());
2545 } 2545 }
2546 2546
2547 2547
2548 DART_EXPORT Dart_Handle Dart_NewTypedData(Dart_TypedData_Type type, 2548 DART_EXPORT Dart_Handle Dart_NewTypedData(Dart_TypedData_Type type,
2549 intptr_t length) { 2549 intptr_t length) {
2550 Isolate* isolate = Isolate::Current(); 2550 Isolate* isolate = Isolate::Current();
2551 DARTSCOPE(isolate); 2551 DARTSCOPE(isolate);
2552 CHECK_CALLBACK_STATE(isolate); 2552 CHECK_CALLBACK_STATE(isolate);
2553 switch (type) { 2553 switch (type) {
2554 case kByteData : 2554 case Dart_TypedData_kByteData :
2555 return NewByteData(isolate, length); 2555 return NewByteData(isolate, length);
2556 case kInt8 : 2556 case Dart_TypedData_kInt8 :
2557 return NewTypedData(isolate, kTypedDataInt8ArrayCid, length); 2557 return NewTypedData(isolate, kTypedDataInt8ArrayCid, length);
2558 case kUint8 : 2558 case Dart_TypedData_kUint8 :
2559 return NewTypedData(isolate, kTypedDataUint8ArrayCid, length); 2559 return NewTypedData(isolate, kTypedDataUint8ArrayCid, length);
2560 case kUint8Clamped : 2560 case Dart_TypedData_kUint8Clamped :
2561 return NewTypedData(isolate, kTypedDataUint8ClampedArrayCid, length); 2561 return NewTypedData(isolate, kTypedDataUint8ClampedArrayCid, length);
2562 case kInt16 : 2562 case Dart_TypedData_kInt16 :
2563 return NewTypedData(isolate, kTypedDataInt16ArrayCid, length); 2563 return NewTypedData(isolate, kTypedDataInt16ArrayCid, length);
2564 case kUint16 : 2564 case Dart_TypedData_kUint16 :
2565 return NewTypedData(isolate, kTypedDataUint16ArrayCid, length); 2565 return NewTypedData(isolate, kTypedDataUint16ArrayCid, length);
2566 case kInt32 : 2566 case Dart_TypedData_kInt32 :
2567 return NewTypedData(isolate, kTypedDataInt32ArrayCid, length); 2567 return NewTypedData(isolate, kTypedDataInt32ArrayCid, length);
2568 case kUint32 : 2568 case Dart_TypedData_kUint32 :
2569 return NewTypedData(isolate, kTypedDataUint32ArrayCid, length); 2569 return NewTypedData(isolate, kTypedDataUint32ArrayCid, length);
2570 case kInt64 : 2570 case Dart_TypedData_kInt64 :
2571 return NewTypedData(isolate, kTypedDataInt64ArrayCid, length); 2571 return NewTypedData(isolate, kTypedDataInt64ArrayCid, length);
2572 case kUint64 : 2572 case Dart_TypedData_kUint64 :
2573 return NewTypedData(isolate, kTypedDataUint64ArrayCid, length); 2573 return NewTypedData(isolate, kTypedDataUint64ArrayCid, length);
2574 case kFloat32 : 2574 case Dart_TypedData_kFloat32 :
2575 return NewTypedData(isolate, kTypedDataFloat32ArrayCid, length); 2575 return NewTypedData(isolate, kTypedDataFloat32ArrayCid, length);
2576 case kFloat64 : 2576 case Dart_TypedData_kFloat64 :
2577 return NewTypedData(isolate, kTypedDataFloat64ArrayCid, length); 2577 return NewTypedData(isolate, kTypedDataFloat64ArrayCid, length);
2578 case kFloat32x4: 2578 case Dart_TypedData_kFloat32x4:
2579 return NewTypedData(isolate, kTypedDataFloat32x4ArrayCid, length); 2579 return NewTypedData(isolate, kTypedDataFloat32x4ArrayCid, length);
2580 default: 2580 default:
2581 return Api::NewError("%s expects argument 'type' to be of 'TypedData'", 2581 return Api::NewError("%s expects argument 'type' to be of 'TypedData'",
2582 CURRENT_FUNC); 2582 CURRENT_FUNC);
2583 } 2583 }
2584 UNREACHABLE(); 2584 UNREACHABLE();
2585 return Api::Null(); 2585 return Api::Null();
2586 } 2586 }
2587 2587
2588 2588
2589 DART_EXPORT Dart_Handle Dart_NewExternalTypedData( 2589 DART_EXPORT Dart_Handle Dart_NewExternalTypedData(
2590 Dart_TypedData_Type type, 2590 Dart_TypedData_Type type,
2591 void* data, 2591 void* data,
2592 intptr_t length) { 2592 intptr_t length) {
2593 Isolate* isolate = Isolate::Current(); 2593 Isolate* isolate = Isolate::Current();
2594 DARTSCOPE(isolate); 2594 DARTSCOPE(isolate);
2595 if (data == NULL && length != 0) { 2595 if (data == NULL && length != 0) {
2596 RETURN_NULL_ERROR(data); 2596 RETURN_NULL_ERROR(data);
2597 } 2597 }
2598 CHECK_CALLBACK_STATE(isolate); 2598 CHECK_CALLBACK_STATE(isolate);
2599 switch (type) { 2599 switch (type) {
2600 case kByteData: 2600 case Dart_TypedData_kByteData:
2601 return NewExternalByteData(isolate, data, length); 2601 return NewExternalByteData(isolate, data, length);
2602 case kInt8: 2602 case Dart_TypedData_kInt8:
2603 return NewExternalTypedData(isolate, 2603 return NewExternalTypedData(isolate,
2604 kExternalTypedDataInt8ArrayCid, 2604 kExternalTypedDataInt8ArrayCid,
2605 data, 2605 data,
2606 length); 2606 length);
2607 case kUint8: 2607 case Dart_TypedData_kUint8:
2608 return NewExternalTypedData(isolate, 2608 return NewExternalTypedData(isolate,
2609 kExternalTypedDataUint8ArrayCid, 2609 kExternalTypedDataUint8ArrayCid,
2610 data, 2610 data,
2611 length); 2611 length);
2612 case kUint8Clamped: 2612 case Dart_TypedData_kUint8Clamped:
2613 return NewExternalTypedData(isolate, 2613 return NewExternalTypedData(isolate,
2614 kExternalTypedDataUint8ClampedArrayCid, 2614 kExternalTypedDataUint8ClampedArrayCid,
2615 data, 2615 data,
2616 length); 2616 length);
2617 case kInt16: 2617 case Dart_TypedData_kInt16:
2618 return NewExternalTypedData(isolate, 2618 return NewExternalTypedData(isolate,
2619 kExternalTypedDataInt16ArrayCid, 2619 kExternalTypedDataInt16ArrayCid,
2620 data, 2620 data,
2621 length); 2621 length);
2622 case kUint16: 2622 case Dart_TypedData_kUint16:
2623 return NewExternalTypedData(isolate, 2623 return NewExternalTypedData(isolate,
2624 kExternalTypedDataUint16ArrayCid, 2624 kExternalTypedDataUint16ArrayCid,
2625 data, 2625 data,
2626 length); 2626 length);
2627 case kInt32: 2627 case Dart_TypedData_kInt32:
2628 return NewExternalTypedData(isolate, 2628 return NewExternalTypedData(isolate,
2629 kExternalTypedDataInt32ArrayCid, 2629 kExternalTypedDataInt32ArrayCid,
2630 data, 2630 data,
2631 length); 2631 length);
2632 case kUint32: 2632 case Dart_TypedData_kUint32:
2633 return NewExternalTypedData(isolate, 2633 return NewExternalTypedData(isolate,
2634 kExternalTypedDataUint32ArrayCid, 2634 kExternalTypedDataUint32ArrayCid,
2635 data, 2635 data,
2636 length); 2636 length);
2637 case kInt64: 2637 case Dart_TypedData_kInt64:
2638 return NewExternalTypedData(isolate, 2638 return NewExternalTypedData(isolate,
2639 kExternalTypedDataInt64ArrayCid, 2639 kExternalTypedDataInt64ArrayCid,
2640 data, 2640 data,
2641 length); 2641 length);
2642 case kUint64: 2642 case Dart_TypedData_kUint64:
2643 return NewExternalTypedData(isolate, 2643 return NewExternalTypedData(isolate,
2644 kExternalTypedDataUint64ArrayCid, 2644 kExternalTypedDataUint64ArrayCid,
2645 data, 2645 data,
2646 length); 2646 length);
2647 case kFloat32: 2647 case Dart_TypedData_kFloat32:
2648 return NewExternalTypedData(isolate, 2648 return NewExternalTypedData(isolate,
2649 kExternalTypedDataFloat32ArrayCid, 2649 kExternalTypedDataFloat32ArrayCid,
2650 data, 2650 data,
2651 length); 2651 length);
2652 case kFloat64: 2652 case Dart_TypedData_kFloat64:
2653 return NewExternalTypedData(isolate, 2653 return NewExternalTypedData(isolate,
2654 kExternalTypedDataFloat64ArrayCid, 2654 kExternalTypedDataFloat64ArrayCid,
2655 data, 2655 data,
2656 length); 2656 length);
2657 case kFloat32x4: 2657 case Dart_TypedData_kFloat32x4:
2658 return NewExternalTypedData(isolate, 2658 return NewExternalTypedData(isolate,
2659 kExternalTypedDataFloat32x4ArrayCid, 2659 kExternalTypedDataFloat32x4ArrayCid,
2660 data, 2660 data,
2661 length); 2661 length);
2662 default: 2662 default:
2663 return Api::NewError("%s expects argument 'type' to be of" 2663 return Api::NewError("%s expects argument 'type' to be of"
2664 " 'external TypedData'", CURRENT_FUNC); 2664 " 'external TypedData'", CURRENT_FUNC);
2665 } 2665 }
2666 UNREACHABLE(); 2666 UNREACHABLE();
2667 return Api::Null(); 2667 return Api::Null();
(...skipping 2169 matching lines...) Expand 10 before | Expand all | Expand 10 after
4837 } 4837 }
4838 { 4838 {
4839 NoGCScope no_gc; 4839 NoGCScope no_gc;
4840 RawObject* raw_obj = obj.raw(); 4840 RawObject* raw_obj = obj.raw();
4841 isolate->heap()->SetPeer(raw_obj, peer); 4841 isolate->heap()->SetPeer(raw_obj, peer);
4842 } 4842 }
4843 return Api::Success(); 4843 return Api::Success();
4844 } 4844 }
4845 4845
4846 } // namespace dart 4846 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/bootstrap.cc ('k') | runtime/vm/dart_api_impl_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698