OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "include/dart_api.h" | 5 #include "include/dart_api.h" |
6 #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 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 | 64 |
65 static RawInstance* GetListInstance(Isolate* isolate, const Object& obj) { | 65 static RawInstance* GetListInstance(Isolate* isolate, const Object& obj) { |
66 if (obj.IsInstance()) { | 66 if (obj.IsInstance()) { |
67 const Library& core_lib = Library::Handle(Library::CoreLibrary()); | 67 const Library& core_lib = Library::Handle(Library::CoreLibrary()); |
68 const Class& list_class = | 68 const Class& list_class = |
69 Class::Handle(core_lib.LookupClass(Symbols::List())); | 69 Class::Handle(core_lib.LookupClass(Symbols::List())); |
70 ASSERT(!list_class.IsNull()); | 70 ASSERT(!list_class.IsNull()); |
71 const Instance& instance = Instance::Cast(obj); | 71 const Instance& instance = Instance::Cast(obj); |
72 const Class& obj_class = Class::Handle(isolate, obj.clazz()); | 72 const Class& obj_class = Class::Handle(isolate, obj.clazz()); |
73 Error& malformed_type_error = Error::Handle(isolate); | 73 Error& malformed_type_error = Error::Handle(isolate); |
74 if (obj_class.IsSubtypeOf(TypeArguments::Handle(isolate), | 74 if (obj_class.IsSubtypeOf(Object::null_type_arguments(), |
75 list_class, | 75 list_class, |
76 TypeArguments::Handle(isolate), | 76 Object::null_type_arguments(), |
77 &malformed_type_error)) { | 77 &malformed_type_error)) { |
78 ASSERT(malformed_type_error.IsNull()); // Type is a raw List. | 78 ASSERT(malformed_type_error.IsNull()); // Type is a raw List. |
79 return instance.raw(); | 79 return instance.raw(); |
80 } | 80 } |
81 } | 81 } |
82 return Instance::null(); | 82 return Instance::null(); |
83 } | 83 } |
84 | 84 |
85 static RawInstance* GetMapInstance(Isolate* isolate, const Object& obj) { | 85 static RawInstance* GetMapInstance(Isolate* isolate, const Object& obj) { |
86 if (obj.IsInstance()) { | 86 if (obj.IsInstance()) { |
87 const Library& core_lib = Library::Handle(Library::CoreLibrary()); | 87 const Library& core_lib = Library::Handle(Library::CoreLibrary()); |
88 const Class& map_class = | 88 const Class& map_class = |
89 Class::Handle(core_lib.LookupClass(Symbols::Map())); | 89 Class::Handle(core_lib.LookupClass(Symbols::Map())); |
90 ASSERT(!map_class.IsNull()); | 90 ASSERT(!map_class.IsNull()); |
91 const Instance& instance = Instance::Cast(obj); | 91 const Instance& instance = Instance::Cast(obj); |
92 const Class& obj_class = Class::Handle(isolate, obj.clazz()); | 92 const Class& obj_class = Class::Handle(isolate, obj.clazz()); |
93 Error& malformed_type_error = Error::Handle(isolate); | 93 Error& malformed_type_error = Error::Handle(isolate); |
94 if (obj_class.IsSubtypeOf(TypeArguments::Handle(isolate), | 94 if (obj_class.IsSubtypeOf(Object::null_type_arguments(), |
95 map_class, | 95 map_class, |
96 TypeArguments::Handle(isolate), | 96 Object::null_type_arguments(), |
97 &malformed_type_error)) { | 97 &malformed_type_error)) { |
98 ASSERT(malformed_type_error.IsNull()); // Type is a raw Map. | 98 ASSERT(malformed_type_error.IsNull()); // Type is a raw Map. |
99 return instance.raw(); | 99 return instance.raw(); |
100 } | 100 } |
101 } | 101 } |
102 return Instance::null(); | 102 return Instance::null(); |
103 } | 103 } |
104 | 104 |
105 | 105 |
106 static bool GetNativeStringArgument(NativeArguments* arguments, | 106 static bool GetNativeStringArgument(NativeArguments* arguments, |
(...skipping 1756 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1863 RawObject::IsTypedDataViewClassId(cid); | 1863 RawObject::IsTypedDataViewClassId(cid); |
1864 } | 1864 } |
1865 | 1865 |
1866 | 1866 |
1867 DART_EXPORT bool Dart_IsByteBuffer(Dart_Handle handle) { | 1867 DART_EXPORT bool Dart_IsByteBuffer(Dart_Handle handle) { |
1868 TRACE_API_CALL(CURRENT_FUNC); | 1868 TRACE_API_CALL(CURRENT_FUNC); |
1869 return Api::ClassId(handle) == kByteBufferCid; | 1869 return Api::ClassId(handle) == kByteBufferCid; |
1870 } | 1870 } |
1871 | 1871 |
1872 | 1872 |
| 1873 DART_EXPORT bool Dart_IsFuture(Dart_Handle handle) { |
| 1874 TRACE_API_CALL(CURRENT_FUNC); |
| 1875 Isolate* isolate = Isolate::Current(); |
| 1876 DARTSCOPE(isolate); |
| 1877 const Object& obj = Object::Handle(isolate, Api::UnwrapHandle(handle)); |
| 1878 if (obj.IsInstance()) { |
| 1879 const Library& async_lib = |
| 1880 Library::Handle(isolate, Library::AsyncLibrary()); |
| 1881 const Class& future_class = |
| 1882 Class::Handle(isolate, async_lib.LookupClass(Symbols::Future())); |
| 1883 ASSERT(!future_class.IsNull()); |
| 1884 const Class& obj_class = Class::Handle(isolate, obj.clazz()); |
| 1885 Error& malformed_type_error = Error::Handle(isolate); |
| 1886 bool is_future = obj_class.IsSubtypeOf(Object::null_type_arguments(), |
| 1887 future_class, |
| 1888 Object::null_type_arguments(), |
| 1889 &malformed_type_error); |
| 1890 ASSERT(malformed_type_error.IsNull()); // Type is a raw Future. |
| 1891 return is_future; |
| 1892 } |
| 1893 return false; |
| 1894 } |
| 1895 |
| 1896 |
1873 // --- Instances ---- | 1897 // --- Instances ---- |
1874 | 1898 |
1875 DART_EXPORT Dart_Handle Dart_InstanceGetType(Dart_Handle instance) { | 1899 DART_EXPORT Dart_Handle Dart_InstanceGetType(Dart_Handle instance) { |
1876 Isolate* isolate = Isolate::Current(); | 1900 Isolate* isolate = Isolate::Current(); |
1877 DARTSCOPE(isolate); | 1901 DARTSCOPE(isolate); |
1878 const Object& obj = Object::Handle(isolate, Api::UnwrapHandle(instance)); | 1902 const Object& obj = Object::Handle(isolate, Api::UnwrapHandle(instance)); |
1879 if (obj.IsNull()) { | 1903 if (obj.IsNull()) { |
1880 return Api::NewHandle(isolate, isolate->object_store()->null_type()); | 1904 return Api::NewHandle(isolate, isolate->object_store()->null_type()); |
1881 } | 1905 } |
1882 if (!obj.IsInstance()) { | 1906 if (!obj.IsInstance()) { |
(...skipping 3501 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5384 | 5408 |
5385 | 5409 |
5386 DART_EXPORT void Dart_RegisterRootServiceRequestCallback( | 5410 DART_EXPORT void Dart_RegisterRootServiceRequestCallback( |
5387 const char* name, | 5411 const char* name, |
5388 Dart_ServiceRequestCallback callback, | 5412 Dart_ServiceRequestCallback callback, |
5389 void* user_data) { | 5413 void* user_data) { |
5390 Service::RegisterRootEmbedderCallback(name, callback, user_data); | 5414 Service::RegisterRootEmbedderCallback(name, callback, user_data); |
5391 } | 5415 } |
5392 | 5416 |
5393 } // namespace dart | 5417 } // namespace dart |
OLD | NEW |