| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include "include/dart_api.h" | 5 #include "include/dart_api.h" |
| 6 | 6 |
| 7 #include "vm/bigint_operations.h" | 7 #include "vm/bigint_operations.h" |
| 8 #include "vm/class_finalizer.h" | 8 #include "vm/class_finalizer.h" |
| 9 #include "vm/compiler.h" | 9 #include "vm/compiler.h" |
| 10 #include "vm/dart.h" | 10 #include "vm/dart.h" |
| (...skipping 2643 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2654 | 2654 |
| 2655 const GrowableObjectArray& names = | 2655 const GrowableObjectArray& names = |
| 2656 GrowableObjectArray::Handle(isolate, GrowableObjectArray::New()); | 2656 GrowableObjectArray::Handle(isolate, GrowableObjectArray::New()); |
| 2657 Function& func = Function::Handle(); | 2657 Function& func = Function::Handle(); |
| 2658 String& name = String::Handle(); | 2658 String& name = String::Handle(); |
| 2659 | 2659 |
| 2660 if (obj.IsClass()) { | 2660 if (obj.IsClass()) { |
| 2661 const Class& cls = Class::Cast(obj); | 2661 const Class& cls = Class::Cast(obj); |
| 2662 const Array& func_array = Array::Handle(cls.functions()); | 2662 const Array& func_array = Array::Handle(cls.functions()); |
| 2663 | 2663 |
| 2664 // Some special types like 'Dynamic' have a null functions list. | 2664 // Some special types like 'dynamic' have a null functions list. |
| 2665 if (!func_array.IsNull()) { | 2665 if (!func_array.IsNull()) { |
| 2666 for (intptr_t i = 0; i < func_array.Length(); ++i) { | 2666 for (intptr_t i = 0; i < func_array.Length(); ++i) { |
| 2667 func ^= func_array.At(i); | 2667 func ^= func_array.At(i); |
| 2668 | 2668 |
| 2669 // Skip implicit getters and setters. | 2669 // Skip implicit getters and setters. |
| 2670 if (func.kind() == RawFunction::kImplicitGetter || | 2670 if (func.kind() == RawFunction::kImplicitGetter || |
| 2671 func.kind() == RawFunction::kImplicitSetter || | 2671 func.kind() == RawFunction::kImplicitSetter || |
| 2672 func.kind() == RawFunction::kConstImplicitGetter) { | 2672 func.kind() == RawFunction::kConstImplicitGetter) { |
| 2673 continue; | 2673 continue; |
| 2674 } | 2674 } |
| (...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2909 DART_EXPORT Dart_Handle Dart_FunctionReturnType(Dart_Handle function) { | 2909 DART_EXPORT Dart_Handle Dart_FunctionReturnType(Dart_Handle function) { |
| 2910 Isolate* isolate = Isolate::Current(); | 2910 Isolate* isolate = Isolate::Current(); |
| 2911 DARTSCOPE(isolate); | 2911 DARTSCOPE(isolate); |
| 2912 const Function& func = Api::UnwrapFunctionHandle(isolate, function); | 2912 const Function& func = Api::UnwrapFunctionHandle(isolate, function); |
| 2913 if (func.IsNull()) { | 2913 if (func.IsNull()) { |
| 2914 RETURN_TYPE_ERROR(isolate, function, Function); | 2914 RETURN_TYPE_ERROR(isolate, function, Function); |
| 2915 } | 2915 } |
| 2916 | 2916 |
| 2917 if (func.kind() == RawFunction::kConstructor) { | 2917 if (func.kind() == RawFunction::kConstructor) { |
| 2918 // Special case the return type for constructors. Inside the vm | 2918 // Special case the return type for constructors. Inside the vm |
| 2919 // we mark them as returning Dynamic, but for the purposes of | 2919 // we mark them as returning dynamic, but for the purposes of |
| 2920 // reflection, they return the type of the class being | 2920 // reflection, they return the type of the class being |
| 2921 // constructed. | 2921 // constructed. |
| 2922 return Api::NewHandle(isolate, func.Owner()); | 2922 return Api::NewHandle(isolate, func.Owner()); |
| 2923 } else { | 2923 } else { |
| 2924 const AbstractType& return_type = | 2924 const AbstractType& return_type = |
| 2925 AbstractType::Handle(isolate, func.result_type()); | 2925 AbstractType::Handle(isolate, func.result_type()); |
| 2926 return TypeToHandle(isolate, "Dart_FunctionReturnType", return_type); | 2926 return TypeToHandle(isolate, "Dart_FunctionReturnType", return_type); |
| 2927 } | 2927 } |
| 2928 } | 2928 } |
| 2929 | 2929 |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2994 | 2994 |
| 2995 const GrowableObjectArray& names = | 2995 const GrowableObjectArray& names = |
| 2996 GrowableObjectArray::Handle(isolate, GrowableObjectArray::New()); | 2996 GrowableObjectArray::Handle(isolate, GrowableObjectArray::New()); |
| 2997 Field& field = Field::Handle(isolate); | 2997 Field& field = Field::Handle(isolate); |
| 2998 String& name = String::Handle(isolate); | 2998 String& name = String::Handle(isolate); |
| 2999 | 2999 |
| 3000 if (obj.IsClass()) { | 3000 if (obj.IsClass()) { |
| 3001 const Class& cls = Class::Cast(obj); | 3001 const Class& cls = Class::Cast(obj); |
| 3002 const Array& field_array = Array::Handle(cls.fields()); | 3002 const Array& field_array = Array::Handle(cls.fields()); |
| 3003 | 3003 |
| 3004 // Some special types like 'Dynamic' have a null fields list. | 3004 // Some special types like 'dynamic' have a null fields list. |
| 3005 // | 3005 // |
| 3006 // TODO(turnidge): Fix 'Dynamic' so that it does not have a null | 3006 // TODO(turnidge): Fix 'dynamic' so that it does not have a null |
| 3007 // fields list. This will have to wait until the empty array is | 3007 // fields list. This will have to wait until the empty array is |
| 3008 // allocated in the vm isolate. | 3008 // allocated in the vm isolate. |
| 3009 if (!field_array.IsNull()) { | 3009 if (!field_array.IsNull()) { |
| 3010 for (intptr_t i = 0; i < field_array.Length(); ++i) { | 3010 for (intptr_t i = 0; i < field_array.Length(); ++i) { |
| 3011 field ^= field_array.At(i); | 3011 field ^= field_array.At(i); |
| 3012 name = field.UserVisibleName(); | 3012 name = field.UserVisibleName(); |
| 3013 names.Add(name); | 3013 names.Add(name); |
| 3014 } | 3014 } |
| 3015 } | 3015 } |
| 3016 } else if (obj.IsLibrary()) { | 3016 } else if (obj.IsLibrary()) { |
| (...skipping 1460 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4477 } | 4477 } |
| 4478 { | 4478 { |
| 4479 NoGCScope no_gc; | 4479 NoGCScope no_gc; |
| 4480 RawObject* raw_obj = obj.raw(); | 4480 RawObject* raw_obj = obj.raw(); |
| 4481 isolate->heap()->SetPeer(raw_obj, peer); | 4481 isolate->heap()->SetPeer(raw_obj, peer); |
| 4482 } | 4482 } |
| 4483 return Api::Success(isolate); | 4483 return Api::Success(isolate); |
| 4484 } | 4484 } |
| 4485 | 4485 |
| 4486 } // namespace dart | 4486 } // namespace dart |
| OLD | NEW |