Index: runtime/vm/object.cc |
=================================================================== |
--- runtime/vm/object.cc (revision 14985) |
+++ runtime/vm/object.cc (working copy) |
@@ -624,6 +624,13 @@ |
name = Symbols::ObjectArray(); |
RegisterPrivateClass(cls, name, core_lib); |
pending_classes.Add(cls, Heap::kOld); |
+ // We cannot use NewNonParameterizedType(cls), because Array is parameterized. |
+ type ^= Type::New(Object::Handle(cls.raw()), |
+ TypeArguments::Handle(), |
+ Scanner::kDummyTokenIndex); |
+ type.set_is_finalized_instantiated(); |
+ type ^= type.Canonicalize(); |
+ object_store->set_array_type(type); |
cls = object_store->growable_object_array_class(); // Was allocated above. |
name = Symbols::GrowableObjectArray(); |
@@ -881,8 +888,7 @@ |
cls = CreateAndRegisterInterface("List", script, core_lib); |
pending_classes.Add(cls, Heap::kOld); |
- type = Type::NewNonParameterizedType(cls); |
- object_store->set_list_interface(type); |
+ object_store->set_list_class(cls); |
cls = object_store->bool_class(); |
type = Type::NewNonParameterizedType(cls); |
@@ -8556,12 +8562,6 @@ |
} |
-bool AbstractType::IsListInterface() const { |
- return HasResolvedTypeClass() && |
- (type_class() == Type::Handle(Type::ListInterface()).type_class()); |
-} |
- |
- |
bool AbstractType::TypeTest(TypeTestKind test_kind, |
const AbstractType& other, |
Error* malformed_error) const { |
@@ -8688,13 +8688,13 @@ |
} |
-RawType* Type::Function() { |
- return Isolate::Current()->object_store()->function_type(); |
+RawType* Type::ArrayType() { |
+ return Isolate::Current()->object_store()->array_type(); |
} |
-RawType* Type::ListInterface() { |
- return Isolate::Current()->object_store()->list_interface(); |
+RawType* Type::Function() { |
+ return Isolate::Current()->object_store()->function_type(); |
} |
@@ -9136,11 +9136,14 @@ |
const char* TypeParameter::ToCString() const { |
- const char* format = "TypeParameter: name %s; index: %d"; |
+ const char* format = "TypeParameter: name %s; index: %d; class: %s"; |
const char* name_cstr = String::Handle(Name()).ToCString(); |
- intptr_t len = OS::SNPrint(NULL, 0, format, name_cstr, index()) + 1; |
+ const Class& cls = Class::Handle(parameterized_class()); |
+ const char* cls_cstr = |
+ cls.IsNull() ? " null" : String::Handle(cls.Name()).ToCString(); |
+ intptr_t len = OS::SNPrint(NULL, 0, format, name_cstr, index(), cls_cstr) + 1; |
char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); |
- OS::SNPrint(chars, len, format, name_cstr, index()); |
+ OS::SNPrint(chars, len, format, name_cstr, index(), cls_cstr); |
return chars; |
} |