Index: runtime/lib/mirrors.cc |
=================================================================== |
--- runtime/lib/mirrors.cc (revision 31085) |
+++ runtime/lib/mirrors.cc (working copy) |
@@ -336,6 +336,7 @@ |
ASSERT(!cls.IsDynamicClass() && !cls.IsVoidClass()); |
ASSERT(!type.IsNull()); |
ASSERT(type.IsFinalized()); |
+ ASSERT(!type.IsTypeRef()); |
if (cls.IsSignatureClass()) { |
if (cls.IsCanonicalSignatureClass()) { |
@@ -382,6 +383,7 @@ |
static RawInstance* CreateTypeMirror(const AbstractType& type) { |
ASSERT(type.IsFinalized()); |
ASSERT(!type.IsMalformed()); |
+ ASSERT(!type.IsTypeRef()); |
if (type.HasResolvedTypeClass()) { |
const Class& cls = Class::Handle(type.type_class()); |
// Handle void and dynamic types. |
@@ -1274,6 +1276,7 @@ |
const intptr_t num_inherited_args = args.Length() - num_params; |
for (intptr_t i = 0; i < num_params; i++) { |
arg_type ^= args.TypeAt(i + num_inherited_args); |
+ arg_type = arg_type.Canonicalize(); // Necessary for recursive types. |
type_mirror = CreateTypeMirror(arg_type); |
result.SetAt(i, type_mirror); |
} |