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

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

Issue 8588040: Add a mid-sized integration test for the Dart Embedding Api which (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: '' Created 9 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
OLDNEW
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, 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 "vm/bigint_operations.h" 7 #include "vm/bigint_operations.h"
8 #include "vm/class_finalizer.h" 8 #include "vm/class_finalizer.h"
9 #include "vm/compiler.h" 9 #include "vm/compiler.h"
10 #include "vm/dart.h" 10 #include "vm/dart.h"
(...skipping 583 matching lines...) Expand 10 before | Expand all | Expand 10 after
594 594
595 DART_EXPORT Dart_Handle Dart_HandleMessage(Dart_Port dest_port, 595 DART_EXPORT Dart_Handle Dart_HandleMessage(Dart_Port dest_port,
596 Dart_Port reply_port, 596 Dart_Port reply_port,
597 Dart_Message dart_message) { 597 Dart_Message dart_message) {
598 DARTSCOPE(Isolate::Current()); 598 DARTSCOPE(Isolate::Current());
599 599
600 const Instance& msg = Instance::Handle(DeserializeMessage(dart_message)); 600 const Instance& msg = Instance::Handle(DeserializeMessage(dart_message));
601 const String& class_name = 601 const String& class_name =
602 String::Handle(String::NewSymbol("ReceivePortImpl")); 602 String::Handle(String::NewSymbol("ReceivePortImpl"));
603 const String& function_name = 603 const String& function_name =
604 String::Handle(String::NewSymbol("handleMessage_")); 604 String::Handle(String::NewSymbol("_handleMessage"));
605 const int kNumArguments = 3; 605 const int kNumArguments = 3;
606 const Array& kNoArgumentNames = Array::Handle(); 606 const Array& kNoArgumentNames = Array::Handle();
607 const Function& function = Function::Handle( 607 const Function& function = Function::Handle(
608 Resolver::ResolveStatic(Library::Handle(Library::CoreLibrary()), 608 Resolver::ResolveStatic(Library::Handle(Library::CoreLibrary()),
609 class_name, 609 class_name,
610 function_name, 610 function_name,
611 kNumArguments, 611 kNumArguments,
612 kNoArgumentNames, 612 kNoArgumentNames,
613 Resolver::kIsQualified)); 613 Resolver::kIsQualified));
614 GrowableArray<const Object*> arguments(kNumArguments); 614 GrowableArray<const Object*> arguments(kNumArguments);
(...skipping 22 matching lines...) Expand all
637 isolate->StandardRunLoop(); 637 isolate->StandardRunLoop();
638 result = Api::Success(); 638 result = Api::Success();
639 } else { 639 } else {
640 SetupErrorResult(&result); 640 SetupErrorResult(&result);
641 } 641 }
642 isolate->set_long_jump_base(base); 642 isolate->set_long_jump_base(base);
643 return result; 643 return result;
644 } 644 }
645 645
646 646
647 DART_EXPORT bool Dart_IsolateHasActivePorts() {
648 // TODO(turnidge): before submitting turn this into a straight field access
649 // instead of a static method call?
650 Dart_EnterScope();
651 Dart_Handle lib = Dart_LookupLibrary(Dart_NewString("dart:coreimpl"));
652 if (Dart_IsError(lib)) {
653 return lib;
654 }
655 Dart_Handle count = Dart_InvokeStatic(lib,
656 Dart_NewString("ReceivePortImpl"),
657 Dart_NewString("_getNumLivePorts"),
658 0,
659 NULL);
660 DART_CHECK_VALID(count);
661 int64_t count_value = 0;
662 Dart_Handle result = Dart_IntegerValue(count, &count_value);
663 DART_CHECK_VALID(result);
664 Dart_ExitScope();
665
666 return count_value > 0;
667 }
668
669
647 static uint8_t* allocator(uint8_t* ptr, intptr_t old_size, intptr_t new_size) { 670 static uint8_t* allocator(uint8_t* ptr, intptr_t old_size, intptr_t new_size) {
648 void* new_ptr = realloc(reinterpret_cast<void*>(ptr), new_size); 671 void* new_ptr = realloc(reinterpret_cast<void*>(ptr), new_size);
649 return reinterpret_cast<uint8_t*>(new_ptr); 672 return reinterpret_cast<uint8_t*>(new_ptr);
650 } 673 }
651 674
652 675
653 DART_EXPORT bool Dart_PostIntArray(Dart_Port port, 676 DART_EXPORT bool Dart_PostIntArray(Dart_Port port,
654 intptr_t len, 677 intptr_t len,
655 intptr_t* data) { 678 intptr_t* data) {
656 uint8_t* buffer = NULL; 679 uint8_t* buffer = NULL;
(...skipping 10 matching lines...) Expand all
667 DARTSCOPE(Isolate::Current()); 690 DARTSCOPE(Isolate::Current());
668 const Object& object = Object::Handle(Api::UnwrapHandle(handle)); 691 const Object& object = Object::Handle(Api::UnwrapHandle(handle));
669 uint8_t* data = NULL; 692 uint8_t* data = NULL;
670 SnapshotWriter writer(false, &data, &allocator); 693 SnapshotWriter writer(false, &data, &allocator);
671 writer.WriteObject(object.raw()); 694 writer.WriteObject(object.raw());
672 writer.FinalizeBuffer(); 695 writer.FinalizeBuffer();
673 return PortMap::PostMessage(port, kNoReplyPort, data); 696 return PortMap::PostMessage(port, kNoReplyPort, data);
674 } 697 }
675 698
676 699
700 DART_EXPORT Dart_Handle Dart_NewSendPort(Dart_Port port) {
701 // TODO(turnidge): before submitting consider grabbing the impl of this from
702 // lib/isolate.cc instead and sharing the code.
703 Dart_Handle lib = Dart_LookupLibrary(Dart_NewString("dart:coreimpl"));
704 if (Dart_IsError(lib)) {
705 return lib;
706 }
707 Dart_Handle arg = Dart_NewInteger(port);
708 if (Dart_IsError(arg)) {
709 return arg;
710 }
711 Dart_Handle sp_args[1];
712 sp_args[0] = arg;
713 Dart_Handle send_port = Dart_InvokeStatic(lib,
714 Dart_NewString("SendPortImpl"),
715 Dart_NewString("_create"),
716 1,
717 sp_args);
718 return send_port;
719 }
720
721
722 DART_EXPORT Dart_Handle Dart_NewReceivePort(Dart_Port port) {
723 // TODO(turnidge): before submitting consider grabbing the impl of this from
724 // lib/isolate.cc instead and sharing the code.
725 Dart_Handle lib = Dart_LookupLibrary(Dart_NewString("dart:coreimpl"));
726 if (Dart_IsError(lib)) {
727 return lib;
728 }
729 Dart_Handle arg = Dart_NewInteger(port);
730 if (Dart_IsError(arg)) {
731 return arg;
732 }
733 Dart_Handle rp_args[1];
734 rp_args[0] = arg;
735 Dart_Handle recv_port = Dart_InvokeStatic(lib,
736 Dart_NewString("ReceivePortImpl"),
737 Dart_NewString("_create"),
738 1,
739 rp_args);
740 return recv_port;
741 }
742
743
744 DART_EXPORT Dart_Port Dart_GetMainPort() {
745 Isolate* isolate = Isolate::Current();
746 ASSERT(isolate);
747 return isolate->main_port();
748 }
749
677 // --- Scopes ---- 750 // --- Scopes ----
678 751
679 752
680 DART_EXPORT void Dart_EnterScope() { 753 DART_EXPORT void Dart_EnterScope() {
681 Isolate* isolate = Isolate::Current(); 754 Isolate* isolate = Isolate::Current();
682 ASSERT(isolate != NULL); 755 ASSERT(isolate != NULL);
683 ApiState* state = isolate->api_state(); 756 ApiState* state = isolate->api_state();
684 ASSERT(state != NULL); 757 ASSERT(state != NULL);
685 ApiLocalScope* new_scope = new ApiLocalScope(state->top_scope(), 758 ApiLocalScope* new_scope = new ApiLocalScope(state->top_scope(),
686 reinterpret_cast<uword>(&state)); 759 reinterpret_cast<uword>(&state));
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
830 if (obj.IsBigint()) { 903 if (obj.IsBigint()) {
831 Bigint& bigint = Bigint::Handle(); 904 Bigint& bigint = Bigint::Handle();
832 bigint ^= obj.raw(); 905 bigint ^= obj.raw();
833 if (BigintOperations::FitsIntoInt64(bigint)) { 906 if (BigintOperations::FitsIntoInt64(bigint)) {
834 *value = BigintOperations::ToInt64(bigint); 907 *value = BigintOperations::ToInt64(bigint);
835 return Api::Success(); 908 return Api::Success();
836 } else { 909 } else {
837 return Api::Error("Integer too big to fit in int64_t"); 910 return Api::Error("Integer too big to fit in int64_t");
838 } 911 }
839 } 912 }
913 OS::Print("%s\n", obj.ToCString());
Anton Muhin 2011/11/23 19:28:14 nit: debugging stuff
turnidge 2011/11/23 21:45:37 Oops, thanks.
840 return Api::Error("Object is not a Integer"); 914 return Api::Error("Object is not a Integer");
841 } 915 }
842 916
843 917
844 DART_EXPORT Dart_Handle Dart_IntegerValueHexCString(Dart_Handle integer, 918 DART_EXPORT Dart_Handle Dart_IntegerValueHexCString(Dart_Handle integer,
845 const char** value) { 919 const char** value) {
846 DARTSCOPE(Isolate::Current()); 920 DARTSCOPE(Isolate::Current());
847 const Object& obj = Object::Handle(Api::UnwrapHandle(integer)); 921 const Object& obj = Object::Handle(Api::UnwrapHandle(integer));
848 Bigint& bigint = Bigint::Handle(); 922 Bigint& bigint = Bigint::Handle();
849 if (obj.IsSmi() || obj.IsMint()) { 923 if (obj.IsSmi() || obj.IsMint()) {
(...skipping 1445 matching lines...) Expand 10 before | Expand all | Expand 10 after
2295 } 2369 }
2296 delete debug_region; 2370 delete debug_region;
2297 } else { 2371 } else {
2298 *buffer = NULL; 2372 *buffer = NULL;
2299 *buffer_size = 0; 2373 *buffer_size = 0;
2300 } 2374 }
2301 } 2375 }
2302 2376
2303 2377
2304 } // namespace dart 2378 } // namespace dart
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698