| 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 "lib/mirrors.h" | 5 #include "lib/mirrors.h" |
| 6 | 6 |
| 7 #include "lib/invocation_mirror.h" | 7 #include "lib/invocation_mirror.h" |
| 8 #include "vm/bootstrap_natives.h" | 8 #include "vm/bootstrap_natives.h" |
| 9 #include "vm/class_finalizer.h" | 9 #include "vm/class_finalizer.h" |
| 10 #include "vm/compiler.h" | 10 #include "vm/compiler.h" |
| (...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 233 static RawInstance* CreateFunctionTypeMirror(const Class& cls, | 233 static RawInstance* CreateFunctionTypeMirror(const Class& cls, |
| 234 const AbstractType& type) { | 234 const AbstractType& type) { |
| 235 const Array& args = Array::Handle(Array::New(2)); | 235 const Array& args = Array::Handle(Array::New(2)); |
| 236 args.SetAt(0, MirrorReference::Handle(MirrorReference::New(cls))); | 236 args.SetAt(0, MirrorReference::Handle(MirrorReference::New(cls))); |
| 237 args.SetAt(1, type); | 237 args.SetAt(1, type); |
| 238 return CreateMirror(Symbols::_LocalFunctionTypeMirror(), args); | 238 return CreateMirror(Symbols::_LocalFunctionTypeMirror(), args); |
| 239 } | 239 } |
| 240 | 240 |
| 241 | 241 |
| 242 static RawInstance* CreateMethodMirror(const Function& func, | 242 static RawInstance* CreateMethodMirror(const Function& func, |
| 243 const Instance& owner_mirror) { | 243 const Instance& owner_mirror, |
| 244 const Array& args = Array::Handle(Array::New(12)); | 244 const AbstractType& instantiator) { |
| 245 const Array& args = Array::Handle(Array::New(13)); |
| 245 args.SetAt(0, MirrorReference::Handle(MirrorReference::New(func))); | 246 args.SetAt(0, MirrorReference::Handle(MirrorReference::New(func))); |
| 246 | 247 |
| 247 String& name = String::Handle(func.name()); | 248 String& name = String::Handle(func.name()); |
| 248 name = String::IdentifierPrettyNameRetainPrivate(name); | 249 name = String::IdentifierPrettyNameRetainPrivate(name); |
| 249 args.SetAt(1, name); | 250 args.SetAt(1, name); |
| 250 | 251 |
| 251 args.SetAt(2, owner_mirror); | 252 args.SetAt(2, owner_mirror); |
| 252 args.SetAt(3, Bool::Get(func.is_static())); | 253 args.SetAt(3, instantiator); |
| 253 args.SetAt(4, Bool::Get(func.is_abstract())); | 254 args.SetAt(4, Bool::Get(func.is_static())); |
| 254 args.SetAt(5, Bool::Get(func.IsGetterFunction())); | 255 args.SetAt(5, Bool::Get(func.is_abstract())); |
| 255 args.SetAt(6, Bool::Get(func.IsSetterFunction())); | 256 args.SetAt(6, Bool::Get(func.IsGetterFunction())); |
| 257 args.SetAt(7, Bool::Get(func.IsSetterFunction())); |
| 256 | 258 |
| 257 bool isConstructor = (func.kind() == RawFunction::kConstructor); | 259 bool isConstructor = (func.kind() == RawFunction::kConstructor); |
| 258 args.SetAt(7, Bool::Get(isConstructor)); | 260 args.SetAt(8, Bool::Get(isConstructor)); |
| 259 args.SetAt(8, Bool::Get(isConstructor && func.is_const())); | 261 args.SetAt(9, Bool::Get(isConstructor && func.is_const())); |
| 260 args.SetAt(9, Bool::Get(isConstructor && func.IsGenerativeConstructor())); | 262 args.SetAt(10, Bool::Get(isConstructor && func.IsGenerativeConstructor())); |
| 261 args.SetAt(10, Bool::Get(isConstructor && func.is_redirecting())); | 263 args.SetAt(11, Bool::Get(isConstructor && func.is_redirecting())); |
| 262 args.SetAt(11, Bool::Get(isConstructor && func.IsFactory())); | 264 args.SetAt(12, Bool::Get(isConstructor && func.IsFactory())); |
| 263 | 265 |
| 264 return CreateMirror(Symbols::_LocalMethodMirror(), args); | 266 return CreateMirror(Symbols::_LocalMethodMirror(), args); |
| 265 } | 267 } |
| 266 | 268 |
| 267 | 269 |
| 268 static RawInstance* CreateVariableMirror(const Field& field, | 270 static RawInstance* CreateVariableMirror(const Field& field, |
| 269 const Instance& owner_mirror) { | 271 const Instance& owner_mirror) { |
| 270 const MirrorReference& field_ref = | 272 const MirrorReference& field_ref = |
| 271 MirrorReference::Handle(MirrorReference::New(field)); | 273 MirrorReference::Handle(MirrorReference::New(field)); |
| 272 | 274 |
| (...skipping 471 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 744 | 746 |
| 745 static RawAbstractType* InstantiateType(const AbstractType& type, | 747 static RawAbstractType* InstantiateType(const AbstractType& type, |
| 746 const AbstractType& instantiator) { | 748 const AbstractType& instantiator) { |
| 747 ASSERT(type.IsFinalized()); | 749 ASSERT(type.IsFinalized()); |
| 748 ASSERT(!type.IsMalformed()); | 750 ASSERT(!type.IsMalformed()); |
| 749 | 751 |
| 750 if (type.IsInstantiated()) { | 752 if (type.IsInstantiated()) { |
| 751 return type.Canonicalize(); | 753 return type.Canonicalize(); |
| 752 } | 754 } |
| 753 | 755 |
| 756 if (instantiator.IsNull()) { |
| 757 return type.Canonicalize(); |
| 758 } |
| 754 ASSERT(!instantiator.IsNull()); | 759 ASSERT(!instantiator.IsNull()); |
| 755 ASSERT(instantiator.IsFinalized()); | 760 ASSERT(instantiator.IsFinalized()); |
| 756 ASSERT(!instantiator.IsMalformed()); | 761 ASSERT(!instantiator.IsMalformed()); |
| 757 | 762 |
| 758 const TypeArguments& type_args = | 763 const TypeArguments& type_args = |
| 759 TypeArguments::Handle(instantiator.arguments()); | 764 TypeArguments::Handle(instantiator.arguments()); |
| 760 Error& bound_error = Error::Handle(); | 765 Error& bound_error = Error::Handle(); |
| 761 AbstractType& result = | 766 AbstractType& result = |
| 762 AbstractType::Handle(type.InstantiateFrom(type_args, &bound_error)); | 767 AbstractType::Handle(type.InstantiateFrom(type_args, &bound_error)); |
| 763 if (!bound_error.IsNull()) { | 768 if (!bound_error.IsNull()) { |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 857 | 862 |
| 858 | 863 |
| 859 DEFINE_NATIVE_ENTRY(FunctionTypeMirror_call_method, 2) { | 864 DEFINE_NATIVE_ENTRY(FunctionTypeMirror_call_method, 2) { |
| 860 GET_NON_NULL_NATIVE_ARGUMENT(Instance, | 865 GET_NON_NULL_NATIVE_ARGUMENT(Instance, |
| 861 owner_mirror, | 866 owner_mirror, |
| 862 arguments->NativeArgAt(0)); | 867 arguments->NativeArgAt(0)); |
| 863 GET_NON_NULL_NATIVE_ARGUMENT(MirrorReference, ref, arguments->NativeArgAt(1)); | 868 GET_NON_NULL_NATIVE_ARGUMENT(MirrorReference, ref, arguments->NativeArgAt(1)); |
| 864 const Class& cls = Class::Handle(ref.GetClassReferent()); | 869 const Class& cls = Class::Handle(ref.GetClassReferent()); |
| 865 const Function& func = Function::Handle(CallMethod(cls)); | 870 const Function& func = Function::Handle(CallMethod(cls)); |
| 866 ASSERT(!func.IsNull()); | 871 ASSERT(!func.IsNull()); |
| 867 return CreateMethodMirror(func, owner_mirror); | 872 return CreateMethodMirror(func, owner_mirror, AbstractType::Handle()); |
| 868 } | 873 } |
| 869 | 874 |
| 870 | 875 |
| 871 DEFINE_NATIVE_ENTRY(FunctionTypeMirror_parameters, 2) { | 876 DEFINE_NATIVE_ENTRY(FunctionTypeMirror_parameters, 2) { |
| 872 GET_NON_NULL_NATIVE_ARGUMENT(Instance, owner, arguments->NativeArgAt(0)); | 877 GET_NON_NULL_NATIVE_ARGUMENT(Instance, owner, arguments->NativeArgAt(0)); |
| 873 GET_NON_NULL_NATIVE_ARGUMENT(MirrorReference, ref, arguments->NativeArgAt(1)); | 878 GET_NON_NULL_NATIVE_ARGUMENT(MirrorReference, ref, arguments->NativeArgAt(1)); |
| 874 const Class& cls = Class::Handle(ref.GetClassReferent()); | 879 const Class& cls = Class::Handle(ref.GetClassReferent()); |
| 875 const Function& func = Function::Handle(cls.signature_function()); | 880 const Function& func = Function::Handle(cls.signature_function()); |
| 876 return CreateParameterMirrorList(func, owner); | 881 return CreateParameterMirrorList(func, owner); |
| 877 } | 882 } |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1002 const Class& cls = Class::Handle(type.type_class()); | 1007 const Class& cls = Class::Handle(type.type_class()); |
| 1003 const AbstractType& mixin_type = AbstractType::Handle(cls.mixin()); | 1008 const AbstractType& mixin_type = AbstractType::Handle(cls.mixin()); |
| 1004 if (mixin_type.IsNull()) { | 1009 if (mixin_type.IsNull()) { |
| 1005 return mixin_type.raw(); | 1010 return mixin_type.raw(); |
| 1006 } | 1011 } |
| 1007 | 1012 |
| 1008 return InstantiateType(mixin_type, instantiator); | 1013 return InstantiateType(mixin_type, instantiator); |
| 1009 } | 1014 } |
| 1010 | 1015 |
| 1011 | 1016 |
| 1012 DEFINE_NATIVE_ENTRY(ClassMirror_members, 2) { | 1017 DEFINE_NATIVE_ENTRY(ClassMirror_members, 3) { |
| 1013 GET_NON_NULL_NATIVE_ARGUMENT(Instance, | 1018 GET_NON_NULL_NATIVE_ARGUMENT(Instance, |
| 1014 owner_mirror, | 1019 owner_mirror, |
| 1015 arguments->NativeArgAt(0)); | 1020 arguments->NativeArgAt(0)); |
| 1016 GET_NON_NULL_NATIVE_ARGUMENT(MirrorReference, ref, arguments->NativeArgAt(1)); | 1021 GET_NATIVE_ARGUMENT(AbstractType, |
| 1022 owner_instantiator, |
| 1023 arguments->NativeArgAt(1)); |
| 1024 GET_NON_NULL_NATIVE_ARGUMENT(MirrorReference, ref, arguments->NativeArgAt(2)); |
| 1017 const Class& klass = Class::Handle(ref.GetClassReferent()); | 1025 const Class& klass = Class::Handle(ref.GetClassReferent()); |
| 1018 | 1026 |
| 1019 const Error& error = Error::Handle(klass.EnsureIsFinalized(isolate)); | 1027 const Error& error = Error::Handle(klass.EnsureIsFinalized(isolate)); |
| 1020 if (!error.IsNull()) { | 1028 if (!error.IsNull()) { |
| 1021 Exceptions::PropagateError(error); | 1029 Exceptions::PropagateError(error); |
| 1022 } | 1030 } |
| 1023 | 1031 |
| 1024 const Array& fields = Array::Handle(klass.fields()); | 1032 const Array& fields = Array::Handle(klass.fields()); |
| 1025 const intptr_t num_fields = fields.Length(); | 1033 const intptr_t num_fields = fields.Length(); |
| 1026 | 1034 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1040 } | 1048 } |
| 1041 } | 1049 } |
| 1042 | 1050 |
| 1043 Function& func = Function::Handle(); | 1051 Function& func = Function::Handle(); |
| 1044 for (intptr_t i = 0; i < num_functions; i++) { | 1052 for (intptr_t i = 0; i < num_functions; i++) { |
| 1045 func ^= functions.At(i); | 1053 func ^= functions.At(i); |
| 1046 if (func.is_reflectable() && | 1054 if (func.is_reflectable() && |
| 1047 (func.kind() == RawFunction::kRegularFunction || | 1055 (func.kind() == RawFunction::kRegularFunction || |
| 1048 func.kind() == RawFunction::kGetterFunction || | 1056 func.kind() == RawFunction::kGetterFunction || |
| 1049 func.kind() == RawFunction::kSetterFunction)) { | 1057 func.kind() == RawFunction::kSetterFunction)) { |
| 1050 member_mirror = CreateMethodMirror(func, owner_mirror); | 1058 member_mirror = CreateMethodMirror(func, owner_mirror, |
| 1059 owner_instantiator); |
| 1051 member_mirrors.Add(member_mirror); | 1060 member_mirrors.Add(member_mirror); |
| 1052 } | 1061 } |
| 1053 } | 1062 } |
| 1054 | 1063 |
| 1055 return member_mirrors.raw(); | 1064 return member_mirrors.raw(); |
| 1056 } | 1065 } |
| 1057 | 1066 |
| 1058 | 1067 |
| 1059 DEFINE_NATIVE_ENTRY(ClassMirror_constructors, 2) { | 1068 DEFINE_NATIVE_ENTRY(ClassMirror_constructors, 3) { |
| 1060 GET_NON_NULL_NATIVE_ARGUMENT(Instance, | 1069 GET_NON_NULL_NATIVE_ARGUMENT(Instance, |
| 1061 owner_mirror, | 1070 owner_mirror, |
| 1062 arguments->NativeArgAt(0)); | 1071 arguments->NativeArgAt(0)); |
| 1063 GET_NON_NULL_NATIVE_ARGUMENT(MirrorReference, ref, arguments->NativeArgAt(1)); | 1072 GET_NATIVE_ARGUMENT(AbstractType, |
| 1073 owner_instantiator, |
| 1074 arguments->NativeArgAt(1)); |
| 1075 GET_NON_NULL_NATIVE_ARGUMENT(MirrorReference, ref, arguments->NativeArgAt(2)); |
| 1064 const Class& klass = Class::Handle(ref.GetClassReferent()); | 1076 const Class& klass = Class::Handle(ref.GetClassReferent()); |
| 1065 | 1077 |
| 1066 const Error& error = Error::Handle(klass.EnsureIsFinalized(isolate)); | 1078 const Error& error = Error::Handle(klass.EnsureIsFinalized(isolate)); |
| 1067 if (!error.IsNull()) { | 1079 if (!error.IsNull()) { |
| 1068 Exceptions::PropagateError(error); | 1080 Exceptions::PropagateError(error); |
| 1069 } | 1081 } |
| 1070 | 1082 |
| 1071 const Array& functions = Array::Handle(klass.functions()); | 1083 const Array& functions = Array::Handle(klass.functions()); |
| 1072 const intptr_t num_functions = functions.Length(); | 1084 const intptr_t num_functions = functions.Length(); |
| 1073 | 1085 |
| 1074 Instance& constructor_mirror = Instance::Handle(); | 1086 Instance& constructor_mirror = Instance::Handle(); |
| 1075 const GrowableObjectArray& constructor_mirrors = GrowableObjectArray::Handle( | 1087 const GrowableObjectArray& constructor_mirrors = GrowableObjectArray::Handle( |
| 1076 GrowableObjectArray::New(num_functions)); | 1088 GrowableObjectArray::New(num_functions)); |
| 1077 | 1089 |
| 1078 Function& func = Function::Handle(); | 1090 Function& func = Function::Handle(); |
| 1079 for (intptr_t i = 0; i < num_functions; i++) { | 1091 for (intptr_t i = 0; i < num_functions; i++) { |
| 1080 func ^= functions.At(i); | 1092 func ^= functions.At(i); |
| 1081 if (func.is_reflectable() && func.kind() == RawFunction::kConstructor) { | 1093 if (func.is_reflectable() && func.kind() == RawFunction::kConstructor) { |
| 1082 constructor_mirror = CreateMethodMirror(func, owner_mirror); | 1094 constructor_mirror = CreateMethodMirror(func, owner_mirror, |
| 1095 owner_instantiator); |
| 1083 constructor_mirrors.Add(constructor_mirror); | 1096 constructor_mirrors.Add(constructor_mirror); |
| 1084 } | 1097 } |
| 1085 } | 1098 } |
| 1086 | 1099 |
| 1087 return constructor_mirrors.raw(); | 1100 return constructor_mirrors.raw(); |
| 1088 } | 1101 } |
| 1089 | 1102 |
| 1090 | 1103 |
| 1091 DEFINE_NATIVE_ENTRY(LibraryMirror_members, 2) { | 1104 DEFINE_NATIVE_ENTRY(LibraryMirror_members, 2) { |
| 1092 GET_NON_NULL_NATIVE_ARGUMENT(Instance, | 1105 GET_NON_NULL_NATIVE_ARGUMENT(Instance, |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1127 if (!field.is_synthetic()) { | 1140 if (!field.is_synthetic()) { |
| 1128 member_mirror = CreateVariableMirror(field, owner_mirror); | 1141 member_mirror = CreateVariableMirror(field, owner_mirror); |
| 1129 member_mirrors.Add(member_mirror); | 1142 member_mirrors.Add(member_mirror); |
| 1130 } | 1143 } |
| 1131 } else if (entry.IsFunction()) { | 1144 } else if (entry.IsFunction()) { |
| 1132 const Function& func = Function::Cast(entry); | 1145 const Function& func = Function::Cast(entry); |
| 1133 if (func.is_reflectable() && | 1146 if (func.is_reflectable() && |
| 1134 (func.kind() == RawFunction::kRegularFunction || | 1147 (func.kind() == RawFunction::kRegularFunction || |
| 1135 func.kind() == RawFunction::kGetterFunction || | 1148 func.kind() == RawFunction::kGetterFunction || |
| 1136 func.kind() == RawFunction::kSetterFunction)) { | 1149 func.kind() == RawFunction::kSetterFunction)) { |
| 1137 member_mirror = CreateMethodMirror(func, owner_mirror); | 1150 member_mirror = CreateMethodMirror(func, owner_mirror, |
| 1151 AbstractType::Handle()); |
| 1138 member_mirrors.Add(member_mirror); | 1152 member_mirrors.Add(member_mirror); |
| 1139 } | 1153 } |
| 1140 } | 1154 } |
| 1141 } | 1155 } |
| 1142 | 1156 |
| 1143 return member_mirrors.raw(); | 1157 return member_mirrors.raw(); |
| 1144 } | 1158 } |
| 1145 | 1159 |
| 1146 | 1160 |
| 1147 DEFINE_NATIVE_ENTRY(ClassMirror_type_variables, 1) { | 1161 DEFINE_NATIVE_ENTRY(ClassMirror_type_variables, 1) { |
| (...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1377 Function& function = Function::Handle(); | 1391 Function& function = Function::Handle(); |
| 1378 bool callable = closure.IsCallable(&function); | 1392 bool callable = closure.IsCallable(&function); |
| 1379 if (callable) { | 1393 if (callable) { |
| 1380 if (function.IsImplicitClosureFunction()) { | 1394 if (function.IsImplicitClosureFunction()) { |
| 1381 // The VM uses separate Functions for tear-offs, but the mirrors consider | 1395 // The VM uses separate Functions for tear-offs, but the mirrors consider |
| 1382 // the tear-offs to be the same as the torn-off methods. Avoid handing out | 1396 // the tear-offs to be the same as the torn-off methods. Avoid handing out |
| 1383 // a reference to the tear-off here to avoid a special case in the | 1397 // a reference to the tear-off here to avoid a special case in the |
| 1384 // the equality test. | 1398 // the equality test. |
| 1385 function = function.parent_function(); | 1399 function = function.parent_function(); |
| 1386 } | 1400 } |
| 1387 return CreateMethodMirror(function, Instance::null_instance()); | 1401 |
| 1402 Type& instantiator = Type::Handle(); |
| 1403 if (closure.IsClosure()) { |
| 1404 const TypeArguments& arguments = |
| 1405 TypeArguments::Handle(Closure::GetTypeArguments(closure)); |
| 1406 const Class& cls = |
| 1407 Class::Handle(Isolate::Current()->object_store()->object_class()); |
| 1408 instantiator = Type::New(cls, arguments, Scanner::kNoSourcePos); |
| 1409 instantiator.SetIsFinalized(); |
| 1410 } |
| 1411 return CreateMethodMirror(function, |
| 1412 Instance::null_instance(), |
| 1413 instantiator); |
| 1388 } | 1414 } |
| 1389 return Instance::null(); | 1415 return Instance::null(); |
| 1390 } | 1416 } |
| 1391 | 1417 |
| 1392 | 1418 |
| 1393 DEFINE_NATIVE_ENTRY(ClassMirror_invoke, 5) { | 1419 DEFINE_NATIVE_ENTRY(ClassMirror_invoke, 5) { |
| 1394 // Argument 0 is the mirror, which is unused by the native. It exists | 1420 // Argument 0 is the mirror, which is unused by the native. It exists |
| 1395 // because this native is an instance method in order to be polymorphic | 1421 // because this native is an instance method in order to be polymorphic |
| 1396 // with its cousins. | 1422 // with its cousins. |
| 1397 GET_NON_NULL_NATIVE_ARGUMENT(MirrorReference, ref, arguments->NativeArgAt(1)); | 1423 GET_NON_NULL_NATIVE_ARGUMENT(MirrorReference, ref, arguments->NativeArgAt(1)); |
| (...skipping 424 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1822 InvocationMirror::kTopLevel, | 1848 InvocationMirror::kTopLevel, |
| 1823 InvocationMirror::kSetter); | 1849 InvocationMirror::kSetter); |
| 1824 UNREACHABLE(); | 1850 UNREACHABLE(); |
| 1825 } | 1851 } |
| 1826 | 1852 |
| 1827 field.set_value(value); | 1853 field.set_value(value); |
| 1828 return value.raw(); | 1854 return value.raw(); |
| 1829 } | 1855 } |
| 1830 | 1856 |
| 1831 | 1857 |
| 1832 DEFINE_NATIVE_ENTRY(MethodMirror_owner, 1) { | 1858 DEFINE_NATIVE_ENTRY(MethodMirror_owner, 2) { |
| 1833 GET_NON_NULL_NATIVE_ARGUMENT(MirrorReference, ref, arguments->NativeArgAt(0)); | 1859 GET_NON_NULL_NATIVE_ARGUMENT(MirrorReference, ref, arguments->NativeArgAt(0)); |
| 1860 GET_NATIVE_ARGUMENT(AbstractType, instantiator, arguments->NativeArgAt(1)); |
| 1834 const Function& func = Function::Handle(ref.GetFunctionReferent()); | 1861 const Function& func = Function::Handle(ref.GetFunctionReferent()); |
| 1835 if (func.IsNonImplicitClosureFunction()) { | 1862 if (func.IsNonImplicitClosureFunction()) { |
| 1836 return CreateMethodMirror(Function::Handle( | 1863 return CreateMethodMirror(Function::Handle( |
| 1837 func.parent_function()), Object::null_instance()); | 1864 func.parent_function()), Object::null_instance(), instantiator); |
| 1838 } | 1865 } |
| 1839 const Class& owner = Class::Handle(func.Owner()); | 1866 const Class& owner = Class::Handle(func.Owner()); |
| 1840 if (owner.IsTopLevel()) { | 1867 if (owner.IsTopLevel()) { |
| 1841 return CreateLibraryMirror(Library::Handle(owner.library())); | 1868 return CreateLibraryMirror(Library::Handle(owner.library())); |
| 1842 } | 1869 } |
| 1843 | 1870 |
| 1844 AbstractType& type = AbstractType::Handle(owner.DeclarationType()); | 1871 AbstractType& type = AbstractType::Handle(owner.DeclarationType()); |
| 1845 return CreateClassMirror(owner, type, Bool::True(), Object::null_instance()); | 1872 return CreateClassMirror(owner, type, Bool::True(), Object::null_instance()); |
| 1846 } | 1873 } |
| 1847 | 1874 |
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2047 } | 2074 } |
| 2048 | 2075 |
| 2049 DEFINE_NATIVE_ENTRY(TypeMirror_moreSpecificTest, 2) { | 2076 DEFINE_NATIVE_ENTRY(TypeMirror_moreSpecificTest, 2) { |
| 2050 GET_NON_NULL_NATIVE_ARGUMENT(AbstractType, a, arguments->NativeArgAt(0)); | 2077 GET_NON_NULL_NATIVE_ARGUMENT(AbstractType, a, arguments->NativeArgAt(0)); |
| 2051 GET_NON_NULL_NATIVE_ARGUMENT(AbstractType, b, arguments->NativeArgAt(1)); | 2078 GET_NON_NULL_NATIVE_ARGUMENT(AbstractType, b, arguments->NativeArgAt(1)); |
| 2052 return Bool::Get(a.IsMoreSpecificThan(b, NULL)).raw(); | 2079 return Bool::Get(a.IsMoreSpecificThan(b, NULL)).raw(); |
| 2053 } | 2080 } |
| 2054 | 2081 |
| 2055 | 2082 |
| 2056 } // namespace dart | 2083 } // namespace dart |
| OLD | NEW |