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

Unified Diff: runtime/lib/mirrors.cc

Issue 21624006: ParameterMirror: Implement some missing getters. (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') | no next file with comments »
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 98806b148e17e52bd2eee8d646bfa96554b4dd5e..0fa041412ca5cb80768fcdeb3901d7164efb2520 100644
--- a/runtime/lib/mirrors.cc
+++ b/runtime/lib/mirrors.cc
@@ -44,21 +44,29 @@ DEFINE_NATIVE_ENTRY(Mirrors_isLocalPort, 1) {
}
-static RawInstance* CreateParameterMirrorList(const Function& func) {
+static RawInstance* CreateParameterMirrorList(const Function& func,
+ const Instance& owner_mirror) {
HANDLESCOPE(Isolate::Current());
- const intptr_t param_cnt = func.num_fixed_parameters() -
- func.NumImplicitParameters() +
- func.NumOptionalParameters();
+ const intptr_t param_cnt = func.NumParameters() -
+ func.NumImplicitParameters();
+ const intptr_t implicit_cnt = func.NumImplicitParameters();
+ const intptr_t first_optional = func.num_fixed_parameters() -
+ func.NumImplicitParameters();
+ const intptr_t first_named = func.NumParameters() -
+ func.NumImplicitParameters() -
+ func.NumOptionalNamedParameters();
const Array& results = Array::Handle(Array::New(param_cnt));
- const Array& args = Array::Handle(Array::New(3));
+ const Array& args = Array::Handle(Array::New(6));
args.SetAt(0, MirrorReference::Handle(MirrorReference::New(func)));
+ args.SetAt(2, owner_mirror);
Smi& pos = Smi::Handle();
Instance& param = Instance::Handle();
for (intptr_t i = 0; i < param_cnt; i++) {
pos ^= Smi::New(i);
- args.SetAt(1, pos);
- args.SetAt(2, (i >= func.num_fixed_parameters()) ?
- Bool::True() : Bool::False());
+ args.SetAt(1, String::Handle(func.ParameterNameAt(implicit_cnt + i)));
+ args.SetAt(3, pos);
+ args.SetAt(4, (i >= first_optional) ? Bool::True() : Bool::False());
+ args.SetAt(5, (i >= first_named) ? Bool::True() : Bool::False());
param ^= CreateMirror(Symbols::_LocalParameterMirrorImpl(), args);
results.SetAt(i, param);
}
@@ -319,9 +327,10 @@ DEFINE_NATIVE_ENTRY(DeclarationMirror_metadata, 1) {
DEFINE_NATIVE_ENTRY(FunctionTypeMirror_parameters, 1) {
GET_NON_NULL_NATIVE_ARGUMENT(MirrorReference, ref, arguments->NativeArgAt(0));
+ GET_NON_NULL_NATIVE_ARGUMENT(Instance, owner, arguments->NativeArgAt(1));
rmacnak 2013/08/02 00:50:19 Flip the order of the arguments and make this an i
Michael Lippautz (Google) 2013/08/02 17:05:44 Done.
const Class& cls = Class::Handle(ref.GetClassReferent());
const Function& func = Function::Handle(cls.signature_function());
- return CreateParameterMirrorList(func);
+ return CreateParameterMirrorList(func, owner);
}
@@ -1145,8 +1154,9 @@ DEFINE_NATIVE_ENTRY(MethodMirror_owner, 1) {
DEFINE_NATIVE_ENTRY(MethodMirror_parameters, 1) {
GET_NON_NULL_NATIVE_ARGUMENT(MirrorReference, ref, arguments->NativeArgAt(0));
+ GET_NON_NULL_NATIVE_ARGUMENT(Instance, owner, arguments->NativeArgAt(1));
rmacnak 2013/08/02 00:50:19 As above.
Michael Lippautz (Google) 2013/08/02 17:05:44 Done.
const Function& func = Function::Handle(ref.GetFunctionReferent());
- return CreateParameterMirrorList(func);
+ return CreateParameterMirrorList(func, owner);
}
« no previous file with comments | « no previous file | runtime/lib/mirrors_impl.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698