Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(171)

Unified Diff: runtime/vm/object_test.cc

Issue 22685007: Implement updated method overriding rules in the vm. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/object.cc ('k') | runtime/vm/parser.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/object_test.cc
===================================================================
--- runtime/vm/object_test.cc (revision 26025)
+++ runtime/vm/object_test.cc (working copy)
@@ -31,9 +31,26 @@
const Script& script = Script::Handle();
const Class& cls = Class::Handle(CreateDummyClass(class_name, script));
- // Class has no fields.
- cls.SetFields(Object::empty_array());
+ // Class has no fields and no functions yet.
+ EXPECT_EQ(Array::Handle(cls.fields()).Length(), 0);
+ EXPECT_EQ(Array::Handle(cls.functions()).Length(), 0);
+ // Setup the interfaces in the class.
+ const Array& interfaces = Array::Handle(Array::New(2));
+ Class& interface = Class::Handle();
+ String& interface_name = String::Handle();
+ interface_name = Symbols::New("Harley");
+ interface = CreateDummyClass(interface_name, script);
+ interfaces.SetAt(0, Type::Handle(Type::NewNonParameterizedType(interface)));
+ interface_name = Symbols::New("Norton");
+ interface = CreateDummyClass(interface_name, script);
+ interfaces.SetAt(1, Type::Handle(Type::NewNonParameterizedType(interface)));
+ cls.set_interfaces(interfaces);
+
+ // Finalization of types happens before the fields and functions have been
+ // parsed.
+ ClassFinalizer::FinalizeTypesInClass(cls);
+
// Create and populate the function arrays.
const Array& functions = Array::Handle(Array::New(6));
Function& function = Function::Handle();
@@ -79,19 +96,10 @@
true, false, false, false, cls, 0);
functions.SetAt(5, function);
- // Setup the functions and interfaces in the class.
+ // Setup the functions in the class.
cls.SetFunctions(functions);
- const Array& interfaces = Array::Handle(Array::New(2));
- Class& interface = Class::Handle();
- String& interface_name = String::Handle();
- interface_name = Symbols::New("Harley");
- interface = CreateDummyClass(interface_name, script);
- interfaces.SetAt(0, Type::Handle(Type::NewNonParameterizedType(interface)));
- interface_name = Symbols::New("Norton");
- interface = CreateDummyClass(interface_name, script);
- interfaces.SetAt(1, Type::Handle(Type::NewNonParameterizedType(interface)));
- cls.set_interfaces(interfaces);
- ClassFinalizer::FinalizeTypesInClass(cls);
+
+ // The class can now be finalized.
cls.Finalize();
function_name = String::New("Foo");
@@ -176,10 +184,13 @@
const Class& empty_class =
Class::Handle(CreateDummyClass(class_name, script));
- // No functions and no super class for the EmptyClass.
- empty_class.SetFields(Object::empty_array());
+ // EmptyClass has no fields and no functions.
+ EXPECT_EQ(Array::Handle(empty_class.fields()).Length(), 0);
+ EXPECT_EQ(Array::Handle(empty_class.functions()).Length(), 0);
+
ClassFinalizer::FinalizeTypesInClass(empty_class);
empty_class.Finalize();
+
EXPECT_EQ(kObjectAlignment, empty_class.instance_size());
Instance& instance = Instance::Handle(Instance::New(empty_class));
EXPECT_EQ(empty_class.raw(), instance.clazz());
@@ -188,14 +199,18 @@
const Class& one_field_class =
Class::Handle(CreateDummyClass(class_name, script));
- // No functions and no super class for the OneFieldClass.
+ // No fields, functions, or super type for the OneFieldClass.
+ EXPECT_EQ(Array::Handle(empty_class.fields()).Length(), 0);
+ EXPECT_EQ(Array::Handle(empty_class.functions()).Length(), 0);
+ EXPECT_EQ(empty_class.super_type(), AbstractType::null());
+ ClassFinalizer::FinalizeTypesInClass(one_field_class);
+
const Array& one_fields = Array::Handle(Array::New(1));
const String& field_name = String::Handle(Symbols::New("the_field"));
const Field& field = Field::Handle(
Field::New(field_name, false, false, false, one_field_class, 0));
one_fields.SetAt(0, field);
one_field_class.SetFields(one_fields);
- ClassFinalizer::FinalizeTypesInClass(one_field_class);
one_field_class.Finalize();
intptr_t header_size = sizeof(RawObject);
EXPECT_EQ(Utils::RoundUp((header_size + (1 * kWordSize)), kObjectAlignment),
« no previous file with comments | « runtime/vm/object.cc ('k') | runtime/vm/parser.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698