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()) { |
+ // 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(); |
} |