Version 1.10.1
svn merge -c 45598 https://dart.googlecode.com/svn/branches/bleeding_edge 1.10
svn merge -c 45617 https://dart.googlecode.com/svn/branches/bleeding_edge 1.10
svn merge -c 45620 https://dart.googlecode.com/svn/branches/bleeding_edge 1.10
svn merge -c 45626 https://dart.googlecode.com/svn/branches/bleeding_edge 1.10
git-svn-id: http://dart.googlecode.com/svn/branches/1.10@45692 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc
index 1ea33f3..906375a 100644
--- a/runtime/vm/class_finalizer.cc
+++ b/runtime/vm/class_finalizer.cc
@@ -1683,6 +1683,13 @@
param ^= mixin_type_args.TypeAt(i);
param_bound = param.bound();
if (!param_bound.IsInstantiated()) {
+ // Make sure the bound is finalized before instantiating it.
+ if (!param_bound.IsFinalized() &&
+ !param_bound.IsBeingFinalized()) {
+ param_bound =
+ FinalizeType(mixin_app_class, param_bound, kCanonicalize);
+ param.set_bound(param_bound); // In case part of recursive type.
+ }
param_bound = param_bound.InstantiateFrom(mixin_type_args,
&bound_error);
// The instantiator contains only TypeParameter objects and no
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index f80f10b..c8b4c55 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -15043,41 +15043,39 @@
const char* Type::ToCString() const {
- if (IsResolved()) {
- const TypeArguments& type_arguments = TypeArguments::Handle(arguments());
- const char* class_name;
- if (HasResolvedTypeClass()) {
- class_name = String::Handle(
- Class::Handle(type_class()).Name()).ToCString();
- } else {
- class_name = UnresolvedClass::Handle(unresolved_class()).ToCString();
- }
- if (type_arguments.IsNull()) {
- const char* format = "Type: class '%s'";
- const intptr_t len = OS::SNPrint(NULL, 0, format, class_name) + 1;
- char* chars = Isolate::Current()->current_zone()->Alloc<char>(len);
- OS::SNPrint(chars, len, format, class_name);
- return chars;
- } else if (IsFinalized() && IsRecursive()) {
- const char* format = "Type: (@%" Px " H%" Px ") class '%s', args:[%s]";
- const intptr_t hash = Hash();
- const char* args_cstr = TypeArguments::Handle(arguments()).ToCString();
- const intptr_t len =
- OS::SNPrint(NULL, 0, format, raw(), hash, class_name, args_cstr) + 1;
- char* chars = Isolate::Current()->current_zone()->Alloc<char>(len);
- OS::SNPrint(chars, len, format, raw(), hash, class_name, args_cstr);
- return chars;
- } else {
- const char* format = "Type: class '%s', args:[%s]";
- const char* args_cstr = TypeArguments::Handle(arguments()).ToCString();
- const intptr_t len =
- OS::SNPrint(NULL, 0, format, class_name, args_cstr) + 1;
- char* chars = Isolate::Current()->current_zone()->Alloc<char>(len);
- OS::SNPrint(chars, len, format, class_name, args_cstr);
- return chars;
- }
+ const char* unresolved = IsResolved() ? "" : "Unresolved ";
+ const TypeArguments& type_arguments = TypeArguments::Handle(arguments());
+ const char* class_name;
+ if (HasResolvedTypeClass()) {
+ class_name = String::Handle(
+ Class::Handle(type_class()).Name()).ToCString();
} else {
- return "Unresolved Type";
+ class_name = UnresolvedClass::Handle(unresolved_class()).ToCString();
+ }
+ if (type_arguments.IsNull()) {
+ const char* format = "%sType: class '%s'";
+ const intptr_t len =
+ OS::SNPrint(NULL, 0, format, unresolved, class_name) + 1;
+ char* chars = Isolate::Current()->current_zone()->Alloc<char>(len);
+ OS::SNPrint(chars, len, format, unresolved, class_name);
+ return chars;
+ } else if (IsResolved() && IsFinalized() && IsRecursive()) {
+ const char* format = "Type: (@%" Px " H%" Px ") class '%s', args:[%s]";
+ const intptr_t hash = Hash();
+ const char* args_cstr = TypeArguments::Handle(arguments()).ToCString();
+ const intptr_t len =
+ OS::SNPrint(NULL, 0, format, raw(), hash, class_name, args_cstr) + 1;
+ char* chars = Isolate::Current()->current_zone()->Alloc<char>(len);
+ OS::SNPrint(chars, len, format, raw(), hash, class_name, args_cstr);
+ return chars;
+ } else {
+ const char* format = "%sType: class '%s', args:[%s]";
+ const char* args_cstr = TypeArguments::Handle(arguments()).ToCString();
+ const intptr_t len =
+ OS::SNPrint(NULL, 0, format, unresolved, class_name, args_cstr) + 1;
+ char* chars = Isolate::Current()->current_zone()->Alloc<char>(len);
+ OS::SNPrint(chars, len, format, unresolved, class_name, args_cstr);
+ return chars;
}
}
diff --git a/tools/VERSION b/tools/VERSION
index 58e7d4f..846932b 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -26,6 +26,6 @@
CHANNEL stable
MAJOR 1
MINOR 10
-PATCH 0
+PATCH 1
PRERELEASE 0
PRERELEASE_PATCH 0