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

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

Issue 1401413002: Move no_callback_scope_depth_ and cha_ from isolate -> thread (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Spelling fix Created 5 years, 2 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
« no previous file with comments | « runtime/vm/dart_api_impl.h ('k') | runtime/vm/dart_entry.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 #include "include/dart_mirrors_api.h" 6 #include "include/dart_mirrors_api.h"
7 #include "include/dart_native_api.h" 7 #include "include/dart_native_api.h"
8 8
9 #include "platform/assert.h" 9 #include "platform/assert.h"
10 #include "vm/class_finalizer.h" 10 #include "vm/class_finalizer.h"
(...skipping 433 matching lines...) Expand 10 before | Expand all | Expand 10 after
444 } 444 }
445 445
446 446
447 Dart_Isolate Api::CastIsolate(Isolate* isolate) { 447 Dart_Isolate Api::CastIsolate(Isolate* isolate) {
448 return reinterpret_cast<Dart_Isolate>(isolate); 448 return reinterpret_cast<Dart_Isolate>(isolate);
449 } 449 }
450 450
451 451
452 Dart_Handle Api::NewError(const char* format, ...) { 452 Dart_Handle Api::NewError(const char* format, ...) {
453 DARTSCOPE(Thread::Current()); 453 DARTSCOPE(Thread::Current());
454 CHECK_CALLBACK_STATE(I); 454 CHECK_CALLBACK_STATE(T);
455 455
456 va_list args; 456 va_list args;
457 va_start(args, format); 457 va_start(args, format);
458 intptr_t len = OS::VSNPrint(NULL, 0, format, args); 458 intptr_t len = OS::VSNPrint(NULL, 0, format, args);
459 va_end(args); 459 va_end(args);
460 460
461 char* buffer = Z->Alloc<char>(len + 1); 461 char* buffer = Z->Alloc<char>(len + 1);
462 va_list args2; 462 va_list args2;
463 va_start(args2, format); 463 va_start(args2, format);
464 OS::VSNPrint(buffer, (len + 1), format, args2); 464 OS::VSNPrint(buffer, (len + 1), format, args2);
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after
807 } else { 807 } else {
808 return Api::NewError("Can only get stacktraces from error handles."); 808 return Api::NewError("Can only get stacktraces from error handles.");
809 } 809 }
810 } 810 }
811 811
812 812
813 // TODO(turnidge): This clones Api::NewError. I need to use va_copy to 813 // TODO(turnidge): This clones Api::NewError. I need to use va_copy to
814 // fix this but not sure if it available on all of our builds. 814 // fix this but not sure if it available on all of our builds.
815 DART_EXPORT Dart_Handle Dart_NewApiError(const char* error) { 815 DART_EXPORT Dart_Handle Dart_NewApiError(const char* error) {
816 DARTSCOPE(Thread::Current()); 816 DARTSCOPE(Thread::Current());
817 CHECK_CALLBACK_STATE(I); 817 CHECK_CALLBACK_STATE(T);
818 818
819 const String& message = String::Handle(Z, String::New(error)); 819 const String& message = String::Handle(Z, String::New(error));
820 return Api::NewHandle(I, ApiError::New(message)); 820 return Api::NewHandle(I, ApiError::New(message));
821 } 821 }
822 822
823 823
824 DART_EXPORT Dart_Handle Dart_NewUnhandledExceptionError(Dart_Handle exception) { 824 DART_EXPORT Dart_Handle Dart_NewUnhandledExceptionError(Dart_Handle exception) {
825 DARTSCOPE(Thread::Current()); 825 DARTSCOPE(Thread::Current());
826 CHECK_CALLBACK_STATE(I); 826 CHECK_CALLBACK_STATE(T);
827 827
828 Instance& obj = Instance::Handle(Z); 828 Instance& obj = Instance::Handle(Z);
829 intptr_t class_id = Api::ClassId(exception); 829 intptr_t class_id = Api::ClassId(exception);
830 if ((class_id == kApiErrorCid) || (class_id == kLanguageErrorCid)) { 830 if ((class_id == kApiErrorCid) || (class_id == kLanguageErrorCid)) {
831 obj = String::New(::Dart_GetError(exception)); 831 obj = String::New(::Dart_GetError(exception));
832 } else { 832 } else {
833 obj = Api::UnwrapInstanceHandle(Z, exception).raw(); 833 obj = Api::UnwrapInstanceHandle(Z, exception).raw();
834 if (obj.IsNull()) { 834 if (obj.IsNull()) {
835 RETURN_TYPE_ERROR(Z, exception, Instance); 835 RETURN_TYPE_ERROR(Z, exception, Instance);
836 } 836 }
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
890 OS::Abort(); 890 OS::Abort();
891 } 891 }
892 892
893 893
894 DART_EXPORT Dart_Handle Dart_ToString(Dart_Handle object) { 894 DART_EXPORT Dart_Handle Dart_ToString(Dart_Handle object) {
895 DARTSCOPE(Thread::Current()); 895 DARTSCOPE(Thread::Current());
896 const Object& obj = Object::Handle(Z, Api::UnwrapHandle(object)); 896 const Object& obj = Object::Handle(Z, Api::UnwrapHandle(object));
897 if (obj.IsString()) { 897 if (obj.IsString()) {
898 return Api::NewHandle(I, obj.raw()); 898 return Api::NewHandle(I, obj.raw());
899 } else if (obj.IsInstance()) { 899 } else if (obj.IsInstance()) {
900 CHECK_CALLBACK_STATE(I); 900 CHECK_CALLBACK_STATE(T);
901 const Instance& receiver = Instance::Cast(obj); 901 const Instance& receiver = Instance::Cast(obj);
902 return Api::NewHandle(I, DartLibraryCalls::ToString(receiver)); 902 return Api::NewHandle(I, DartLibraryCalls::ToString(receiver));
903 } else { 903 } else {
904 CHECK_CALLBACK_STATE(I); 904 CHECK_CALLBACK_STATE(T);
905 // This is a VM internal object. Call the C++ method of printing. 905 // This is a VM internal object. Call the C++ method of printing.
906 return Api::NewHandle(I, String::New(obj.ToCString())); 906 return Api::NewHandle(I, String::New(obj.ToCString()));
907 } 907 }
908 } 908 }
909 909
910 910
911 DART_EXPORT bool Dart_IdentityEquals(Dart_Handle obj1, Dart_Handle obj2) { 911 DART_EXPORT bool Dart_IdentityEquals(Dart_Handle obj1, Dart_Handle obj2) {
912 DARTSCOPE(Thread::Current()); 912 DARTSCOPE(Thread::Current());
913 { 913 {
914 NoSafepointScope no_safepoint_scope; 914 NoSafepointScope no_safepoint_scope;
(...skipping 732 matching lines...) Expand 10 before | Expand all | Expand 10 after
1647 MonitorLocker ml(data->monitor); 1647 MonitorLocker ml(data->monitor);
1648 data->done = true; 1648 data->done = true;
1649 ml.Notify(); 1649 ml.Notify();
1650 } 1650 }
1651 1651
1652 1652
1653 DART_EXPORT Dart_Handle Dart_RunLoop() { 1653 DART_EXPORT Dart_Handle Dart_RunLoop() {
1654 Thread* T = Thread::Current(); 1654 Thread* T = Thread::Current();
1655 Isolate* I = T->isolate(); 1655 Isolate* I = T->isolate();
1656 CHECK_ISOLATE_SCOPE(I); 1656 CHECK_ISOLATE_SCOPE(I);
1657 CHECK_CALLBACK_STATE(I); 1657 CHECK_CALLBACK_STATE(T);
1658 Monitor monitor; 1658 Monitor monitor;
1659 MonitorLocker ml(&monitor); 1659 MonitorLocker ml(&monitor);
1660 { 1660 {
1661 SwitchIsolateScope switch_scope(NULL); 1661 SwitchIsolateScope switch_scope(NULL);
1662 1662
1663 RunLoopData data; 1663 RunLoopData data;
1664 data.monitor = &monitor; 1664 data.monitor = &monitor;
1665 data.done = false; 1665 data.done = false;
1666 I->message_handler()->Run( 1666 I->message_handler()->Run(
1667 Dart::thread_pool(), 1667 Dart::thread_pool(),
1668 NULL, RunLoopDone, reinterpret_cast<uword>(&data)); 1668 NULL, RunLoopDone, reinterpret_cast<uword>(&data));
1669 while (!data.done) { 1669 while (!data.done) {
1670 ml.Wait(); 1670 ml.Wait();
1671 } 1671 }
1672 } 1672 }
1673 if (I->object_store()->sticky_error() != Object::null()) { 1673 if (I->object_store()->sticky_error() != Object::null()) {
1674 Dart_Handle error = Api::NewHandle(I, I->object_store()->sticky_error()); 1674 Dart_Handle error = Api::NewHandle(I, I->object_store()->sticky_error());
1675 I->object_store()->clear_sticky_error(); 1675 I->object_store()->clear_sticky_error();
1676 return error; 1676 return error;
1677 } 1677 }
1678 if (FLAG_print_class_table) { 1678 if (FLAG_print_class_table) {
1679 HANDLESCOPE(T); 1679 HANDLESCOPE(T);
1680 I->class_table()->Print(); 1680 I->class_table()->Print();
1681 } 1681 }
1682 return Api::Success(); 1682 return Api::Success();
1683 } 1683 }
1684 1684
1685 1685
1686 DART_EXPORT Dart_Handle Dart_HandleMessage() { 1686 DART_EXPORT Dart_Handle Dart_HandleMessage() {
1687 Isolate* isolate = Isolate::Current(); 1687 Thread* thread = Thread::Current();
1688 Isolate* isolate = thread->isolate();
1688 CHECK_ISOLATE_SCOPE(isolate); 1689 CHECK_ISOLATE_SCOPE(isolate);
1689 CHECK_CALLBACK_STATE(isolate); 1690 CHECK_CALLBACK_STATE(thread);
1690 if (isolate->message_handler()->HandleNextMessage() != MessageHandler::kOK) { 1691 if (isolate->message_handler()->HandleNextMessage() != MessageHandler::kOK) {
1691 Dart_Handle error = Api::NewHandle(isolate, 1692 Dart_Handle error = Api::NewHandle(isolate,
1692 isolate->object_store()->sticky_error()); 1693 isolate->object_store()->sticky_error());
1693 isolate->object_store()->clear_sticky_error(); 1694 isolate->object_store()->clear_sticky_error();
1694 return error; 1695 return error;
1695 } 1696 }
1696 return Api::Success(); 1697 return Api::Success();
1697 } 1698 }
1698 1699
1699 1700
1700 DART_EXPORT bool Dart_HandleServiceMessages() { 1701 DART_EXPORT bool Dart_HandleServiceMessages() {
1701 Isolate* isolate = Isolate::Current(); 1702 Thread* thread = Thread::Current();
1703 Isolate* isolate = thread->isolate();
1702 CHECK_ISOLATE_SCOPE(isolate); 1704 CHECK_ISOLATE_SCOPE(isolate);
1703 CHECK_CALLBACK_STATE(isolate); 1705 CHECK_CALLBACK_STATE(thread);
1704 1706
1705 ASSERT(isolate->GetAndClearResumeRequest() == false); 1707 ASSERT(isolate->GetAndClearResumeRequest() == false);
1706 MessageHandler::MessageStatus status = 1708 MessageHandler::MessageStatus status =
1707 isolate->message_handler()->HandleOOBMessages(); 1709 isolate->message_handler()->HandleOOBMessages();
1708 bool resume = isolate->GetAndClearResumeRequest(); 1710 bool resume = isolate->GetAndClearResumeRequest();
1709 return (status != MessageHandler::kOK) || resume; 1711 return (status != MessageHandler::kOK) || resume;
1710 } 1712 }
1711 1713
1712 1714
1713 DART_EXPORT bool Dart_HasServiceMessages() { 1715 DART_EXPORT bool Dart_HasServiceMessages() {
(...skipping 26 matching lines...) Expand all
1740 MessageWriter writer(&data, &allocator, false); 1742 MessageWriter writer(&data, &allocator, false);
1741 writer.WriteMessage(object); 1743 writer.WriteMessage(object);
1742 intptr_t len = writer.BytesWritten(); 1744 intptr_t len = writer.BytesWritten();
1743 return PortMap::PostMessage(new Message( 1745 return PortMap::PostMessage(new Message(
1744 port_id, data, len, Message::kNormalPriority)); 1746 port_id, data, len, Message::kNormalPriority));
1745 } 1747 }
1746 1748
1747 1749
1748 DART_EXPORT Dart_Handle Dart_NewSendPort(Dart_Port port_id) { 1750 DART_EXPORT Dart_Handle Dart_NewSendPort(Dart_Port port_id) {
1749 DARTSCOPE(Thread::Current()); 1751 DARTSCOPE(Thread::Current());
1750 CHECK_CALLBACK_STATE(I); 1752 CHECK_CALLBACK_STATE(T);
1751 if (port_id == ILLEGAL_PORT) { 1753 if (port_id == ILLEGAL_PORT) {
1752 return Api::NewError("%s: illegal port_id %" Pd64 ".", 1754 return Api::NewError("%s: illegal port_id %" Pd64 ".",
1753 CURRENT_FUNC, 1755 CURRENT_FUNC,
1754 port_id); 1756 port_id);
1755 } 1757 }
1756 return Api::NewHandle(I, SendPort::New(port_id)); 1758 return Api::NewHandle(I, SendPort::New(port_id));
1757 } 1759 }
1758 1760
1759 1761
1760 DART_EXPORT Dart_Handle Dart_SendPortGetId(Dart_Handle port, 1762 DART_EXPORT Dart_Handle Dart_SendPortGetId(Dart_Handle port,
1761 Dart_Port* port_id) { 1763 Dart_Port* port_id) {
1762 DARTSCOPE(Thread::Current()); 1764 DARTSCOPE(Thread::Current());
1763 CHECK_CALLBACK_STATE(I); 1765 CHECK_CALLBACK_STATE(T);
1764 const SendPort& send_port = Api::UnwrapSendPortHandle(Z, port); 1766 const SendPort& send_port = Api::UnwrapSendPortHandle(Z, port);
1765 if (send_port.IsNull()) { 1767 if (send_port.IsNull()) {
1766 RETURN_TYPE_ERROR(Z, port, SendPort); 1768 RETURN_TYPE_ERROR(Z, port, SendPort);
1767 } 1769 }
1768 if (port_id == NULL) { 1770 if (port_id == NULL) {
1769 RETURN_NULL_ERROR(port_id); 1771 RETURN_NULL_ERROR(port_id);
1770 } 1772 }
1771 *port_id = send_port.Id(); 1773 *port_id = send_port.Id();
1772 return Api::Success(); 1774 return Api::Success();
1773 } 1775 }
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
1853 1855
1854 1856
1855 DART_EXPORT bool Dart_IsNull(Dart_Handle object) { 1857 DART_EXPORT bool Dart_IsNull(Dart_Handle object) {
1856 return Api::UnwrapHandle(object) == Object::null(); 1858 return Api::UnwrapHandle(object) == Object::null();
1857 } 1859 }
1858 1860
1859 1861
1860 DART_EXPORT Dart_Handle Dart_ObjectEquals(Dart_Handle obj1, Dart_Handle obj2, 1862 DART_EXPORT Dart_Handle Dart_ObjectEquals(Dart_Handle obj1, Dart_Handle obj2,
1861 bool* value) { 1863 bool* value) {
1862 DARTSCOPE(Thread::Current()); 1864 DARTSCOPE(Thread::Current());
1863 CHECK_CALLBACK_STATE(I); 1865 CHECK_CALLBACK_STATE(T);
1864 const Instance& expected = 1866 const Instance& expected =
1865 Instance::CheckedHandle(Z, Api::UnwrapHandle(obj1)); 1867 Instance::CheckedHandle(Z, Api::UnwrapHandle(obj1));
1866 const Instance& actual = 1868 const Instance& actual =
1867 Instance::CheckedHandle(Z, Api::UnwrapHandle(obj2)); 1869 Instance::CheckedHandle(Z, Api::UnwrapHandle(obj2));
1868 const Object& result = 1870 const Object& result =
1869 Object::Handle(Z, DartLibraryCalls::Equals(expected, actual)); 1871 Object::Handle(Z, DartLibraryCalls::Equals(expected, actual));
1870 if (result.IsBool()) { 1872 if (result.IsBool()) {
1871 *value = Bool::Cast(result).value(); 1873 *value = Bool::Cast(result).value();
1872 return Api::Success(); 1874 return Api::Success();
1873 } else if (result.IsError()) { 1875 } else if (result.IsError()) {
(...skipping 24 matching lines...) Expand all
1898 } 1900 }
1899 if (object == Api::Null()) { 1901 if (object == Api::Null()) {
1900 *value = false; 1902 *value = false;
1901 return Api::Success(); 1903 return Api::Success();
1902 } 1904 }
1903 const Instance& instance = Api::UnwrapInstanceHandle(Z, object); 1905 const Instance& instance = Api::UnwrapInstanceHandle(Z, object);
1904 if (instance.IsNull()) { 1906 if (instance.IsNull()) {
1905 *value = false; 1907 *value = false;
1906 RETURN_TYPE_ERROR(Z, object, Instance); 1908 RETURN_TYPE_ERROR(Z, object, Instance);
1907 } 1909 }
1908 CHECK_CALLBACK_STATE(I); 1910 CHECK_CALLBACK_STATE(T);
1909 Error& malformed_type_error = Error::Handle(Z); 1911 Error& malformed_type_error = Error::Handle(Z);
1910 *value = instance.IsInstanceOf(type_obj, 1912 *value = instance.IsInstanceOf(type_obj,
1911 Object::null_type_arguments(), 1913 Object::null_type_arguments(),
1912 &malformed_type_error); 1914 &malformed_type_error);
1913 ASSERT(malformed_type_error.IsNull()); // Type was created from a class. 1915 ASSERT(malformed_type_error.IsNull()); // Type was created from a class.
1914 return Api::Success(); 1916 return Api::Success();
1915 } 1917 }
1916 1918
1917 1919
1918 DART_EXPORT bool Dart_IsInstance(Dart_Handle object) { 1920 DART_EXPORT bool Dart_IsInstance(Dart_Handle object) {
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
2135 // Fast path for Smis. 2137 // Fast path for Smis.
2136 Thread* thread = Thread::Current(); 2138 Thread* thread = Thread::Current();
2137 Isolate* isolate = thread->isolate(); 2139 Isolate* isolate = thread->isolate();
2138 CHECK_ISOLATE(isolate); 2140 CHECK_ISOLATE(isolate);
2139 if (Smi::IsValid(value)) { 2141 if (Smi::IsValid(value)) {
2140 NOHANDLESCOPE(thread); 2142 NOHANDLESCOPE(thread);
2141 return Api::NewHandle(isolate, Smi::New(static_cast<intptr_t>(value))); 2143 return Api::NewHandle(isolate, Smi::New(static_cast<intptr_t>(value)));
2142 } 2144 }
2143 // Slow path for Mints and Bigints. 2145 // Slow path for Mints and Bigints.
2144 DARTSCOPE(thread); 2146 DARTSCOPE(thread);
2145 CHECK_CALLBACK_STATE(isolate); 2147 CHECK_CALLBACK_STATE(thread);
2146 return Api::NewHandle(isolate, Integer::New(value)); 2148 return Api::NewHandle(isolate, Integer::New(value));
2147 } 2149 }
2148 2150
2149 2151
2150 DART_EXPORT Dart_Handle Dart_NewIntegerFromUint64(uint64_t value) { 2152 DART_EXPORT Dart_Handle Dart_NewIntegerFromUint64(uint64_t value) {
2151 DARTSCOPE(Thread::Current()); 2153 DARTSCOPE(Thread::Current());
2152 CHECK_CALLBACK_STATE(I); 2154 CHECK_CALLBACK_STATE(T);
2153 return Api::NewHandle(I, Integer::NewFromUint64(value)); 2155 return Api::NewHandle(I, Integer::NewFromUint64(value));
2154 } 2156 }
2155 2157
2156 2158
2157 DART_EXPORT Dart_Handle Dart_NewIntegerFromHexCString(const char* str) { 2159 DART_EXPORT Dart_Handle Dart_NewIntegerFromHexCString(const char* str) {
2158 DARTSCOPE(Thread::Current()); 2160 DARTSCOPE(Thread::Current());
2159 CHECK_CALLBACK_STATE(I); 2161 CHECK_CALLBACK_STATE(T);
2160 const String& str_obj = String::Handle(Z, String::New(str)); 2162 const String& str_obj = String::Handle(Z, String::New(str));
2161 return Api::NewHandle(I, Integer::New(str_obj)); 2163 return Api::NewHandle(I, Integer::New(str_obj));
2162 } 2164 }
2163 2165
2164 2166
2165 DART_EXPORT Dart_Handle Dart_IntegerToInt64(Dart_Handle integer, 2167 DART_EXPORT Dart_Handle Dart_IntegerToInt64(Dart_Handle integer,
2166 int64_t* value) { 2168 int64_t* value) {
2167 // Fast path for Smis. 2169 // Fast path for Smis.
2168 Thread* thread = Thread::Current(); 2170 Thread* thread = Thread::Current();
2169 Isolate* isolate = thread->isolate(); 2171 Isolate* isolate = thread->isolate();
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
2248 *value = bigint.ToHexCString(BigintAllocate); 2250 *value = bigint.ToHexCString(BigintAllocate);
2249 } else { 2251 } else {
2250 *value = Bigint::Cast(int_obj).ToHexCString(BigintAllocate); 2252 *value = Bigint::Cast(int_obj).ToHexCString(BigintAllocate);
2251 } 2253 }
2252 return Api::Success(); 2254 return Api::Success();
2253 } 2255 }
2254 2256
2255 2257
2256 DART_EXPORT Dart_Handle Dart_NewDouble(double value) { 2258 DART_EXPORT Dart_Handle Dart_NewDouble(double value) {
2257 DARTSCOPE(Thread::Current()); 2259 DARTSCOPE(Thread::Current());
2258 CHECK_CALLBACK_STATE(I); 2260 CHECK_CALLBACK_STATE(T);
2259 return Api::NewHandle(I, Double::New(value)); 2261 return Api::NewHandle(I, Double::New(value));
2260 } 2262 }
2261 2263
2262 2264
2263 DART_EXPORT Dart_Handle Dart_DoubleValue(Dart_Handle double_obj, 2265 DART_EXPORT Dart_Handle Dart_DoubleValue(Dart_Handle double_obj,
2264 double* value) { 2266 double* value) {
2265 DARTSCOPE(Thread::Current()); 2267 DARTSCOPE(Thread::Current());
2266 const Double& obj = Api::UnwrapDoubleHandle(Z, double_obj); 2268 const Double& obj = Api::UnwrapDoubleHandle(Z, double_obj);
2267 if (obj.IsNull()) { 2269 if (obj.IsNull()) {
2268 RETURN_TYPE_ERROR(Z, double_obj, Double); 2270 RETURN_TYPE_ERROR(Z, double_obj, Double);
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
2319 *len = str_obj.Length(); 2321 *len = str_obj.Length();
2320 return Api::Success(); 2322 return Api::Success();
2321 } 2323 }
2322 2324
2323 2325
2324 DART_EXPORT Dart_Handle Dart_NewStringFromCString(const char* str) { 2326 DART_EXPORT Dart_Handle Dart_NewStringFromCString(const char* str) {
2325 DARTSCOPE(Thread::Current()); 2327 DARTSCOPE(Thread::Current());
2326 if (str == NULL) { 2328 if (str == NULL) {
2327 RETURN_NULL_ERROR(str); 2329 RETURN_NULL_ERROR(str);
2328 } 2330 }
2329 CHECK_CALLBACK_STATE(I); 2331 CHECK_CALLBACK_STATE(T);
2330 return Api::NewHandle(I, String::New(str)); 2332 return Api::NewHandle(I, String::New(str));
2331 } 2333 }
2332 2334
2333 2335
2334 DART_EXPORT Dart_Handle Dart_NewStringFromUTF8(const uint8_t* utf8_array, 2336 DART_EXPORT Dart_Handle Dart_NewStringFromUTF8(const uint8_t* utf8_array,
2335 intptr_t length) { 2337 intptr_t length) {
2336 DARTSCOPE(Thread::Current()); 2338 DARTSCOPE(Thread::Current());
2337 if (utf8_array == NULL && length != 0) { 2339 if (utf8_array == NULL && length != 0) {
2338 RETURN_NULL_ERROR(utf8_array); 2340 RETURN_NULL_ERROR(utf8_array);
2339 } 2341 }
2340 CHECK_LENGTH(length, String::kMaxElements); 2342 CHECK_LENGTH(length, String::kMaxElements);
2341 if (!Utf8::IsValid(utf8_array, length)) { 2343 if (!Utf8::IsValid(utf8_array, length)) {
2342 return Api::NewError("%s expects argument 'str' to be valid UTF-8.", 2344 return Api::NewError("%s expects argument 'str' to be valid UTF-8.",
2343 CURRENT_FUNC); 2345 CURRENT_FUNC);
2344 } 2346 }
2345 CHECK_CALLBACK_STATE(I); 2347 CHECK_CALLBACK_STATE(T);
2346 return Api::NewHandle(I, String::FromUTF8(utf8_array, length)); 2348 return Api::NewHandle(I, String::FromUTF8(utf8_array, length));
2347 } 2349 }
2348 2350
2349 2351
2350 DART_EXPORT Dart_Handle Dart_NewStringFromUTF16(const uint16_t* utf16_array, 2352 DART_EXPORT Dart_Handle Dart_NewStringFromUTF16(const uint16_t* utf16_array,
2351 intptr_t length) { 2353 intptr_t length) {
2352 DARTSCOPE(Thread::Current()); 2354 DARTSCOPE(Thread::Current());
2353 if (utf16_array == NULL && length != 0) { 2355 if (utf16_array == NULL && length != 0) {
2354 RETURN_NULL_ERROR(utf16_array); 2356 RETURN_NULL_ERROR(utf16_array);
2355 } 2357 }
2356 CHECK_LENGTH(length, String::kMaxElements); 2358 CHECK_LENGTH(length, String::kMaxElements);
2357 CHECK_CALLBACK_STATE(I); 2359 CHECK_CALLBACK_STATE(T);
2358 return Api::NewHandle(I, String::FromUTF16(utf16_array, length)); 2360 return Api::NewHandle(I, String::FromUTF16(utf16_array, length));
2359 } 2361 }
2360 2362
2361 2363
2362 DART_EXPORT Dart_Handle Dart_NewStringFromUTF32(const int32_t* utf32_array, 2364 DART_EXPORT Dart_Handle Dart_NewStringFromUTF32(const int32_t* utf32_array,
2363 intptr_t length) { 2365 intptr_t length) {
2364 DARTSCOPE(Thread::Current()); 2366 DARTSCOPE(Thread::Current());
2365 if (utf32_array == NULL && length != 0) { 2367 if (utf32_array == NULL && length != 0) {
2366 RETURN_NULL_ERROR(utf32_array); 2368 RETURN_NULL_ERROR(utf32_array);
2367 } 2369 }
2368 CHECK_LENGTH(length, String::kMaxElements); 2370 CHECK_LENGTH(length, String::kMaxElements);
2369 CHECK_CALLBACK_STATE(I); 2371 CHECK_CALLBACK_STATE(T);
2370 return Api::NewHandle(I, String::FromUTF32(utf32_array, length)); 2372 return Api::NewHandle(I, String::FromUTF32(utf32_array, length));
2371 } 2373 }
2372 2374
2373 2375
2374 DART_EXPORT Dart_Handle Dart_NewExternalLatin1String( 2376 DART_EXPORT Dart_Handle Dart_NewExternalLatin1String(
2375 const uint8_t* latin1_array, 2377 const uint8_t* latin1_array,
2376 intptr_t length, 2378 intptr_t length,
2377 void* peer, 2379 void* peer,
2378 Dart_PeerFinalizer cback) { 2380 Dart_PeerFinalizer cback) {
2379 DARTSCOPE(Thread::Current()); 2381 DARTSCOPE(Thread::Current());
2380 if (latin1_array == NULL && length != 0) { 2382 if (latin1_array == NULL && length != 0) {
2381 RETURN_NULL_ERROR(latin1_array); 2383 RETURN_NULL_ERROR(latin1_array);
2382 } 2384 }
2383 CHECK_LENGTH(length, String::kMaxElements); 2385 CHECK_LENGTH(length, String::kMaxElements);
2384 CHECK_CALLBACK_STATE(I); 2386 CHECK_CALLBACK_STATE(T);
2385 return Api::NewHandle(I, 2387 return Api::NewHandle(I,
2386 String::NewExternal(latin1_array, 2388 String::NewExternal(latin1_array,
2387 length, 2389 length,
2388 peer, 2390 peer,
2389 cback, 2391 cback,
2390 SpaceForExternal(I, length))); 2392 SpaceForExternal(I, length)));
2391 } 2393 }
2392 2394
2393 2395
2394 DART_EXPORT Dart_Handle Dart_NewExternalUTF16String(const uint16_t* utf16_array, 2396 DART_EXPORT Dart_Handle Dart_NewExternalUTF16String(const uint16_t* utf16_array,
2395 intptr_t length, 2397 intptr_t length,
2396 void* peer, 2398 void* peer,
2397 Dart_PeerFinalizer cback) { 2399 Dart_PeerFinalizer cback) {
2398 DARTSCOPE(Thread::Current()); 2400 DARTSCOPE(Thread::Current());
2399 if (utf16_array == NULL && length != 0) { 2401 if (utf16_array == NULL && length != 0) {
2400 RETURN_NULL_ERROR(utf16_array); 2402 RETURN_NULL_ERROR(utf16_array);
2401 } 2403 }
2402 CHECK_LENGTH(length, String::kMaxElements); 2404 CHECK_LENGTH(length, String::kMaxElements);
2403 CHECK_CALLBACK_STATE(I); 2405 CHECK_CALLBACK_STATE(T);
2404 intptr_t bytes = length * sizeof(*utf16_array); 2406 intptr_t bytes = length * sizeof(*utf16_array);
2405 return Api::NewHandle(I, 2407 return Api::NewHandle(I,
2406 String::NewExternal(utf16_array, 2408 String::NewExternal(utf16_array,
2407 length, 2409 length,
2408 peer, 2410 peer,
2409 cback, 2411 cback,
2410 SpaceForExternal(I, bytes))); 2412 SpaceForExternal(I, bytes)));
2411 } 2413 }
2412 2414
2413 2415
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
2595 *str_len = str.Length(); 2597 *str_len = str.Length();
2596 return Api::Success(); 2598 return Api::Success();
2597 } 2599 }
2598 2600
2599 2601
2600 // --- Lists --- 2602 // --- Lists ---
2601 2603
2602 DART_EXPORT Dart_Handle Dart_NewList(intptr_t length) { 2604 DART_EXPORT Dart_Handle Dart_NewList(intptr_t length) {
2603 DARTSCOPE(Thread::Current()); 2605 DARTSCOPE(Thread::Current());
2604 CHECK_LENGTH(length, Array::kMaxElements); 2606 CHECK_LENGTH(length, Array::kMaxElements);
2605 CHECK_CALLBACK_STATE(I); 2607 CHECK_CALLBACK_STATE(T);
2606 return Api::NewHandle(I, Array::New(length)); 2608 return Api::NewHandle(I, Array::New(length));
2607 } 2609 }
2608 2610
2609 2611
2610 #define GET_LIST_LENGTH(zone, type, obj, len) \ 2612 #define GET_LIST_LENGTH(zone, type, obj, len) \
2611 type& array = type::Handle(zone); \ 2613 type& array = type::Handle(zone); \
2612 array ^= obj.raw(); \ 2614 array ^= obj.raw(); \
2613 *len = array.Length(); \ 2615 *len = array.Length(); \
2614 return Api::Success(); \ 2616 return Api::Success(); \
2615 2617
(...skipping 10 matching lines...) Expand all
2626 } 2628 }
2627 if (obj.IsArray()) { 2629 if (obj.IsArray()) {
2628 GET_LIST_LENGTH(Z, Array, obj, len); 2630 GET_LIST_LENGTH(Z, Array, obj, len);
2629 } 2631 }
2630 if (obj.IsGrowableObjectArray()) { 2632 if (obj.IsGrowableObjectArray()) {
2631 GET_LIST_LENGTH(Z, GrowableObjectArray, obj, len); 2633 GET_LIST_LENGTH(Z, GrowableObjectArray, obj, len);
2632 } 2634 }
2633 if (obj.IsExternalTypedData()) { 2635 if (obj.IsExternalTypedData()) {
2634 GET_LIST_LENGTH(Z, ExternalTypedData, obj, len); 2636 GET_LIST_LENGTH(Z, ExternalTypedData, obj, len);
2635 } 2637 }
2636 CHECK_CALLBACK_STATE(I); 2638 CHECK_CALLBACK_STATE(T);
2637 2639
2638 // Now check and handle a dart object that implements the List interface. 2640 // Now check and handle a dart object that implements the List interface.
2639 const Instance& instance = Instance::Handle(Z, GetListInstance(Z, obj)); 2641 const Instance& instance = Instance::Handle(Z, GetListInstance(Z, obj));
2640 if (instance.IsNull()) { 2642 if (instance.IsNull()) {
2641 return Api::NewError("Object does not implement the List interface"); 2643 return Api::NewError("Object does not implement the List interface");
2642 } 2644 }
2643 const String& name = String::Handle(Z, Field::GetterName(Symbols::Length())); 2645 const String& name = String::Handle(Z, Field::GetterName(Symbols::Length()));
2644 const int kNumArgs = 1; 2646 const int kNumArgs = 1;
2645 ArgumentsDescriptor args_desc( 2647 ArgumentsDescriptor args_desc(
2646 Array::Handle(Z, ArgumentsDescriptor::New(kNumArgs))); 2648 Array::Handle(Z, ArgumentsDescriptor::New(kNumArgs)));
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
2695 DART_EXPORT Dart_Handle Dart_ListGetAt(Dart_Handle list, intptr_t index) { 2697 DART_EXPORT Dart_Handle Dart_ListGetAt(Dart_Handle list, intptr_t index) {
2696 DARTSCOPE(Thread::Current()); 2698 DARTSCOPE(Thread::Current());
2697 const Object& obj = Object::Handle(Z, Api::UnwrapHandle(list)); 2699 const Object& obj = Object::Handle(Z, Api::UnwrapHandle(list));
2698 if (obj.IsArray()) { 2700 if (obj.IsArray()) {
2699 GET_LIST_ELEMENT(I, Array, obj, index); 2701 GET_LIST_ELEMENT(I, Array, obj, index);
2700 } else if (obj.IsGrowableObjectArray()) { 2702 } else if (obj.IsGrowableObjectArray()) {
2701 GET_LIST_ELEMENT(I, GrowableObjectArray, obj, index); 2703 GET_LIST_ELEMENT(I, GrowableObjectArray, obj, index);
2702 } else if (obj.IsError()) { 2704 } else if (obj.IsError()) {
2703 return list; 2705 return list;
2704 } else { 2706 } else {
2705 CHECK_CALLBACK_STATE(I); 2707 CHECK_CALLBACK_STATE(T);
2706 // Check and handle a dart object that implements the List interface. 2708 // Check and handle a dart object that implements the List interface.
2707 const Instance& instance = Instance::Handle(Z, GetListInstance(Z, obj)); 2709 const Instance& instance = Instance::Handle(Z, GetListInstance(Z, obj));
2708 if (!instance.IsNull()) { 2710 if (!instance.IsNull()) {
2709 return Api::NewHandle(I, Send1Arg( 2711 return Api::NewHandle(I, Send1Arg(
2710 instance, 2712 instance,
2711 Symbols::IndexToken(), 2713 Symbols::IndexToken(),
2712 Instance::Handle(Z, Integer::New(index)))); 2714 Instance::Handle(Z, Integer::New(index))));
2713 } 2715 }
2714 return Api::NewError("Object does not implement the 'List' interface"); 2716 return Api::NewError("Object does not implement the 'List' interface");
2715 } 2717 }
(...skipping 20 matching lines...) Expand all
2736 RETURN_NULL_ERROR(result); 2738 RETURN_NULL_ERROR(result);
2737 } 2739 }
2738 const Object& obj = Object::Handle(Z, Api::UnwrapHandle(list)); 2740 const Object& obj = Object::Handle(Z, Api::UnwrapHandle(list));
2739 if (obj.IsArray()) { 2741 if (obj.IsArray()) {
2740 GET_LIST_RANGE(I, Array, obj, offset, length); 2742 GET_LIST_RANGE(I, Array, obj, offset, length);
2741 } else if (obj.IsGrowableObjectArray()) { 2743 } else if (obj.IsGrowableObjectArray()) {
2742 GET_LIST_RANGE(I, GrowableObjectArray, obj, offset, length); 2744 GET_LIST_RANGE(I, GrowableObjectArray, obj, offset, length);
2743 } else if (obj.IsError()) { 2745 } else if (obj.IsError()) {
2744 return list; 2746 return list;
2745 } else { 2747 } else {
2746 CHECK_CALLBACK_STATE(I); 2748 CHECK_CALLBACK_STATE(T);
2747 // Check and handle a dart object that implements the List interface. 2749 // Check and handle a dart object that implements the List interface.
2748 const Instance& instance = Instance::Handle(Z, GetListInstance(Z, obj)); 2750 const Instance& instance = Instance::Handle(Z, GetListInstance(Z, obj));
2749 if (!instance.IsNull()) { 2751 if (!instance.IsNull()) {
2750 const intptr_t kNumArgs = 2; 2752 const intptr_t kNumArgs = 2;
2751 ArgumentsDescriptor args_desc( 2753 ArgumentsDescriptor args_desc(
2752 Array::Handle(ArgumentsDescriptor::New(kNumArgs))); 2754 Array::Handle(ArgumentsDescriptor::New(kNumArgs)));
2753 const Function& function = Function::Handle(Z, 2755 const Function& function = Function::Handle(Z,
2754 Resolver::ResolveDynamic(instance, 2756 Resolver::ResolveDynamic(instance,
2755 Symbols::AssignIndexToken(), 2757 Symbols::AssignIndexToken(),
2756 args_desc)); 2758 args_desc));
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
2795 const Object& obj = Object::Handle(Z, Api::UnwrapHandle(list)); 2797 const Object& obj = Object::Handle(Z, Api::UnwrapHandle(list));
2796 // If the list is immutable we call into Dart for the indexed setter to 2798 // If the list is immutable we call into Dart for the indexed setter to
2797 // get the unsupported operation exception as the result. 2799 // get the unsupported operation exception as the result.
2798 if (obj.IsArray() && !Array::Cast(obj).IsImmutable()) { 2800 if (obj.IsArray() && !Array::Cast(obj).IsImmutable()) {
2799 SET_LIST_ELEMENT(Array, obj, index, value); 2801 SET_LIST_ELEMENT(Array, obj, index, value);
2800 } else if (obj.IsGrowableObjectArray()) { 2802 } else if (obj.IsGrowableObjectArray()) {
2801 SET_LIST_ELEMENT(GrowableObjectArray, obj, index, value); 2803 SET_LIST_ELEMENT(GrowableObjectArray, obj, index, value);
2802 } else if (obj.IsError()) { 2804 } else if (obj.IsError()) {
2803 return list; 2805 return list;
2804 } else { 2806 } else {
2805 CHECK_CALLBACK_STATE(I); 2807 CHECK_CALLBACK_STATE(T);
2806 2808
2807 // Check and handle a dart object that implements the List interface. 2809 // Check and handle a dart object that implements the List interface.
2808 const Instance& instance = Instance::Handle(Z, GetListInstance(Z, obj)); 2810 const Instance& instance = Instance::Handle(Z, GetListInstance(Z, obj));
2809 if (!instance.IsNull()) { 2811 if (!instance.IsNull()) {
2810 const intptr_t kNumArgs = 3; 2812 const intptr_t kNumArgs = 3;
2811 ArgumentsDescriptor args_desc( 2813 ArgumentsDescriptor args_desc(
2812 Array::Handle(ArgumentsDescriptor::New(kNumArgs))); 2814 Array::Handle(ArgumentsDescriptor::New(kNumArgs)));
2813 const Function& function = Function::Handle(Z, 2815 const Function& function = Function::Handle(Z,
2814 Resolver::ResolveDynamic(instance, 2816 Resolver::ResolveDynamic(instance,
2815 Symbols::AssignIndexToken(), 2817 Symbols::AssignIndexToken(),
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
2990 if (obj.IsArray()) { 2992 if (obj.IsArray()) {
2991 GET_LIST_ELEMENT_AS_BYTES(Array, obj, native_array, offset, length); 2993 GET_LIST_ELEMENT_AS_BYTES(Array, obj, native_array, offset, length);
2992 } 2994 }
2993 if (obj.IsGrowableObjectArray()) { 2995 if (obj.IsGrowableObjectArray()) {
2994 GET_LIST_ELEMENT_AS_BYTES( 2996 GET_LIST_ELEMENT_AS_BYTES(
2995 GrowableObjectArray, obj, native_array, offset, length); 2997 GrowableObjectArray, obj, native_array, offset, length);
2996 } 2998 }
2997 if (obj.IsError()) { 2999 if (obj.IsError()) {
2998 return list; 3000 return list;
2999 } 3001 }
3000 CHECK_CALLBACK_STATE(I); 3002 CHECK_CALLBACK_STATE(T);
3001 3003
3002 // Check and handle a dart object that implements the List interface. 3004 // Check and handle a dart object that implements the List interface.
3003 const Instance& instance = 3005 const Instance& instance =
3004 Instance::Handle(Z, GetListInstance(Z, obj)); 3006 Instance::Handle(Z, GetListInstance(Z, obj));
3005 if (!instance.IsNull()) { 3007 if (!instance.IsNull()) {
3006 const int kNumArgs = 2; 3008 const int kNumArgs = 2;
3007 ArgumentsDescriptor args_desc( 3009 ArgumentsDescriptor args_desc(
3008 Array::Handle(ArgumentsDescriptor::New(kNumArgs))); 3010 Array::Handle(ArgumentsDescriptor::New(kNumArgs)));
3009 const Function& function = Function::Handle(Z, 3011 const Function& function = Function::Handle(Z,
3010 Resolver::ResolveDynamic(instance, Symbols::IndexToken(), args_desc)); 3012 Resolver::ResolveDynamic(instance, Symbols::IndexToken(), args_desc));
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
3076 // get the unsupported operation exception as the result. 3078 // get the unsupported operation exception as the result.
3077 SET_LIST_ELEMENT_AS_BYTES(Array, obj, native_array, offset, length); 3079 SET_LIST_ELEMENT_AS_BYTES(Array, obj, native_array, offset, length);
3078 } 3080 }
3079 if (obj.IsGrowableObjectArray()) { 3081 if (obj.IsGrowableObjectArray()) {
3080 SET_LIST_ELEMENT_AS_BYTES( 3082 SET_LIST_ELEMENT_AS_BYTES(
3081 GrowableObjectArray, obj, native_array, offset, length); 3083 GrowableObjectArray, obj, native_array, offset, length);
3082 } 3084 }
3083 if (obj.IsError()) { 3085 if (obj.IsError()) {
3084 return list; 3086 return list;
3085 } 3087 }
3086 CHECK_CALLBACK_STATE(I); 3088 CHECK_CALLBACK_STATE(T);
3087 3089
3088 // Check and handle a dart object that implements the List interface. 3090 // Check and handle a dart object that implements the List interface.
3089 const Instance& instance = Instance::Handle(Z, GetListInstance(Z, obj)); 3091 const Instance& instance = Instance::Handle(Z, GetListInstance(Z, obj));
3090 if (!instance.IsNull()) { 3092 if (!instance.IsNull()) {
3091 const int kNumArgs = 3; 3093 const int kNumArgs = 3;
3092 ArgumentsDescriptor args_desc( 3094 ArgumentsDescriptor args_desc(
3093 Array::Handle(ArgumentsDescriptor::New(kNumArgs))); 3095 Array::Handle(ArgumentsDescriptor::New(kNumArgs)));
3094 const Function& function = Function::Handle(Z, 3096 const Function& function = Function::Handle(Z,
3095 Resolver::ResolveDynamic(instance, 3097 Resolver::ResolveDynamic(instance,
3096 Symbols::AssignIndexToken(), 3098 Symbols::AssignIndexToken(),
(...skipping 18 matching lines...) Expand all
3115 } 3117 }
3116 } 3118 }
3117 return Api::NewError("Object does not implement the 'List' interface"); 3119 return Api::NewError("Object does not implement the 'List' interface");
3118 } 3120 }
3119 3121
3120 3122
3121 // --- Maps --- 3123 // --- Maps ---
3122 3124
3123 DART_EXPORT Dart_Handle Dart_MapGetAt(Dart_Handle map, Dart_Handle key) { 3125 DART_EXPORT Dart_Handle Dart_MapGetAt(Dart_Handle map, Dart_Handle key) {
3124 DARTSCOPE(Thread::Current()); 3126 DARTSCOPE(Thread::Current());
3125 CHECK_CALLBACK_STATE(I); 3127 CHECK_CALLBACK_STATE(T);
3126 const Object& obj = Object::Handle(Z, Api::UnwrapHandle(map)); 3128 const Object& obj = Object::Handle(Z, Api::UnwrapHandle(map));
3127 const Instance& instance = Instance::Handle(Z, GetMapInstance(Z, obj)); 3129 const Instance& instance = Instance::Handle(Z, GetMapInstance(Z, obj));
3128 if (!instance.IsNull()) { 3130 if (!instance.IsNull()) {
3129 const Object& key_obj = Object::Handle(Api::UnwrapHandle(key)); 3131 const Object& key_obj = Object::Handle(Api::UnwrapHandle(key));
3130 if (!(key_obj.IsInstance() || key_obj.IsNull())) { 3132 if (!(key_obj.IsInstance() || key_obj.IsNull())) {
3131 return Api::NewError("Key is not an instance"); 3133 return Api::NewError("Key is not an instance");
3132 } 3134 }
3133 return Api::NewHandle(I, 3135 return Api::NewHandle(I,
3134 Send1Arg(instance, Symbols::IndexToken(), Instance::Cast(key_obj))); 3136 Send1Arg(instance, Symbols::IndexToken(), Instance::Cast(key_obj)));
3135 } 3137 }
3136 return Api::NewError("Object does not implement the 'Map' interface"); 3138 return Api::NewError("Object does not implement the 'Map' interface");
3137 } 3139 }
3138 3140
3139 3141
3140 DART_EXPORT Dart_Handle Dart_MapContainsKey(Dart_Handle map, Dart_Handle key) { 3142 DART_EXPORT Dart_Handle Dart_MapContainsKey(Dart_Handle map, Dart_Handle key) {
3141 DARTSCOPE(Thread::Current()); 3143 DARTSCOPE(Thread::Current());
3142 CHECK_CALLBACK_STATE(I); 3144 CHECK_CALLBACK_STATE(T);
3143 const Object& obj = Object::Handle(Z, Api::UnwrapHandle(map)); 3145 const Object& obj = Object::Handle(Z, Api::UnwrapHandle(map));
3144 const Instance& instance = Instance::Handle(Z, GetMapInstance(Z, obj)); 3146 const Instance& instance = Instance::Handle(Z, GetMapInstance(Z, obj));
3145 if (!instance.IsNull()) { 3147 if (!instance.IsNull()) {
3146 const Object& key_obj = Object::Handle(Z, Api::UnwrapHandle(key)); 3148 const Object& key_obj = Object::Handle(Z, Api::UnwrapHandle(key));
3147 if (!(key_obj.IsInstance() || key_obj.IsNull())) { 3149 if (!(key_obj.IsInstance() || key_obj.IsNull())) {
3148 return Api::NewError("Key is not an instance"); 3150 return Api::NewError("Key is not an instance");
3149 } 3151 }
3150 return Api::NewHandle(I, Send1Arg( 3152 return Api::NewHandle(I, Send1Arg(
3151 instance, 3153 instance,
3152 String::Handle(Z, String::New("containsKey")), 3154 String::Handle(Z, String::New("containsKey")),
3153 Instance::Cast(key_obj))); 3155 Instance::Cast(key_obj)));
3154 } 3156 }
3155 return Api::NewError("Object does not implement the 'Map' interface"); 3157 return Api::NewError("Object does not implement the 'Map' interface");
3156 } 3158 }
3157 3159
3158 3160
3159 DART_EXPORT Dart_Handle Dart_MapKeys(Dart_Handle map) { 3161 DART_EXPORT Dart_Handle Dart_MapKeys(Dart_Handle map) {
3160 DARTSCOPE(Thread::Current()); 3162 DARTSCOPE(Thread::Current());
3161 CHECK_CALLBACK_STATE(I); 3163 CHECK_CALLBACK_STATE(T);
3162 Object& obj = Object::Handle(Z, Api::UnwrapHandle(map)); 3164 Object& obj = Object::Handle(Z, Api::UnwrapHandle(map));
3163 Instance& instance = Instance::Handle(Z, GetMapInstance(Z, obj)); 3165 Instance& instance = Instance::Handle(Z, GetMapInstance(Z, obj));
3164 if (!instance.IsNull()) { 3166 if (!instance.IsNull()) {
3165 const Object& iterator = Object::Handle(Send0Arg( 3167 const Object& iterator = Object::Handle(Send0Arg(
3166 instance, String::Handle(Z, String::New("get:keys")))); 3168 instance, String::Handle(Z, String::New("get:keys"))));
3167 if (!iterator.IsInstance()) { 3169 if (!iterator.IsInstance()) {
3168 return Api::NewHandle(I, iterator.raw()); 3170 return Api::NewHandle(I, iterator.raw());
3169 } 3171 }
3170 return Api::NewHandle(I, Send0Arg( 3172 return Api::NewHandle(I, Send0Arg(
3171 Instance::Cast(iterator), 3173 Instance::Cast(iterator),
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
3383 // Invoke the constructor and return the new object. 3385 // Invoke the constructor and return the new object.
3384 result = DartEntry::InvokeFunction(factory, args); 3386 result = DartEntry::InvokeFunction(factory, args);
3385 ASSERT(result.IsNull() || result.IsInstance() || result.IsError()); 3387 ASSERT(result.IsNull() || result.IsInstance() || result.IsError());
3386 return Api::NewHandle(isolate, result.raw()); 3388 return Api::NewHandle(isolate, result.raw());
3387 } 3389 }
3388 3390
3389 3391
3390 DART_EXPORT Dart_Handle Dart_NewTypedData(Dart_TypedData_Type type, 3392 DART_EXPORT Dart_Handle Dart_NewTypedData(Dart_TypedData_Type type,
3391 intptr_t length) { 3393 intptr_t length) {
3392 DARTSCOPE(Thread::Current()); 3394 DARTSCOPE(Thread::Current());
3393 CHECK_CALLBACK_STATE(I); 3395 CHECK_CALLBACK_STATE(T);
3394 switch (type) { 3396 switch (type) {
3395 case Dart_TypedData_kByteData : 3397 case Dart_TypedData_kByteData :
3396 return NewByteData(T, length); 3398 return NewByteData(T, length);
3397 case Dart_TypedData_kInt8 : 3399 case Dart_TypedData_kInt8 :
3398 return NewTypedData(I, kTypedDataInt8ArrayCid, length); 3400 return NewTypedData(I, kTypedDataInt8ArrayCid, length);
3399 case Dart_TypedData_kUint8 : 3401 case Dart_TypedData_kUint8 :
3400 return NewTypedData(I, kTypedDataUint8ArrayCid, length); 3402 return NewTypedData(I, kTypedDataUint8ArrayCid, length);
3401 case Dart_TypedData_kUint8Clamped : 3403 case Dart_TypedData_kUint8Clamped :
3402 return NewTypedData(I, kTypedDataUint8ClampedArrayCid, length); 3404 return NewTypedData(I, kTypedDataUint8ClampedArrayCid, length);
3403 case Dart_TypedData_kInt16 : 3405 case Dart_TypedData_kInt16 :
(...skipping 24 matching lines...) Expand all
3428 3430
3429 3431
3430 DART_EXPORT Dart_Handle Dart_NewExternalTypedData( 3432 DART_EXPORT Dart_Handle Dart_NewExternalTypedData(
3431 Dart_TypedData_Type type, 3433 Dart_TypedData_Type type,
3432 void* data, 3434 void* data,
3433 intptr_t length) { 3435 intptr_t length) {
3434 DARTSCOPE(Thread::Current()); 3436 DARTSCOPE(Thread::Current());
3435 if (data == NULL && length != 0) { 3437 if (data == NULL && length != 0) {
3436 RETURN_NULL_ERROR(data); 3438 RETURN_NULL_ERROR(data);
3437 } 3439 }
3438 CHECK_CALLBACK_STATE(I); 3440 CHECK_CALLBACK_STATE(T);
3439 switch (type) { 3441 switch (type) {
3440 case Dart_TypedData_kByteData: 3442 case Dart_TypedData_kByteData:
3441 return NewExternalByteData(T, data, length); 3443 return NewExternalByteData(T, data, length);
3442 case Dart_TypedData_kInt8: 3444 case Dart_TypedData_kInt8:
3443 return NewExternalTypedData(T, 3445 return NewExternalTypedData(T,
3444 kExternalTypedDataInt8ArrayCid, data, length); 3446 kExternalTypedDataInt8ArrayCid, data, length);
3445 case Dart_TypedData_kUint8: 3447 case Dart_TypedData_kUint8:
3446 return NewExternalTypedData(T, 3448 return NewExternalTypedData(T,
3447 kExternalTypedDataUint8ArrayCid, data, length); 3449 kExternalTypedDataUint8ArrayCid, data, length);
3448 case Dart_TypedData_kUint8Clamped: 3450 case Dart_TypedData_kUint8Clamped:
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
3602 size_in_bytes = length * ExternalTypedData::ElementSizeInBytes(class_id); 3604 size_in_bytes = length * ExternalTypedData::ElementSizeInBytes(class_id);
3603 data_tmp = obj.DataAddr(0); 3605 data_tmp = obj.DataAddr(0);
3604 external = true; 3606 external = true;
3605 } else if (RawObject::IsTypedDataClassId(class_id)) { 3607 } else if (RawObject::IsTypedDataClassId(class_id)) {
3606 // Regular typed data object, set up some GC and API callback guards. 3608 // Regular typed data object, set up some GC and API callback guards.
3607 const TypedData& obj = Api::UnwrapTypedDataHandle(Z, object); 3609 const TypedData& obj = Api::UnwrapTypedDataHandle(Z, object);
3608 ASSERT(!obj.IsNull()); 3610 ASSERT(!obj.IsNull());
3609 length = obj.Length(); 3611 length = obj.Length();
3610 size_in_bytes = length * TypedData::ElementSizeInBytes(class_id); 3612 size_in_bytes = length * TypedData::ElementSizeInBytes(class_id);
3611 T->IncrementNoSafepointScopeDepth(); 3613 T->IncrementNoSafepointScopeDepth();
3612 START_NO_CALLBACK_SCOPE(I); 3614 START_NO_CALLBACK_SCOPE(T);
3613 data_tmp = obj.DataAddr(0); 3615 data_tmp = obj.DataAddr(0);
3614 } else { 3616 } else {
3615 ASSERT(RawObject::IsTypedDataViewClassId(class_id)); 3617 ASSERT(RawObject::IsTypedDataViewClassId(class_id));
3616 const Instance& view_obj = Api::UnwrapInstanceHandle(Z, object); 3618 const Instance& view_obj = Api::UnwrapInstanceHandle(Z, object);
3617 ASSERT(!view_obj.IsNull()); 3619 ASSERT(!view_obj.IsNull());
3618 Smi& val = Smi::Handle(); 3620 Smi& val = Smi::Handle();
3619 val ^= TypedDataView::Length(view_obj); 3621 val ^= TypedDataView::Length(view_obj);
3620 length = val.Value(); 3622 length = val.Value();
3621 size_in_bytes = length * TypedDataView::ElementSizeInBytes(class_id); 3623 size_in_bytes = length * TypedDataView::ElementSizeInBytes(class_id);
3622 val ^= TypedDataView::OffsetInBytes(view_obj); 3624 val ^= TypedDataView::OffsetInBytes(view_obj);
3623 intptr_t offset_in_bytes = val.Value(); 3625 intptr_t offset_in_bytes = val.Value();
3624 const Instance& obj = Instance::Handle(TypedDataView::Data(view_obj)); 3626 const Instance& obj = Instance::Handle(TypedDataView::Data(view_obj));
3625 T->IncrementNoSafepointScopeDepth(); 3627 T->IncrementNoSafepointScopeDepth();
3626 START_NO_CALLBACK_SCOPE(I); 3628 START_NO_CALLBACK_SCOPE(T);
3627 if (TypedData::IsTypedData(obj)) { 3629 if (TypedData::IsTypedData(obj)) {
3628 const TypedData& data_obj = TypedData::Cast(obj); 3630 const TypedData& data_obj = TypedData::Cast(obj);
3629 data_tmp = data_obj.DataAddr(offset_in_bytes); 3631 data_tmp = data_obj.DataAddr(offset_in_bytes);
3630 } else { 3632 } else {
3631 ASSERT(ExternalTypedData::IsExternalTypedData(obj)); 3633 ASSERT(ExternalTypedData::IsExternalTypedData(obj));
3632 const ExternalTypedData& data_obj = ExternalTypedData::Cast(obj); 3634 const ExternalTypedData& data_obj = ExternalTypedData::Cast(obj);
3633 data_tmp = data_obj.DataAddr(offset_in_bytes); 3635 data_tmp = data_obj.DataAddr(offset_in_bytes);
3634 external = true; 3636 external = true;
3635 } 3637 }
3636 } 3638 }
(...skipping 25 matching lines...) Expand all
3662 DART_EXPORT Dart_Handle Dart_TypedDataReleaseData(Dart_Handle object) { 3664 DART_EXPORT Dart_Handle Dart_TypedDataReleaseData(Dart_Handle object) {
3663 DARTSCOPE(Thread::Current()); 3665 DARTSCOPE(Thread::Current());
3664 intptr_t class_id = Api::ClassId(object); 3666 intptr_t class_id = Api::ClassId(object);
3665 if (!RawObject::IsExternalTypedDataClassId(class_id) && 3667 if (!RawObject::IsExternalTypedDataClassId(class_id) &&
3666 !RawObject::IsTypedDataViewClassId(class_id) && 3668 !RawObject::IsTypedDataViewClassId(class_id) &&
3667 !RawObject::IsTypedDataClassId(class_id)) { 3669 !RawObject::IsTypedDataClassId(class_id)) {
3668 RETURN_TYPE_ERROR(Z, object, 'TypedData'); 3670 RETURN_TYPE_ERROR(Z, object, 'TypedData');
3669 } 3671 }
3670 if (!RawObject::IsExternalTypedDataClassId(class_id)) { 3672 if (!RawObject::IsExternalTypedDataClassId(class_id)) {
3671 T->DecrementNoSafepointScopeDepth(); 3673 T->DecrementNoSafepointScopeDepth();
3672 END_NO_CALLBACK_SCOPE(I); 3674 END_NO_CALLBACK_SCOPE(T);
3673 } 3675 }
3674 if (FLAG_verify_acquired_data) { 3676 if (FLAG_verify_acquired_data) {
3675 const Object& obj = Object::Handle(Z, Api::UnwrapHandle(object)); 3677 const Object& obj = Object::Handle(Z, Api::UnwrapHandle(object));
3676 WeakTable* table = I->api_state()->acquired_table(); 3678 WeakTable* table = I->api_state()->acquired_table();
3677 intptr_t current = table->GetValue(obj.raw()); 3679 intptr_t current = table->GetValue(obj.raw());
3678 if (current == 0) { 3680 if (current == 0) {
3679 return Api::NewError("Data was not acquired for this object."); 3681 return Api::NewError("Data was not acquired for this object.");
3680 } 3682 }
3681 AcquiredData* ad = reinterpret_cast<AcquiredData*>(current); 3683 AcquiredData* ad = reinterpret_cast<AcquiredData*>(current);
3682 table->SetValue(obj.raw(), 0); // Delete entry from table. 3684 table->SetValue(obj.raw(), 0); // Delete entry from table.
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
3749 } 3751 }
3750 return constructor.raw(); 3752 return constructor.raw();
3751 } 3753 }
3752 3754
3753 3755
3754 DART_EXPORT Dart_Handle Dart_New(Dart_Handle type, 3756 DART_EXPORT Dart_Handle Dart_New(Dart_Handle type,
3755 Dart_Handle constructor_name, 3757 Dart_Handle constructor_name,
3756 int number_of_arguments, 3758 int number_of_arguments,
3757 Dart_Handle* arguments) { 3759 Dart_Handle* arguments) {
3758 DARTSCOPE(Thread::Current()); 3760 DARTSCOPE(Thread::Current());
3759 CHECK_CALLBACK_STATE(I); 3761 CHECK_CALLBACK_STATE(T);
3760 Object& result = Object::Handle(Z); 3762 Object& result = Object::Handle(Z);
3761 3763
3762 if (number_of_arguments < 0) { 3764 if (number_of_arguments < 0) {
3763 return Api::NewError( 3765 return Api::NewError(
3764 "%s expects argument 'number_of_arguments' to be non-negative.", 3766 "%s expects argument 'number_of_arguments' to be non-negative.",
3765 CURRENT_FUNC); 3767 CURRENT_FUNC);
3766 } 3768 }
3767 3769
3768 // Get the class to instantiate. 3770 // Get the class to instantiate.
3769 Object& unchecked_type = Object::Handle(Api::UnwrapHandle(type)); 3771 Object& unchecked_type = Object::Handle(Api::UnwrapHandle(type));
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
3913 } 3915 }
3914 } 3916 }
3915 3917
3916 // Allocate an object for the given class. 3918 // Allocate an object for the given class.
3917 return Instance::New(cls); 3919 return Instance::New(cls);
3918 } 3920 }
3919 3921
3920 3922
3921 DART_EXPORT Dart_Handle Dart_Allocate(Dart_Handle type) { 3923 DART_EXPORT Dart_Handle Dart_Allocate(Dart_Handle type) {
3922 DARTSCOPE(Thread::Current()); 3924 DARTSCOPE(Thread::Current());
3923 CHECK_CALLBACK_STATE(I); 3925 CHECK_CALLBACK_STATE(T);
3924 3926
3925 const Type& type_obj = Api::UnwrapTypeHandle(Z, type); 3927 const Type& type_obj = Api::UnwrapTypeHandle(Z, type);
3926 // Get the class to instantiate. 3928 // Get the class to instantiate.
3927 if (type_obj.IsNull()) { 3929 if (type_obj.IsNull()) {
3928 RETURN_TYPE_ERROR(Z, type, Type); 3930 RETURN_TYPE_ERROR(Z, type, Type);
3929 } 3931 }
3930 const Class& cls = Class::Handle(Z, type_obj.type_class()); 3932 const Class& cls = Class::Handle(Z, type_obj.type_class());
3931 const Error& error = Error::Handle(Z, cls.EnsureIsFinalized(T)); 3933 const Error& error = Error::Handle(Z, cls.EnsureIsFinalized(T));
3932 if (!error.IsNull()) { 3934 if (!error.IsNull()) {
3933 // An error occurred, return error object. 3935 // An error occurred, return error object.
3934 return Api::NewHandle(I, error.raw()); 3936 return Api::NewHandle(I, error.raw());
3935 } 3937 }
3936 return Api::NewHandle(I, AllocateObject(T, cls)); 3938 return Api::NewHandle(I, AllocateObject(T, cls));
3937 } 3939 }
3938 3940
3939 3941
3940 DART_EXPORT Dart_Handle Dart_AllocateWithNativeFields( 3942 DART_EXPORT Dart_Handle Dart_AllocateWithNativeFields(
3941 Dart_Handle type, 3943 Dart_Handle type,
3942 intptr_t num_native_fields, 3944 intptr_t num_native_fields,
3943 const intptr_t* native_fields) { 3945 const intptr_t* native_fields) {
3944 DARTSCOPE(Thread::Current()); 3946 DARTSCOPE(Thread::Current());
3945 CHECK_CALLBACK_STATE(I); 3947 CHECK_CALLBACK_STATE(T);
3946 3948
3947 const Type& type_obj = Api::UnwrapTypeHandle(Z, type); 3949 const Type& type_obj = Api::UnwrapTypeHandle(Z, type);
3948 // Get the class to instantiate. 3950 // Get the class to instantiate.
3949 if (type_obj.IsNull()) { 3951 if (type_obj.IsNull()) {
3950 RETURN_TYPE_ERROR(Z, type, Type); 3952 RETURN_TYPE_ERROR(Z, type, Type);
3951 } 3953 }
3952 if (native_fields == NULL) { 3954 if (native_fields == NULL) {
3953 RETURN_NULL_ERROR(native_fields); 3955 RETURN_NULL_ERROR(native_fields);
3954 } 3956 }
3955 const Class& cls = Class::Handle(Z, type_obj.type_class()); 3957 const Class& cls = Class::Handle(Z, type_obj.type_class());
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
3995 } 3997 }
3996 return Api::Success(); 3998 return Api::Success();
3997 } 3999 }
3998 4000
3999 4001
4000 DART_EXPORT Dart_Handle Dart_InvokeConstructor(Dart_Handle object, 4002 DART_EXPORT Dart_Handle Dart_InvokeConstructor(Dart_Handle object,
4001 Dart_Handle name, 4003 Dart_Handle name,
4002 int number_of_arguments, 4004 int number_of_arguments,
4003 Dart_Handle* arguments) { 4005 Dart_Handle* arguments) {
4004 DARTSCOPE(Thread::Current()); 4006 DARTSCOPE(Thread::Current());
4005 CHECK_CALLBACK_STATE(I); 4007 CHECK_CALLBACK_STATE(T);
4006 4008
4007 if (number_of_arguments < 0) { 4009 if (number_of_arguments < 0) {
4008 return Api::NewError( 4010 return Api::NewError(
4009 "%s expects argument 'number_of_arguments' to be non-negative.", 4011 "%s expects argument 'number_of_arguments' to be non-negative.",
4010 CURRENT_FUNC); 4012 CURRENT_FUNC);
4011 } 4013 }
4012 const String& constructor_name = Api::UnwrapStringHandle(Z, name); 4014 const String& constructor_name = Api::UnwrapStringHandle(Z, name);
4013 if (constructor_name.IsNull()) { 4015 if (constructor_name.IsNull()) {
4014 RETURN_TYPE_ERROR(Z, name, String); 4016 RETURN_TYPE_ERROR(Z, name, String);
4015 } 4017 }
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
4072 "%s expects argument 'name' to be a valid constructor.", 4074 "%s expects argument 'name' to be a valid constructor.",
4073 CURRENT_FUNC); 4075 CURRENT_FUNC);
4074 } 4076 }
4075 4077
4076 4078
4077 DART_EXPORT Dart_Handle Dart_Invoke(Dart_Handle target, 4079 DART_EXPORT Dart_Handle Dart_Invoke(Dart_Handle target,
4078 Dart_Handle name, 4080 Dart_Handle name,
4079 int number_of_arguments, 4081 int number_of_arguments,
4080 Dart_Handle* arguments) { 4082 Dart_Handle* arguments) {
4081 DARTSCOPE(Thread::Current()); 4083 DARTSCOPE(Thread::Current());
4082 CHECK_CALLBACK_STATE(I); 4084 CHECK_CALLBACK_STATE(T);
4083 4085
4084 const String& function_name = Api::UnwrapStringHandle(Z, name); 4086 const String& function_name = Api::UnwrapStringHandle(Z, name);
4085 if (function_name.IsNull()) { 4087 if (function_name.IsNull()) {
4086 RETURN_TYPE_ERROR(Z, name, String); 4088 RETURN_TYPE_ERROR(Z, name, String);
4087 } 4089 }
4088 if (number_of_arguments < 0) { 4090 if (number_of_arguments < 0) {
4089 return Api::NewError( 4091 return Api::NewError(
4090 "%s expects argument 'number_of_arguments' to be non-negative.", 4092 "%s expects argument 'number_of_arguments' to be non-negative.",
4091 CURRENT_FUNC); 4093 CURRENT_FUNC);
4092 } 4094 }
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
4198 "%s expects argument 'target' to be an object, type, or library.", 4200 "%s expects argument 'target' to be an object, type, or library.",
4199 CURRENT_FUNC); 4201 CURRENT_FUNC);
4200 } 4202 }
4201 } 4203 }
4202 4204
4203 4205
4204 DART_EXPORT Dart_Handle Dart_InvokeClosure(Dart_Handle closure, 4206 DART_EXPORT Dart_Handle Dart_InvokeClosure(Dart_Handle closure,
4205 int number_of_arguments, 4207 int number_of_arguments,
4206 Dart_Handle* arguments) { 4208 Dart_Handle* arguments) {
4207 DARTSCOPE(Thread::Current()); 4209 DARTSCOPE(Thread::Current());
4208 CHECK_CALLBACK_STATE(I); 4210 CHECK_CALLBACK_STATE(T);
4209 const Instance& closure_obj = Api::UnwrapInstanceHandle(Z, closure); 4211 const Instance& closure_obj = Api::UnwrapInstanceHandle(Z, closure);
4210 if (closure_obj.IsNull() || !closure_obj.IsCallable(NULL)) { 4212 if (closure_obj.IsNull() || !closure_obj.IsCallable(NULL)) {
4211 RETURN_TYPE_ERROR(Z, closure, Instance); 4213 RETURN_TYPE_ERROR(Z, closure, Instance);
4212 } 4214 }
4213 if (number_of_arguments < 0) { 4215 if (number_of_arguments < 0) {
4214 return Api::NewError( 4216 return Api::NewError(
4215 "%s expects argument 'number_of_arguments' to be non-negative.", 4217 "%s expects argument 'number_of_arguments' to be non-negative.",
4216 CURRENT_FUNC); 4218 CURRENT_FUNC);
4217 } 4219 }
4218 4220
4219 // Set up arguments to include the closure as the first argument. 4221 // Set up arguments to include the closure as the first argument.
4220 const Array& args = Array::Handle(Z, Array::New(number_of_arguments + 1)); 4222 const Array& args = Array::Handle(Z, Array::New(number_of_arguments + 1));
4221 Object& obj = Object::Handle(Z); 4223 Object& obj = Object::Handle(Z);
4222 args.SetAt(0, closure_obj); 4224 args.SetAt(0, closure_obj);
4223 for (int i = 0; i < number_of_arguments; i++) { 4225 for (int i = 0; i < number_of_arguments; i++) {
4224 obj = Api::UnwrapHandle(arguments[i]); 4226 obj = Api::UnwrapHandle(arguments[i]);
4225 if (!obj.IsNull() && !obj.IsInstance()) { 4227 if (!obj.IsNull() && !obj.IsInstance()) {
4226 RETURN_TYPE_ERROR(Z, arguments[i], Instance); 4228 RETURN_TYPE_ERROR(Z, arguments[i], Instance);
4227 } 4229 }
4228 args.SetAt(i + 1, obj); 4230 args.SetAt(i + 1, obj);
4229 } 4231 }
4230 // Now try to invoke the closure. 4232 // Now try to invoke the closure.
4231 return Api::NewHandle(I, DartEntry::InvokeClosure(args)); 4233 return Api::NewHandle(I, DartEntry::InvokeClosure(args));
4232 } 4234 }
4233 4235
4234 4236
4235 DART_EXPORT Dart_Handle Dart_GetField(Dart_Handle container, Dart_Handle name) { 4237 DART_EXPORT Dart_Handle Dart_GetField(Dart_Handle container, Dart_Handle name) {
4236 DARTSCOPE(Thread::Current()); 4238 DARTSCOPE(Thread::Current());
4237 CHECK_CALLBACK_STATE(I); 4239 CHECK_CALLBACK_STATE(T);
4238 4240
4239 const String& field_name = Api::UnwrapStringHandle(Z, name); 4241 const String& field_name = Api::UnwrapStringHandle(Z, name);
4240 if (field_name.IsNull()) { 4242 if (field_name.IsNull()) {
4241 RETURN_TYPE_ERROR(Z, name, String); 4243 RETURN_TYPE_ERROR(Z, name, String);
4242 } 4244 }
4243 4245
4244 Field& field = Field::Handle(Z); 4246 Field& field = Field::Handle(Z);
4245 Function& getter = Function::Handle(Z); 4247 Function& getter = Function::Handle(Z);
4246 const Object& obj = Object::Handle(Z, Api::UnwrapHandle(container)); 4248 const Object& obj = Object::Handle(Z, Api::UnwrapHandle(container));
4247 if (obj.IsNull()) { 4249 if (obj.IsNull()) {
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
4348 "%s expects argument 'container' to be an object, type, or library.", 4350 "%s expects argument 'container' to be an object, type, or library.",
4349 CURRENT_FUNC); 4351 CURRENT_FUNC);
4350 } 4352 }
4351 } 4353 }
4352 4354
4353 4355
4354 DART_EXPORT Dart_Handle Dart_SetField(Dart_Handle container, 4356 DART_EXPORT Dart_Handle Dart_SetField(Dart_Handle container,
4355 Dart_Handle name, 4357 Dart_Handle name,
4356 Dart_Handle value) { 4358 Dart_Handle value) {
4357 DARTSCOPE(Thread::Current()); 4359 DARTSCOPE(Thread::Current());
4358 CHECK_CALLBACK_STATE(I); 4360 CHECK_CALLBACK_STATE(T);
4359 4361
4360 const String& field_name = Api::UnwrapStringHandle(Z, name); 4362 const String& field_name = Api::UnwrapStringHandle(Z, name);
4361 if (field_name.IsNull()) { 4363 if (field_name.IsNull()) {
4362 RETURN_TYPE_ERROR(Z, name, String); 4364 RETURN_TYPE_ERROR(Z, name, String);
4363 } 4365 }
4364 4366
4365 // Since null is allowed for value, we don't use UnwrapInstanceHandle. 4367 // Since null is allowed for value, we don't use UnwrapInstanceHandle.
4366 const Object& value_obj = Object::Handle(Z, Api::UnwrapHandle(value)); 4368 const Object& value_obj = Object::Handle(Z, Api::UnwrapHandle(value));
4367 if (!value_obj.IsNull() && !value_obj.IsInstance()) { 4369 if (!value_obj.IsNull() && !value_obj.IsInstance()) {
4368 RETURN_TYPE_ERROR(Z, value, Instance); 4370 RETURN_TYPE_ERROR(Z, value, Instance);
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
4503 } 4505 }
4504 4506
4505 4507
4506 // --- Exceptions ---- 4508 // --- Exceptions ----
4507 4509
4508 DART_EXPORT Dart_Handle Dart_ThrowException(Dart_Handle exception) { 4510 DART_EXPORT Dart_Handle Dart_ThrowException(Dart_Handle exception) {
4509 Thread* thread = Thread::Current(); 4511 Thread* thread = Thread::Current();
4510 Zone* zone = thread->zone(); 4512 Zone* zone = thread->zone();
4511 Isolate* isolate = thread->isolate(); 4513 Isolate* isolate = thread->isolate();
4512 CHECK_ISOLATE(isolate); 4514 CHECK_ISOLATE(isolate);
4513 CHECK_CALLBACK_STATE(isolate); 4515 CHECK_CALLBACK_STATE(thread);
4514 { 4516 {
4515 const Instance& excp = Api::UnwrapInstanceHandle(zone, exception); 4517 const Instance& excp = Api::UnwrapInstanceHandle(zone, exception);
4516 if (excp.IsNull()) { 4518 if (excp.IsNull()) {
4517 RETURN_TYPE_ERROR(zone, exception, Instance); 4519 RETURN_TYPE_ERROR(zone, exception, Instance);
4518 } 4520 }
4519 } 4521 }
4520 if (isolate->top_exit_frame_info() == 0) { 4522 if (isolate->top_exit_frame_info() == 0) {
4521 // There are no dart frames on the stack so it would be illegal to 4523 // There are no dart frames on the stack so it would be illegal to
4522 // throw an exception here. 4524 // throw an exception here.
4523 return Api::NewError("No Dart frames on stack, cannot throw exception"); 4525 return Api::NewError("No Dart frames on stack, cannot throw exception");
(...skipping 15 matching lines...) Expand all
4539 return Api::NewError("Exception was not thrown, internal error"); 4541 return Api::NewError("Exception was not thrown, internal error");
4540 } 4542 }
4541 4543
4542 4544
4543 DART_EXPORT Dart_Handle Dart_ReThrowException(Dart_Handle exception, 4545 DART_EXPORT Dart_Handle Dart_ReThrowException(Dart_Handle exception,
4544 Dart_Handle stacktrace) { 4546 Dart_Handle stacktrace) {
4545 Thread* thread = Thread::Current(); 4547 Thread* thread = Thread::Current();
4546 Zone* zone = thread->zone(); 4548 Zone* zone = thread->zone();
4547 Isolate* isolate = thread->isolate(); 4549 Isolate* isolate = thread->isolate();
4548 CHECK_ISOLATE(isolate); 4550 CHECK_ISOLATE(isolate);
4549 CHECK_CALLBACK_STATE(isolate); 4551 CHECK_CALLBACK_STATE(thread);
4550 { 4552 {
4551 const Instance& excp = Api::UnwrapInstanceHandle(zone, exception); 4553 const Instance& excp = Api::UnwrapInstanceHandle(zone, exception);
4552 if (excp.IsNull()) { 4554 if (excp.IsNull()) {
4553 RETURN_TYPE_ERROR(zone, exception, Instance); 4555 RETURN_TYPE_ERROR(zone, exception, Instance);
4554 } 4556 }
4555 const Instance& stk = Api::UnwrapInstanceHandle(zone, stacktrace); 4557 const Instance& stk = Api::UnwrapInstanceHandle(zone, stacktrace);
4556 if (stk.IsNull()) { 4558 if (stk.IsNull()) {
4557 RETURN_TYPE_ERROR(zone, stacktrace, Instance); 4559 RETURN_TYPE_ERROR(zone, stacktrace, Instance);
4558 } 4560 }
4559 } 4561 }
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
4595 RETURN_TYPE_ERROR(Z, name, String); 4597 RETURN_TYPE_ERROR(Z, name, String);
4596 } 4598 }
4597 const Library& lib = Api::UnwrapLibraryHandle(Z, library); 4599 const Library& lib = Api::UnwrapLibraryHandle(Z, library);
4598 if (lib.IsNull()) { 4600 if (lib.IsNull()) {
4599 RETURN_TYPE_ERROR(Z, library, Library); 4601 RETURN_TYPE_ERROR(Z, library, Library);
4600 } 4602 }
4601 if (!Utils::IsUint(16, field_count)) { 4603 if (!Utils::IsUint(16, field_count)) {
4602 return Api::NewError( 4604 return Api::NewError(
4603 "Invalid field_count passed to Dart_CreateNativeWrapperClass"); 4605 "Invalid field_count passed to Dart_CreateNativeWrapperClass");
4604 } 4606 }
4605 CHECK_CALLBACK_STATE(I); 4607 CHECK_CALLBACK_STATE(T);
4606 4608
4607 String& cls_symbol = String::Handle(Z, Symbols::New(cls_name)); 4609 String& cls_symbol = String::Handle(Z, Symbols::New(cls_name));
4608 const Class& cls = Class::Handle(Z, 4610 const Class& cls = Class::Handle(Z,
4609 Class::NewNativeWrapper(lib, cls_symbol, field_count)); 4611 Class::NewNativeWrapper(lib, cls_symbol, field_count));
4610 if (cls.IsNull()) { 4612 if (cls.IsNull()) {
4611 return Api::NewError( 4613 return Api::NewError(
4612 "Unable to create native wrapper class : already exists"); 4614 "Unable to create native wrapper class : already exists");
4613 } 4615 }
4614 return Api::NewHandle(I, cls.RareType()); 4616 return Api::NewHandle(I, cls.RareType());
4615 } 4617 }
(...skipping 398 matching lines...) Expand 10 before | Expand all | Expand 10 after
5014 5016
5015 5017
5016 DART_EXPORT void Dart_SetIntegerReturnValue(Dart_NativeArguments args, 5018 DART_EXPORT void Dart_SetIntegerReturnValue(Dart_NativeArguments args,
5017 int64_t retval) { 5019 int64_t retval) {
5018 NativeArguments* arguments = reinterpret_cast<NativeArguments*>(args); 5020 NativeArguments* arguments = reinterpret_cast<NativeArguments*>(args);
5019 ASSERT(arguments->thread()->isolate() == Isolate::Current()); 5021 ASSERT(arguments->thread()->isolate() == Isolate::Current());
5020 if (Smi::IsValid(retval)) { 5022 if (Smi::IsValid(retval)) {
5021 Api::SetSmiReturnValue(arguments, static_cast<intptr_t>(retval)); 5023 Api::SetSmiReturnValue(arguments, static_cast<intptr_t>(retval));
5022 } else { 5024 } else {
5023 // Slow path for Mints and Bigints. 5025 // Slow path for Mints and Bigints.
5024 ASSERT_CALLBACK_STATE(arguments->thread()->isolate()); 5026 ASSERT_CALLBACK_STATE(arguments->thread());
5025 Api::SetIntegerReturnValue(arguments, retval); 5027 Api::SetIntegerReturnValue(arguments, retval);
5026 } 5028 }
5027 } 5029 }
5028 5030
5029 5031
5030 DART_EXPORT void Dart_SetDoubleReturnValue(Dart_NativeArguments args, 5032 DART_EXPORT void Dart_SetDoubleReturnValue(Dart_NativeArguments args,
5031 double retval) { 5033 double retval) {
5032 NativeArguments* arguments = reinterpret_cast<NativeArguments*>(args); 5034 NativeArguments* arguments = reinterpret_cast<NativeArguments*>(args);
5033 #if defined(DEBUG) 5035 ASSERT_CALLBACK_STATE(arguments->thread());
5034 Isolate* isolate = arguments->thread()->isolate();
5035 ASSERT(isolate == Isolate::Current());
5036 ASSERT_CALLBACK_STATE(isolate);
5037 #endif
5038 Api::SetDoubleReturnValue(arguments, retval); 5036 Api::SetDoubleReturnValue(arguments, retval);
5039 } 5037 }
5040 5038
5041 5039
5042 // --- Scripts and Libraries --- 5040 // --- Scripts and Libraries ---
5043 5041
5044 DART_EXPORT Dart_Handle Dart_SetLibraryTagHandler( 5042 DART_EXPORT Dart_Handle Dart_SetLibraryTagHandler(
5045 Dart_LibraryTagHandler handler) { 5043 Dart_LibraryTagHandler handler) {
5046 Isolate* isolate = Isolate::Current(); 5044 Isolate* isolate = Isolate::Current();
5047 CHECK_ISOLATE(isolate); 5045 CHECK_ISOLATE(isolate);
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
5096 CURRENT_FUNC, library_url.ToCString()); 5094 CURRENT_FUNC, library_url.ToCString());
5097 } 5095 }
5098 if (line_offset < 0) { 5096 if (line_offset < 0) {
5099 return Api::NewError("%s: argument 'line_offset' must be positive number", 5097 return Api::NewError("%s: argument 'line_offset' must be positive number",
5100 CURRENT_FUNC); 5098 CURRENT_FUNC);
5101 } 5099 }
5102 if (column_offset < 0) { 5100 if (column_offset < 0) {
5103 return Api::NewError("%s: argument 'column_offset' must be positive number", 5101 return Api::NewError("%s: argument 'column_offset' must be positive number",
5104 CURRENT_FUNC); 5102 CURRENT_FUNC);
5105 } 5103 }
5106 CHECK_CALLBACK_STATE(I); 5104 CHECK_CALLBACK_STATE(T);
5107 CHECK_COMPILATION_ALLOWED(I); 5105 CHECK_COMPILATION_ALLOWED(I);
5108 5106
5109 NoHeapGrowthControlScope no_growth_control; 5107 NoHeapGrowthControlScope no_growth_control;
5110 5108
5111 library = Library::New(url_str); 5109 library = Library::New(url_str);
5112 library.set_debuggable(true); 5110 library.set_debuggable(true);
5113 library.Register(); 5111 library.Register();
5114 I->object_store()->set_root_library(library); 5112 I->object_store()->set_root_library(library);
5115 5113
5116 const Script& script = Script::Handle(Z, 5114 const Script& script = Script::Handle(Z,
(...skipping 23 matching lines...) Expand all
5140 return Api::NewError("%s: 'buffer_len' of %" Pd " is not equal to %" Pd 5138 return Api::NewError("%s: 'buffer_len' of %" Pd " is not equal to %" Pd
5141 " which is the expected length in the snapshot.", 5139 " which is the expected length in the snapshot.",
5142 CURRENT_FUNC, buffer_len, snapshot->length()); 5140 CURRENT_FUNC, buffer_len, snapshot->length());
5143 } 5141 }
5144 Library& library = Library::Handle(Z, I->object_store()->root_library()); 5142 Library& library = Library::Handle(Z, I->object_store()->root_library());
5145 if (!library.IsNull()) { 5143 if (!library.IsNull()) {
5146 const String& library_url = String::Handle(Z, library.url()); 5144 const String& library_url = String::Handle(Z, library.url());
5147 return Api::NewError("%s: A script has already been loaded from '%s'.", 5145 return Api::NewError("%s: A script has already been loaded from '%s'.",
5148 CURRENT_FUNC, library_url.ToCString()); 5146 CURRENT_FUNC, library_url.ToCString());
5149 } 5147 }
5150 CHECK_CALLBACK_STATE(I); 5148 CHECK_CALLBACK_STATE(T);
5151 CHECK_COMPILATION_ALLOWED(I); 5149 CHECK_COMPILATION_ALLOWED(I);
5152 5150
5153 ASSERT(snapshot->kind() == Snapshot::kScript); 5151 ASSERT(snapshot->kind() == Snapshot::kScript);
5154 ScriptSnapshotReader reader(snapshot->content(), snapshot->length(), T); 5152 ScriptSnapshotReader reader(snapshot->content(), snapshot->length(), T);
5155 const Object& tmp = Object::Handle(Z, reader.ReadScriptSnapshot()); 5153 const Object& tmp = Object::Handle(Z, reader.ReadScriptSnapshot());
5156 if (tmp.IsError()) { 5154 if (tmp.IsError()) {
5157 return Api::NewHandle(I, tmp.raw()); 5155 return Api::NewHandle(I, tmp.raw());
5158 } 5156 }
5159 library ^= tmp.raw(); 5157 library ^= tmp.raw();
5160 library.set_debuggable(true); 5158 library.set_debuggable(true);
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
5298 DARTSCOPE(Thread::Current()); 5296 DARTSCOPE(Thread::Current());
5299 5297
5300 const Library& lib = Api::UnwrapLibraryHandle(Z, library_in); 5298 const Library& lib = Api::UnwrapLibraryHandle(Z, library_in);
5301 if (lib.IsNull()) { 5299 if (lib.IsNull()) {
5302 RETURN_TYPE_ERROR(Z, library_in, Library); 5300 RETURN_TYPE_ERROR(Z, library_in, Library);
5303 } 5301 }
5304 const Instance& err = Api::UnwrapInstanceHandle(Z, error_in); 5302 const Instance& err = Api::UnwrapInstanceHandle(Z, error_in);
5305 if (err.IsNull()) { 5303 if (err.IsNull()) {
5306 RETURN_TYPE_ERROR(Z, error_in, Instance); 5304 RETURN_TYPE_ERROR(Z, error_in, Instance);
5307 } 5305 }
5308 CHECK_CALLBACK_STATE(I); 5306 CHECK_CALLBACK_STATE(T);
5309 5307
5310 const GrowableObjectArray& pending_deferred_loads = 5308 const GrowableObjectArray& pending_deferred_loads =
5311 GrowableObjectArray::Handle(Z, 5309 GrowableObjectArray::Handle(Z,
5312 I->object_store()->pending_deferred_loads()); 5310 I->object_store()->pending_deferred_loads());
5313 for (intptr_t i = 0; i < pending_deferred_loads.Length(); i++) { 5311 for (intptr_t i = 0; i < pending_deferred_loads.Length(); i++) {
5314 if (pending_deferred_loads.At(i) == lib.raw()) { 5312 if (pending_deferred_loads.At(i) == lib.raw()) {
5315 lib.SetLoadError(err); 5313 lib.SetLoadError(err);
5316 return Api::Null(); 5314 return Api::Null();
5317 } 5315 }
5318 } 5316 }
(...skipping 15 matching lines...) Expand all
5334 RETURN_TYPE_ERROR(Z, source, String); 5332 RETURN_TYPE_ERROR(Z, source, String);
5335 } 5333 }
5336 if (line_offset < 0) { 5334 if (line_offset < 0) {
5337 return Api::NewError("%s: argument 'line_offset' must be positive number", 5335 return Api::NewError("%s: argument 'line_offset' must be positive number",
5338 CURRENT_FUNC); 5336 CURRENT_FUNC);
5339 } 5337 }
5340 if (column_offset < 0) { 5338 if (column_offset < 0) {
5341 return Api::NewError("%s: argument 'column_offset' must be positive number", 5339 return Api::NewError("%s: argument 'column_offset' must be positive number",
5342 CURRENT_FUNC); 5340 CURRENT_FUNC);
5343 } 5341 }
5344 CHECK_CALLBACK_STATE(I); 5342 CHECK_CALLBACK_STATE(T);
5345 CHECK_COMPILATION_ALLOWED(I); 5343 CHECK_COMPILATION_ALLOWED(I);
5346 5344
5347 NoHeapGrowthControlScope no_growth_control; 5345 NoHeapGrowthControlScope no_growth_control;
5348 5346
5349 Library& library = Library::Handle(Z, Library::LookupLibrary(url_str)); 5347 Library& library = Library::Handle(Z, Library::LookupLibrary(url_str));
5350 if (library.IsNull()) { 5348 if (library.IsNull()) {
5351 library = Library::New(url_str); 5349 library = Library::New(url_str);
5352 library.Register(); 5350 library.Register();
5353 } else if (library.LoadInProgress() || 5351 } else if (library.LoadInProgress() ||
5354 library.Loaded() || 5352 library.Loaded() ||
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
5392 if (import_vm.IsNull()) { 5390 if (import_vm.IsNull()) {
5393 RETURN_TYPE_ERROR(Z, import, Library); 5391 RETURN_TYPE_ERROR(Z, import, Library);
5394 } 5392 }
5395 const Object& prefix_object = Object::Handle(Z, Api::UnwrapHandle(prefix)); 5393 const Object& prefix_object = Object::Handle(Z, Api::UnwrapHandle(prefix));
5396 const String& prefix_vm = prefix_object.IsNull() 5394 const String& prefix_vm = prefix_object.IsNull()
5397 ? Symbols::Empty() 5395 ? Symbols::Empty()
5398 : String::Cast(prefix_object); 5396 : String::Cast(prefix_object);
5399 if (prefix_vm.IsNull()) { 5397 if (prefix_vm.IsNull()) {
5400 RETURN_TYPE_ERROR(Z, prefix, String); 5398 RETURN_TYPE_ERROR(Z, prefix, String);
5401 } 5399 }
5402 CHECK_CALLBACK_STATE(I); 5400 CHECK_CALLBACK_STATE(T);
5403 CHECK_COMPILATION_ALLOWED(I); 5401 CHECK_COMPILATION_ALLOWED(I);
5404 5402
5405 const String& prefix_symbol = String::Handle(Z, Symbols::New(prefix_vm)); 5403 const String& prefix_symbol = String::Handle(Z, Symbols::New(prefix_vm));
5406 const Namespace& import_ns = Namespace::Handle(Z, 5404 const Namespace& import_ns = Namespace::Handle(Z,
5407 Namespace::New(import_vm, Object::null_array(), Object::null_array())); 5405 Namespace::New(import_vm, Object::null_array(), Object::null_array()));
5408 if (prefix_vm.Length() == 0) { 5406 if (prefix_vm.Length() == 0) {
5409 library_vm.AddImport(import_ns); 5407 library_vm.AddImport(import_ns);
5410 } else { 5408 } else {
5411 LibraryPrefix& library_prefix = LibraryPrefix::Handle(); 5409 LibraryPrefix& library_prefix = LibraryPrefix::Handle();
5412 library_prefix = library_vm.LookupLocalLibraryPrefix(prefix_symbol); 5410 library_prefix = library_vm.LookupLocalLibraryPrefix(prefix_symbol);
(...skipping 28 matching lines...) Expand all
5441 RETURN_TYPE_ERROR(Z, source, String); 5439 RETURN_TYPE_ERROR(Z, source, String);
5442 } 5440 }
5443 if (line_offset < 0) { 5441 if (line_offset < 0) {
5444 return Api::NewError("%s: argument 'line_offset' must be positive number", 5442 return Api::NewError("%s: argument 'line_offset' must be positive number",
5445 CURRENT_FUNC); 5443 CURRENT_FUNC);
5446 } 5444 }
5447 if (column_offset < 0) { 5445 if (column_offset < 0) {
5448 return Api::NewError("%s: argument 'column_offset' must be positive number", 5446 return Api::NewError("%s: argument 'column_offset' must be positive number",
5449 CURRENT_FUNC); 5447 CURRENT_FUNC);
5450 } 5448 }
5451 CHECK_CALLBACK_STATE(I); 5449 CHECK_CALLBACK_STATE(T);
5452 CHECK_COMPILATION_ALLOWED(I); 5450 CHECK_COMPILATION_ALLOWED(I);
5453 5451
5454 NoHeapGrowthControlScope no_growth_control; 5452 NoHeapGrowthControlScope no_growth_control;
5455 5453
5456 const Script& script = Script::Handle(Z, 5454 const Script& script = Script::Handle(Z,
5457 Script::New(url_str, source_str, RawScript::kSourceTag)); 5455 Script::New(url_str, source_str, RawScript::kSourceTag));
5458 script.SetLocationOffset(line_offset, column_offset); 5456 script.SetLocationOffset(line_offset, column_offset);
5459 Dart_Handle result; 5457 Dart_Handle result;
5460 CompileSource(I, lib, script, &result); 5458 CompileSource(I, lib, script, &result);
5461 return result; 5459 return result;
5462 } 5460 }
5463 5461
5464 5462
5465 DART_EXPORT Dart_Handle Dart_LibraryLoadPatch(Dart_Handle library, 5463 DART_EXPORT Dart_Handle Dart_LibraryLoadPatch(Dart_Handle library,
5466 Dart_Handle url, 5464 Dart_Handle url,
5467 Dart_Handle patch_source) { 5465 Dart_Handle patch_source) {
5468 DARTSCOPE(Thread::Current()); 5466 DARTSCOPE(Thread::Current());
5469 const Library& lib = Api::UnwrapLibraryHandle(Z, library); 5467 const Library& lib = Api::UnwrapLibraryHandle(Z, library);
5470 if (lib.IsNull()) { 5468 if (lib.IsNull()) {
5471 RETURN_TYPE_ERROR(Z, library, Library); 5469 RETURN_TYPE_ERROR(Z, library, Library);
5472 } 5470 }
5473 const String& url_str = Api::UnwrapStringHandle(Z, url); 5471 const String& url_str = Api::UnwrapStringHandle(Z, url);
5474 if (url_str.IsNull()) { 5472 if (url_str.IsNull()) {
5475 RETURN_TYPE_ERROR(Z, url, String); 5473 RETURN_TYPE_ERROR(Z, url, String);
5476 } 5474 }
5477 const String& source_str = Api::UnwrapStringHandle(Z, patch_source); 5475 const String& source_str = Api::UnwrapStringHandle(Z, patch_source);
5478 if (source_str.IsNull()) { 5476 if (source_str.IsNull()) {
5479 RETURN_TYPE_ERROR(Z, patch_source, String); 5477 RETURN_TYPE_ERROR(Z, patch_source, String);
5480 } 5478 }
5481 CHECK_CALLBACK_STATE(I); 5479 CHECK_CALLBACK_STATE(T);
5482 CHECK_COMPILATION_ALLOWED(I); 5480 CHECK_COMPILATION_ALLOWED(I);
5483 5481
5484 NoHeapGrowthControlScope no_growth_control; 5482 NoHeapGrowthControlScope no_growth_control;
5485 5483
5486 const Script& script = Script::Handle(Z, 5484 const Script& script = Script::Handle(Z,
5487 Script::New(url_str, source_str, RawScript::kPatchTag)); 5485 Script::New(url_str, source_str, RawScript::kPatchTag));
5488 Dart_Handle result; 5486 Dart_Handle result;
5489 CompileSource(I, lib, script, &result); 5487 CompileSource(I, lib, script, &result);
5490 return result; 5488 return result;
5491 } 5489 }
5492 5490
5493 5491
5494 // Finalizes classes and invokes Dart core library function that completes 5492 // Finalizes classes and invokes Dart core library function that completes
5495 // futures of loadLibrary calls (deferred library loading). 5493 // futures of loadLibrary calls (deferred library loading).
5496 DART_EXPORT Dart_Handle Dart_FinalizeLoading(bool complete_futures) { 5494 DART_EXPORT Dart_Handle Dart_FinalizeLoading(bool complete_futures) {
5497 DARTSCOPE(Thread::Current()); 5495 DARTSCOPE(Thread::Current());
5498 CHECK_CALLBACK_STATE(I); 5496 CHECK_CALLBACK_STATE(T);
5499 5497
5500 I->DoneLoading(); 5498 I->DoneLoading();
5501 5499
5502 // TODO(hausner): move the remaining code below (finalization and 5500 // TODO(hausner): move the remaining code below (finalization and
5503 // invoing of _completeDeferredLoads) into Isolate::DoneLoading(). 5501 // invoing of _completeDeferredLoads) into Isolate::DoneLoading().
5504 5502
5505 // Finalize all classes if needed. 5503 // Finalize all classes if needed.
5506 Dart_Handle state = Api::CheckAndFinalizePendingClasses(I); 5504 Dart_Handle state = Api::CheckAndFinalizePendingClasses(I);
5507 if (::Dart_IsError(state)) { 5505 if (::Dart_IsError(state)) {
5508 return state; 5506 return state;
(...skipping 525 matching lines...) Expand 10 before | Expand all | Expand 10 after
6034 6032
6035 6033
6036 DART_EXPORT Dart_Handle Dart_Precompile( 6034 DART_EXPORT Dart_Handle Dart_Precompile(
6037 Dart_QualifiedFunctionName entry_points[], 6035 Dart_QualifiedFunctionName entry_points[],
6038 bool reset_fields) { 6036 bool reset_fields) {
6039 DARTSCOPE(Thread::Current()); 6037 DARTSCOPE(Thread::Current());
6040 Dart_Handle result = Api::CheckAndFinalizePendingClasses(I); 6038 Dart_Handle result = Api::CheckAndFinalizePendingClasses(I);
6041 if (::Dart_IsError(result)) { 6039 if (::Dart_IsError(result)) {
6042 return result; 6040 return result;
6043 } 6041 }
6044 CHECK_CALLBACK_STATE(I); 6042 CHECK_CALLBACK_STATE(T);
6045 const Error& error = Error::Handle(Precompiler::CompileAll(entry_points, 6043 const Error& error = Error::Handle(Precompiler::CompileAll(entry_points,
6046 reset_fields)); 6044 reset_fields));
6047 if (!error.IsNull()) { 6045 if (!error.IsNull()) {
6048 return Api::NewHandle(I, error.raw()); 6046 return Api::NewHandle(I, error.raw());
6049 } 6047 }
6050 return Api::Success(); 6048 return Api::Success();
6051 } 6049 }
6052 6050
6053 6051
6054 DART_EXPORT Dart_Handle Dart_CreatePrecompiledSnapshot( 6052 DART_EXPORT Dart_Handle Dart_CreatePrecompiledSnapshot(
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
6090 ApiReallocate); 6088 ApiReallocate);
6091 writer.WriteFullSnapshot(); 6089 writer.WriteFullSnapshot();
6092 *vm_isolate_snapshot_size = writer.VmIsolateSnapshotSize(); 6090 *vm_isolate_snapshot_size = writer.VmIsolateSnapshotSize();
6093 *isolate_snapshot_size = writer.IsolateSnapshotSize(); 6091 *isolate_snapshot_size = writer.IsolateSnapshotSize();
6094 *instructions_snapshot_size = writer.InstructionsSnapshotSize(); 6092 *instructions_snapshot_size = writer.InstructionsSnapshotSize();
6095 6093
6096 return Api::Success(); 6094 return Api::Success();
6097 } 6095 }
6098 6096
6099 } // namespace dart 6097 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/dart_api_impl.h ('k') | runtime/vm/dart_entry.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698