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/bigint_operations.h" | 10 #include "vm/bigint_operations.h" |
(...skipping 1320 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1331 } | 1331 } |
1332 // Finalize all classes. | 1332 // Finalize all classes. |
1333 Dart_Handle state = Api::CheckIsolateState(isolate); | 1333 Dart_Handle state = Api::CheckIsolateState(isolate); |
1334 if (::Dart_IsError(state)) { | 1334 if (::Dart_IsError(state)) { |
1335 *value = false; | 1335 *value = false; |
1336 return state; | 1336 return state; |
1337 } | 1337 } |
1338 CHECK_CALLBACK_STATE(isolate); | 1338 CHECK_CALLBACK_STATE(isolate); |
1339 Error& malformed_type_error = Error::Handle(isolate); | 1339 Error& malformed_type_error = Error::Handle(isolate); |
1340 *value = instance.IsInstanceOf(type_obj, | 1340 *value = instance.IsInstanceOf(type_obj, |
1341 Object::null_abstract_type_arguments(), | 1341 Object::null_type_arguments(), |
1342 &malformed_type_error); | 1342 &malformed_type_error); |
1343 ASSERT(malformed_type_error.IsNull()); // Type was created from a class. | 1343 ASSERT(malformed_type_error.IsNull()); // Type was created from a class. |
1344 return Api::Success(); | 1344 return Api::Success(); |
1345 } | 1345 } |
1346 | 1346 |
1347 | 1347 |
1348 DART_EXPORT bool Dart_IsInstance(Dart_Handle object) { | 1348 DART_EXPORT bool Dart_IsInstance(Dart_Handle object) { |
1349 Isolate* isolate = Isolate::Current(); | 1349 Isolate* isolate = Isolate::Current(); |
1350 DARTSCOPE(isolate); | 1350 DARTSCOPE(isolate); |
1351 const Object& obj = Object::Handle(isolate, Api::UnwrapHandle(object)); | 1351 const Object& obj = Object::Handle(isolate, Api::UnwrapHandle(object)); |
(...skipping 1586 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2938 } | 2938 } |
2939 | 2939 |
2940 // Get the class to instantiate. | 2940 // Get the class to instantiate. |
2941 Object& unchecked_type = Object::Handle(Api::UnwrapHandle(type)); | 2941 Object& unchecked_type = Object::Handle(Api::UnwrapHandle(type)); |
2942 if (unchecked_type.IsNull() || !unchecked_type.IsType()) { | 2942 if (unchecked_type.IsNull() || !unchecked_type.IsType()) { |
2943 RETURN_TYPE_ERROR(isolate, type, Type); | 2943 RETURN_TYPE_ERROR(isolate, type, Type); |
2944 } | 2944 } |
2945 Type& type_obj = Type::Handle(); | 2945 Type& type_obj = Type::Handle(); |
2946 type_obj ^= unchecked_type.raw(); | 2946 type_obj ^= unchecked_type.raw(); |
2947 Class& cls = Class::Handle(isolate, type_obj.type_class()); | 2947 Class& cls = Class::Handle(isolate, type_obj.type_class()); |
2948 AbstractTypeArguments& type_arguments = | 2948 TypeArguments& type_arguments = |
2949 AbstractTypeArguments::Handle(isolate, type_obj.arguments()); | 2949 TypeArguments::Handle(isolate, type_obj.arguments()); |
2950 | 2950 |
2951 const String& base_constructor_name = String::Handle(isolate, cls.Name()); | 2951 const String& base_constructor_name = String::Handle(isolate, cls.Name()); |
2952 | 2952 |
2953 // And get the name of the constructor to invoke. | 2953 // And get the name of the constructor to invoke. |
2954 String& dot_name = String::Handle(isolate); | 2954 String& dot_name = String::Handle(isolate); |
2955 result = Api::UnwrapHandle(constructor_name); | 2955 result = Api::UnwrapHandle(constructor_name); |
2956 if (result.IsNull()) { | 2956 if (result.IsNull()) { |
2957 dot_name = Symbols::Dot().raw(); | 2957 dot_name = Symbols::Dot().raw(); |
2958 } else if (result.IsString()) { | 2958 } else if (result.IsString()) { |
2959 dot_name = String::Concat(Symbols::Dot(), String::Cast(result)); | 2959 dot_name = String::Concat(Symbols::Dot(), String::Cast(result)); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2992 | 2992 |
2993 if (!redirect_type.IsInstantiated()) { | 2993 if (!redirect_type.IsInstantiated()) { |
2994 // The type arguments of the redirection type are instantiated from the | 2994 // The type arguments of the redirection type are instantiated from the |
2995 // type arguments of the type argument. | 2995 // type arguments of the type argument. |
2996 Error& bound_error = Error::Handle(); | 2996 Error& bound_error = Error::Handle(); |
2997 redirect_type ^= redirect_type.InstantiateFrom(type_arguments, | 2997 redirect_type ^= redirect_type.InstantiateFrom(type_arguments, |
2998 &bound_error); | 2998 &bound_error); |
2999 if (!bound_error.IsNull()) { | 2999 if (!bound_error.IsNull()) { |
3000 return Api::NewHandle(isolate, bound_error.raw()); | 3000 return Api::NewHandle(isolate, bound_error.raw()); |
3001 } | 3001 } |
3002 redirect_type ^= redirect_type.Canonicalize(); | |
3002 } | 3003 } |
3003 | 3004 |
3004 type_obj = redirect_type.raw(); | 3005 type_obj = redirect_type.raw(); |
3005 type_arguments = redirect_type.arguments(); | 3006 type_arguments = redirect_type.arguments(); |
3006 | 3007 |
3007 cls = type_obj.type_class(); | 3008 cls = type_obj.type_class(); |
3008 } | 3009 } |
3009 if (constructor.IsConstructor()) { | 3010 if (constructor.IsConstructor()) { |
3010 // Create the new object. | 3011 // Create the new object. |
3011 new_object = Instance::New(cls); | 3012 new_object = Instance::New(cls); |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3153 | 3154 |
3154 // Construct name of the constructor to invoke. | 3155 // Construct name of the constructor to invoke. |
3155 const Type& type_obj = Type::Handle(isolate, instance.GetType()); | 3156 const Type& type_obj = Type::Handle(isolate, instance.GetType()); |
3156 const Class& cls = Class::Handle(isolate, type_obj.type_class()); | 3157 const Class& cls = Class::Handle(isolate, type_obj.type_class()); |
3157 const String& class_name = String::Handle(isolate, cls.Name()); | 3158 const String& class_name = String::Handle(isolate, cls.Name()); |
3158 const Array& strings = Array::Handle(Array::New(3)); | 3159 const Array& strings = Array::Handle(Array::New(3)); |
3159 strings.SetAt(0, class_name); | 3160 strings.SetAt(0, class_name); |
3160 strings.SetAt(1, Symbols::Dot()); | 3161 strings.SetAt(1, Symbols::Dot()); |
3161 strings.SetAt(2, constructor_name); | 3162 strings.SetAt(2, constructor_name); |
3162 const String& dot_name = String::Handle(isolate, String::ConcatAll(strings)); | 3163 const String& dot_name = String::Handle(isolate, String::ConcatAll(strings)); |
3163 const AbstractTypeArguments& type_arguments = | 3164 const TypeArguments& type_arguments = |
3164 AbstractTypeArguments::Handle(isolate, type_obj.arguments()); | 3165 TypeArguments::Handle(isolate, type_obj.arguments()); |
srdjan
2014/02/07 21:59:47
Indent 4 spaces
| |
3165 const Function& constructor = | 3166 const Function& constructor = |
3166 Function::Handle(isolate, cls.LookupFunctionAllowPrivate(dot_name)); | 3167 Function::Handle(isolate, cls.LookupFunctionAllowPrivate(dot_name)); |
3167 const int extra_args = 2; | 3168 const int extra_args = 2; |
3168 if (!constructor.IsNull() && | 3169 if (!constructor.IsNull() && |
3169 constructor.IsConstructor() && | 3170 constructor.IsConstructor() && |
3170 constructor.AreValidArgumentCounts(number_of_arguments + extra_args, | 3171 constructor.AreValidArgumentCounts(number_of_arguments + extra_args, |
3171 0, | 3172 0, |
3172 NULL)) { | 3173 NULL)) { |
3173 // Create the argument list. | 3174 // Create the argument list. |
3174 // Constructors get the uninitialized object and a constructor phase. | 3175 // Constructors get the uninitialized object and a constructor phase. |
(...skipping 1373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4548 } | 4549 } |
4549 | 4550 |
4550 | 4551 |
4551 // --- Service support --- | 4552 // --- Service support --- |
4552 | 4553 |
4553 DART_EXPORT Dart_Isolate Dart_GetServiceIsolate(void* callback_data) { | 4554 DART_EXPORT Dart_Isolate Dart_GetServiceIsolate(void* callback_data) { |
4554 return Api::CastIsolate(Service::GetServiceIsolate(callback_data)); | 4555 return Api::CastIsolate(Service::GetServiceIsolate(callback_data)); |
4555 } | 4556 } |
4556 | 4557 |
4557 } // namespace dart | 4558 } // namespace dart |
OLD | NEW |