Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(701)

Unified Diff: runtime/lib/mirrors.cc

Issue 19299003: Moved some MethodMirror properties from embedded API to native calls. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | runtime/lib/mirrors_impl.dart » ('j') | tests/lib/mirrors/method_mirror_test.dart » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/lib/mirrors.cc
diff --git a/runtime/lib/mirrors.cc b/runtime/lib/mirrors.cc
index 89774e53c8961ac7be513c967907856c5ba3b48e..d06360c2c619b158e4192eb006d7219a82231340 100644
--- a/runtime/lib/mirrors.cc
+++ b/runtime/lib/mirrors.cc
@@ -566,62 +566,16 @@ static Dart_Handle CreateMethodMirror(Dart_Handle func,
return mirror_type;
}
- bool is_static = false;
- bool is_abstract = false;
- bool is_getter = false;
- bool is_setter = false;
- bool is_constructor = false;
-
- Dart_Handle result = Dart_FunctionIsStatic(func, &is_static);
- if (Dart_IsError(result)) {
- return result;
- }
- result = Dart_FunctionIsAbstract(func, &is_abstract);
- if (Dart_IsError(result)) {
- return result;
- }
- result = Dart_FunctionIsGetter(func, &is_getter);
- if (Dart_IsError(result)) {
- return result;
- }
- result = Dart_FunctionIsSetter(func, &is_setter);
- if (Dart_IsError(result)) {
- return result;
- }
- result = Dart_FunctionIsConstructor(func, &is_constructor);
- if (Dart_IsError(result)) {
- return result;
- }
-
Dart_Handle return_type = Dart_FunctionReturnType(func);
if (Dart_IsError(return_type)) {
return return_type;
}
- int64_t fixed_param_count;
- int64_t opt_param_count;
- result = Dart_FunctionParameterCounts(func,
- &fixed_param_count,
- &opt_param_count);
- if (Dart_IsError(result)) {
- return result;
- }
-
- // TODO(turnidge): Implement constructor kinds (arguments 7 - 10).
Dart_Handle args[] = {
CreateMirrorReference(func),
owner_mirror,
CreateParameterMirrorList(func),
CreateLazyMirror(return_type),
- Dart_NewBoolean(is_static),
- Dart_NewBoolean(is_abstract),
- Dart_NewBoolean(is_getter),
- Dart_NewBoolean(is_setter),
- Dart_NewBoolean(is_constructor),
- Dart_False(),
- Dart_False(),
- Dart_False(),
- Dart_False(),
};
Dart_Handle mirror =
Dart_New(mirror_type, Dart_Null(), ARRAY_SIZE(args), args);
@@ -1814,7 +1768,6 @@ DEFINE_NATIVE_ENTRY(LibraryMirror_invokeSetter, 4) {
return value.raw();
}
-
DEFINE_NATIVE_ENTRY(MethodMirror_name, 1) {
const MirrorReference& func_ref =
MirrorReference::CheckedHandle(arguments->NativeArgAt(0));
@@ -1823,4 +1776,38 @@ DEFINE_NATIVE_ENTRY(MethodMirror_name, 1) {
return func.UserVisibleName();
}
+// Keep in sync with _propertyIsXXX in mirrors_impl.dart.
+enum MethodMirrorProperty {
+ isStatic = 0,
rmacnak 2013/07/16 20:44:53 VM code tends to prefix constants like these with
Michael Lippautz (Google) 2013/07/16 21:14:00 Done.
+ isAbstract,
+ isGetter,
+ isSetter,
+ isConstructor,
+};
+
+DEFINE_NATIVE_ENTRY(MethodMirror_get_property, 2) {
+ const MirrorReference& func_ref =
+ MirrorReference::CheckedHandle(arguments->NativeArgAt(0));
+ const Smi& property =
+ Smi::CheckedHandle(arguments->NativeArgAt(1));
+ Function& func = Function::Handle();
+ func ^= func_ref.referent();
+ switch (property.Value()) {
+ case isStatic:
+ return Bool::Get(func.is_static());
+ case isAbstract:
+ return Bool::Get(func.is_abstract());
+ case isGetter:
+ return Bool::Get(func.IsGetterFunction());
+ case isSetter:
+ return Bool::Get(func.IsSetterFunction());
+ case isConstructor:
+ return Bool::Get(func.IsConstructor());
+ default:
+ UNREACHABLE();
+ }
+ UNREACHABLE();
+ return NULL;
rmacnak 2013/07/16 20:44:53 Instance::null()
Michael Lippautz (Google) 2013/07/16 21:14:00 Done.
+}
+
} // namespace dart
« no previous file with comments | « no previous file | runtime/lib/mirrors_impl.dart » ('j') | tests/lib/mirrors/method_mirror_test.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698