Chromium Code Reviews| Index: runtime/lib/mirrors.cc |
| =================================================================== |
| --- runtime/lib/mirrors.cc (revision 25038) |
| +++ runtime/lib/mirrors.cc (working copy) |
| @@ -467,7 +467,6 @@ |
| static Dart_Handle CreateTypedefMirror(Dart_Handle cls, |
| Dart_Handle cls_name, |
| - Dart_Handle owner, |
| Dart_Handle owner_mirror) { |
| Dart_Handle mirror_cls_name = NewString("_LocalTypedefMirrorImpl"); |
| Dart_Handle mirror_type = Dart_GetType(MirrorLib(), mirror_cls_name, 0, NULL); |
| @@ -498,13 +497,12 @@ |
| static Dart_Handle CreateClassMirror(Dart_Handle intf, |
| Dart_Handle intf_name, |
| - Dart_Handle lib, |
| Dart_Handle lib_mirror) { |
| ASSERT(Dart_IsClass(intf)); |
| if (Dart_ClassIsTypedef(intf)) { |
| // This class is actually a typedef. Represent it specially in |
| // reflection. |
| - return CreateTypedefMirror(intf, intf_name, lib, lib_mirror); |
| + return CreateTypedefMirror(intf, intf_name, lib_mirror); |
| } |
| Dart_Handle cls_name = NewString("_LocalClassMirrorImpl"); |
| @@ -689,7 +687,7 @@ |
| return intf; |
| } |
| Dart_Handle intf_mirror = |
| - CreateClassMirror(intf, intf_name, owner, owner_mirror); |
| + CreateClassMirror(intf, intf_name, owner_mirror); |
| if (Dart_IsError(intf_mirror)) { |
| return intf_mirror; |
| } |
| @@ -1093,17 +1091,9 @@ |
| if (Dart_IsError(name_handle)) { |
| Dart_PropagateError(name_handle); |
| } |
| - Dart_Handle lib_handle = Api::NewHandle(isolate, cls.library()); |
| - if (Dart_IsError(lib_handle)) { |
| - Dart_PropagateError(lib_handle); |
| - } |
| - Dart_Handle lib_mirror = CreateLibraryMirror(lib_handle); |
| - if (Dart_IsError(lib_mirror)) { |
| - Dart_PropagateError(lib_mirror); |
| - } |
| + Dart_Handle lib_mirror = Dart_Null(); |
| Dart_Handle result = CreateClassMirror(cls_handle, |
| name_handle, |
| - lib_handle, |
| lib_mirror); |
| if (Dart_IsError(result)) { |
| Dart_PropagateError(result); |
| @@ -1267,6 +1257,20 @@ |
| } |
| +DEFINE_NATIVE_ENTRY(ClassMirror_library, 1) { |
| + const MirrorReference& klass_ref = |
|
siva
2013/07/16 21:06:46
why not call it klass_mirror instead of klass_ref
|
| + MirrorReference::CheckedHandle(arguments->NativeArgAt(0)); |
| + Class& klass = Class::Handle(); |
| + klass ^= klass_ref.referent(); |
| + |
| + DARTSCOPE(isolate); |
| + return Instance::RawCast( |
| + Api::UnwrapHandle( |
| + CreateLibraryMirror( |
| + Api::NewHandle(isolate, klass.library())))); |
|
siva
2013/07/16 21:06:46
Please add a TODO on top stating that this API cal
|
| +} |
| + |
| + |
| // Invoke the function, or noSuchMethod if it is null. Propagate any unhandled |
| // exceptions. Wrap and propagate any compilation errors. |
| static RawObject* ReflectivelyInvokeDynamicFunction(const Instance& receiver, |