Index: runtime/vm/dart_api_impl.cc |
=================================================================== |
--- runtime/vm/dart_api_impl.cc (revision 23883) |
+++ runtime/vm/dart_api_impl.cc (working copy) |
@@ -4348,6 +4348,28 @@ |
} |
+// --- Metadata ---- |
+ |
+DART_EXPORT Dart_Handle Dart_GetMetadata(Dart_Handle object) { |
+ Isolate* isolate = Isolate::Current(); |
+ CHECK_ISOLATE(isolate); |
+ DARTSCOPE(isolate); |
+ const Object& obj = Object::Handle(isolate, Api::UnwrapHandle(object)); |
+ Class& cls = Class::Handle(isolate); |
+ if (obj.IsClass()) { |
+ cls ^= obj.raw(); |
+ } else if (obj.IsFunction()) { |
+ cls = Function::Cast(obj).origin(); |
+ } else if (obj.IsField()) { |
+ cls = Field::Cast(obj).origin(); |
+ } else { |
+ return Api::NewHandle(isolate, Object::empty_array().raw()); |
+ } |
+ const Library& lib = Library::Handle(cls.library()); |
+ return Api::NewHandle(isolate, lib.GetMetadata(obj)); |
+} |
+ |
+ |
// --- Scripts and Libraries --- |