| 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 #include "include/dart_debugger_api.h" | 6 #include "include/dart_debugger_api.h" |
| 7 #include "include/dart_mirrors_api.h" | 7 #include "include/dart_mirrors_api.h" |
| 8 #include "vm/dart_api_impl.h" | 8 #include "vm/dart_api_impl.h" |
| 9 #include "vm/dart_api_state.h" // TODO(11742): Remove with CreateMirrorRef. | 9 #include "vm/dart_api_state.h" // TODO(11742): Remove with CreateMirrorRef. |
| 10 #include "vm/bootstrap_natives.h" | 10 #include "vm/bootstrap_natives.h" |
| (...skipping 963 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 974 name_handle, | 974 name_handle, |
| 975 lib_mirror); | 975 lib_mirror); |
| 976 if (Dart_IsError(result)) { | 976 if (Dart_IsError(result)) { |
| 977 Dart_PropagateError(result); | 977 Dart_PropagateError(result); |
| 978 } | 978 } |
| 979 Dart_SetReturnValue(args, result); | 979 Dart_SetReturnValue(args, result); |
| 980 Dart_ExitScope(); | 980 Dart_ExitScope(); |
| 981 } | 981 } |
| 982 | 982 |
| 983 | 983 |
| 984 static void ThrowMirroredCompilationError(const String& message) { |
| 985 Array& args = Array::Handle(Array::New(1)); |
| 986 args.SetAt(0, message); |
| 987 |
| 988 Exceptions::ThrowByType(Exceptions::kMirroredCompilationError, args); |
| 989 UNREACHABLE(); |
| 990 } |
| 991 |
| 992 |
| 993 static void ThrowInvokeError(const Error& error) { |
| 994 if (error.IsLanguageError()) { |
| 995 // A compilation error that was delayed by lazy compilation. |
| 996 const LanguageError& compilation_error = LanguageError::Cast(error); |
| 997 String& message = String::Handle(compilation_error.message()); |
| 998 ThrowMirroredCompilationError(message); |
| 999 UNREACHABLE(); |
| 1000 } |
| 1001 Exceptions::PropagateError(error); |
| 1002 UNREACHABLE(); |
| 1003 } |
| 1004 |
| 1005 |
| 984 DEFINE_NATIVE_ENTRY(DeclarationMirror_metadata, 1) { | 1006 DEFINE_NATIVE_ENTRY(DeclarationMirror_metadata, 1) { |
| 985 const MirrorReference& decl_ref = | 1007 const MirrorReference& decl_ref = |
| 986 MirrorReference::CheckedHandle(arguments->NativeArgAt(0)); | 1008 MirrorReference::CheckedHandle(arguments->NativeArgAt(0)); |
| 987 const Object& decl = Object::Handle(decl_ref.referent()); | 1009 const Object& decl = Object::Handle(decl_ref.referent()); |
| 988 | 1010 |
| 989 Class& klass = Class::Handle(); | 1011 Class& klass = Class::Handle(); |
| 990 if (decl.IsClass()) { | 1012 if (decl.IsClass()) { |
| 991 klass ^= decl.raw(); | 1013 klass ^= decl.raw(); |
| 992 } else if (decl.IsFunction()) { | 1014 } else if (decl.IsFunction()) { |
| 993 klass = Function::Cast(decl).origin(); | 1015 klass = Function::Cast(decl).origin(); |
| 994 } else if (decl.IsField()) { | 1016 } else if (decl.IsField()) { |
| 995 klass = Field::Cast(decl).origin(); | 1017 klass = Field::Cast(decl).origin(); |
| 996 } else { | 1018 } else { |
| 997 return Object::empty_array().raw(); | 1019 return Object::empty_array().raw(); |
| 998 } | 1020 } |
| 999 | 1021 |
| 1000 const Library& library = Library::Handle(klass.library()); | 1022 const Library& library = Library::Handle(klass.library()); |
| 1001 return library.GetMetadata(decl); | 1023 const Object& metadata = Object::Handle(library.GetMetadata(decl)); |
| 1024 if (metadata.IsError()) { |
| 1025 ThrowInvokeError(Error::Cast(metadata)); |
| 1026 } |
| 1027 return metadata.raw(); |
| 1002 } | 1028 } |
| 1003 | 1029 |
| 1004 | 1030 |
| 1005 void HandleMirrorsMessage(Isolate* isolate, | 1031 void HandleMirrorsMessage(Isolate* isolate, |
| 1006 Dart_Port reply_port, | 1032 Dart_Port reply_port, |
| 1007 const Instance& message) { | 1033 const Instance& message) { |
| 1008 UNIMPLEMENTED(); | 1034 UNIMPLEMENTED(); |
| 1009 } | 1035 } |
| 1010 | 1036 |
| 1011 | 1037 |
| 1012 static void ThrowMirroredCompilationError(const String& message) { | |
| 1013 Array& args = Array::Handle(Array::New(1)); | |
| 1014 args.SetAt(0, message); | |
| 1015 | |
| 1016 Exceptions::ThrowByType(Exceptions::kMirroredCompilationError, args); | |
| 1017 UNREACHABLE(); | |
| 1018 } | |
| 1019 | |
| 1020 | |
| 1021 static void ThrowInvokeError(const Error& error) { | |
| 1022 if (error.IsLanguageError()) { | |
| 1023 // A compilation error that was delayed by lazy compilation. | |
| 1024 const LanguageError& compilation_error = LanguageError::Cast(error); | |
| 1025 String& message = String::Handle(compilation_error.message()); | |
| 1026 ThrowMirroredCompilationError(message); | |
| 1027 UNREACHABLE(); | |
| 1028 } | |
| 1029 Exceptions::PropagateError(error); | |
| 1030 UNREACHABLE(); | |
| 1031 } | |
| 1032 | |
| 1033 | |
| 1034 static bool FieldIsUninitialized(const Field& field) { | 1038 static bool FieldIsUninitialized(const Field& field) { |
| 1035 ASSERT(!field.IsNull()); | 1039 ASSERT(!field.IsNull()); |
| 1036 | 1040 |
| 1037 // Return getter method for uninitialized fields, rather than the | 1041 // Return getter method for uninitialized fields, rather than the |
| 1038 // field object, since the value in the field object will not be | 1042 // field object, since the value in the field object will not be |
| 1039 // initialized until the first time the getter is invoked. | 1043 // initialized until the first time the getter is invoked. |
| 1040 const Instance& value = Instance::Handle(field.value()); | 1044 const Instance& value = Instance::Handle(field.value()); |
| 1041 ASSERT(value.raw() != Object::transition_sentinel().raw()); | 1045 ASSERT(value.raw() != Object::transition_sentinel().raw()); |
| 1042 return value.raw() == Object::sentinel().raw(); | 1046 return value.raw() == Object::sentinel().raw(); |
| 1043 } | 1047 } |
| (...skipping 726 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1770 | 1774 |
| 1771 DEFINE_NATIVE_ENTRY(VariableMirror_type, 1) { | 1775 DEFINE_NATIVE_ENTRY(VariableMirror_type, 1) { |
| 1772 GET_NON_NULL_NATIVE_ARGUMENT(MirrorReference, ref, arguments->NativeArgAt(0)); | 1776 GET_NON_NULL_NATIVE_ARGUMENT(MirrorReference, ref, arguments->NativeArgAt(0)); |
| 1773 const Field& field = Field::Handle(ref.GetFieldReferent()); | 1777 const Field& field = Field::Handle(ref.GetFieldReferent()); |
| 1774 | 1778 |
| 1775 const AbstractType& type = AbstractType::Handle(field.type()); | 1779 const AbstractType& type = AbstractType::Handle(field.type()); |
| 1776 return CreateTypeMirror(type); | 1780 return CreateTypeMirror(type); |
| 1777 } | 1781 } |
| 1778 | 1782 |
| 1779 } // namespace dart | 1783 } // namespace dart |
| OLD | NEW |