Version 1.4.0-dev.6.9
svn merge -c 36307 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 36339 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
git-svn-id: http://dart.googlecode.com/svn/trunk@36341 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index 3fd21df..76110c1 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -3269,12 +3269,19 @@
RETURN_TYPE_ERROR(isolate, type, Type);
}
const Class& cls = Class::Handle(isolate, type_obj.type_class());
+ const Error& error = Error::Handle(isolate, cls.EnsureIsFinalized(isolate));
+ if (!error.IsNull()) {
+ // An error occurred, return error object.
+ return Api::NewHandle(isolate, error.raw());
+ }
+
if (!cls.is_fields_marked_nullable()) {
// Mark all fields as nullable.
Class& iterate_cls = Class::Handle(isolate, cls.raw());
Field& field = Field::Handle(isolate);
Array& fields = Array::Handle(isolate);
while (!iterate_cls.IsNull()) {
+ ASSERT(iterate_cls.is_finalized());
iterate_cls.set_is_fields_marked_nullable();
fields = iterate_cls.fields();
iterate_cls = iterate_cls.SuperClass();
@@ -3288,11 +3295,6 @@
}
}
- const Error& error = Error::Handle(isolate, cls.EnsureIsFinalized(isolate));
- if (!error.IsNull()) {
- // An error occurred, return error object.
- return Api::NewHandle(isolate, error.raw());
- }
// Allocate an object for the given class.
return Api::NewHandle(isolate, Instance::New(cls));
}
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index eacee90..5c4b9e1 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -13893,11 +13893,11 @@
isolate, other_type.arguments());
if (type_args.IsNull()) {
// Ignore from_index.
- return other_type_args.IsRaw(0, num_type_params);
+ return other_type_args.IsRaw(0, num_type_args);
}
if (other_type_args.IsNull()) {
// Ignore from_index.
- return type_args.IsRaw(0, num_type_params);
+ return type_args.IsRaw(0, num_type_args);
}
if (!type_args.IsSubvectorEquivalent(other_type_args,
from_index,
diff --git a/tests/language/regress_18865_test.dart b/tests/language/regress_18865_test.dart
new file mode 100644
index 0000000..26ab350
--- /dev/null
+++ b/tests/language/regress_18865_test.dart
@@ -0,0 +1,15 @@
+// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Regression test for issue 18865.
+
+class B<T> { }
+
+class A<T> extends B {
+ static foo() => new A();
+}
+
+main () {
+ A.foo();
+}
diff --git a/tools/VERSION b/tools/VERSION
index 67d04a5..16152da 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -28,4 +28,4 @@
MINOR 4
PATCH 0
PRERELEASE 6
-PRERELEASE_PATCH 8
+PRERELEASE_PATCH 9