Chromium Code Reviews| Index: runtime/lib/mirrors.cc |
| diff --git a/runtime/lib/mirrors.cc b/runtime/lib/mirrors.cc |
| index d2427f9b4122ef421af9c4fe58f9f01cbbbe7ed1..3a3d4dce69ecb2390447e156e8e3f91119573867 100644 |
| --- a/runtime/lib/mirrors.cc |
| +++ b/runtime/lib/mirrors.cc |
| @@ -129,11 +129,19 @@ static RawInstance* CreateParameterMirrorList(const Function& func, |
| const Array& results = Array::Handle(Array::New(non_implicit_param_count)); |
| const Array& args = Array::Handle(Array::New(9)); |
| - // Return for synthetic functions and getters. |
| - if (func.IsGetterFunction() || |
| - func.IsImplicitConstructor() || |
| - func.IsImplicitGetterFunction() || |
| - func.IsImplicitSetterFunction()) { |
| + if (func.IsForwardingConstructor()) { |
|
hausner
2014/03/27 17:10:27
Curious: why don't you do this test at the beginni
|
| + // Forwarding constructors for mixin applications don't have any source to |
| + // parse, but they do have parameters. Use the names/types/metadata from |
| + // constructor that we are forwarding to. We will probably have to revisit |
| + // this when restrictions on constructors in mixins are relaxed. |
| + const Function& target = Function::Handle(func.ForwardingTarget()); |
| + ASSERT(!target.IsNull()); |
| + return CreateParameterMirrorList(target, owner_mirror); |
| + } |
| + |
| + if (func.IsGetterFunction() || func.IsImplicitConstructor()) { |
| + // These have no parameters. |
| + ASSERT(results.Length() == 0); |
| return results.raw(); |
| } |