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

Unified Diff: runtime/vm/object_test.cc

Issue 14820028: Delay Class parsing until the class is actually used. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 7 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 23087)
+++ runtime/vm/object_test.cc (working copy)
@@ -15,12 +15,20 @@
namespace dart {
+static RawClass* CreateDummyClass(const String& class_name,
+ const Script& script) {
+ const Class& cls = Class::Handle(
+ Class::New(class_name, script, Scanner::kDummyTokenIndex));
+ cls.set_is_synthesized_class(); // Dummy class for testing.
+ return cls.raw();
+}
+
+
TEST_CASE(Class) {
// Allocate the class first.
const String& class_name = String::Handle(Symbols::New("MyClass"));
const Script& script = Script::Handle();
- const Class& cls = Class::Handle(
- Class::New(class_name, script, Scanner::kDummyTokenIndex));
+ const Class& cls = Class::Handle(CreateDummyClass(class_name, script));
// Class has no fields.
cls.SetFields(Object::empty_array());
@@ -70,8 +78,20 @@
true, false, false, false, cls, 0);
functions.SetAt(5, function);
- // Setup the functions in the class.
+ // Setup the functions and interfaces 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);
+ cls.Finalize();
function_name = String::New("Foo");
function = cls.LookupDynamicFunction(function_name);
@@ -101,18 +121,6 @@
EXPECT(!function.IsNull());
EXPECT_EQ(kNumFixedParameters, function.num_fixed_parameters());
EXPECT_EQ(kNumOptionalParameters, function.NumOptionalParameters());
-
- const Array& interfaces = Array::Handle(Array::New(2));
- Class& interface = Class::Handle();
- String& interface_name = String::Handle();
- interface_name = Symbols::New("Harley");
- interface = Class::New(interface_name, script, Scanner::kDummyTokenIndex);
- interfaces.SetAt(0, Type::Handle(Type::NewNonParameterizedType(interface)));
- interface_name = Symbols::New("Norton");
- interface = Class::New(interface_name, script, Scanner::kDummyTokenIndex);
- interfaces.SetAt(1, Type::Handle(Type::NewNonParameterizedType(interface)));
- cls.set_interfaces(interfaces);
- cls.Finalize();
}
@@ -165,10 +173,11 @@
String& class_name = String::Handle(Symbols::New("EmptyClass"));
Script& script = Script::Handle();
const Class& empty_class =
- Class::Handle(Class::New(class_name, script, Scanner::kDummyTokenIndex));
+ Class::Handle(CreateDummyClass(class_name, script));
// No functions and no super class for the EmptyClass.
empty_class.SetFields(Object::empty_array());
+ ClassFinalizer::FinalizeTypesInClass(empty_class);
empty_class.Finalize();
EXPECT_EQ(kObjectAlignment, empty_class.instance_size());
Instance& instance = Instance::Handle(Instance::New(empty_class));
@@ -176,7 +185,7 @@
class_name = Symbols::New("OneFieldClass");
const Class& one_field_class =
- Class::Handle(Class::New(class_name, script, Scanner::kDummyTokenIndex));
+ Class::Handle(CreateDummyClass(class_name, script));
// No functions and no super class for the OneFieldClass.
const Array& one_fields = Array::Handle(Array::New(1));
@@ -185,6 +194,7 @@
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),
@@ -2173,8 +2183,7 @@
// Allocate the class first.
const String& class_name = String::Handle(Symbols::New("MyClass"));
const Script& script = Script::Handle();
- const Class& cls =
- Class::Handle(Class::New(class_name, script, Scanner::kDummyTokenIndex));
+ const Class& cls = Class::Handle(CreateDummyClass(class_name, script));
const Array& functions = Array::Handle(Array::New(1));
const Context& context = Context::Handle(Context::New(0));
@@ -2248,7 +2257,7 @@
const String& class_name = String::Handle(Symbols::New("ownerClass"));
const Script& script = Script::Handle();
const Class& owner_class =
- Class::Handle(Class::New(class_name, script, Scanner::kDummyTokenIndex));
+ Class::Handle(CreateDummyClass(class_name, script));
const String& function_name = String::ZoneHandle(Symbols::New(name));
Function& function = Function::ZoneHandle(
Function::New(function_name, RawFunction::kRegularFunction,
@@ -2420,7 +2429,7 @@
static RawClass* CreateTestClass(const char* name) {
const String& class_name = String::Handle(Symbols::New(name));
const Class& cls = Class::Handle(
- Class::New(class_name, Script::Handle(), Scanner::kDummyTokenIndex));
+ CreateDummyClass(class_name, Script::Handle()));
return cls.raw();
}
@@ -2460,7 +2469,7 @@
static RawFunction* GetDummyTarget(const char* name) {
const String& function_name = String::Handle(Symbols::New(name));
const Class& cls = Class::Handle(
- Class::New(function_name, Script::Handle(), Scanner::kDummyTokenIndex));
+ CreateDummyClass(function_name, Script::Handle()));
const bool is_static = false;
const bool is_const = false;
const bool is_abstract = false;
@@ -2533,7 +2542,7 @@
String& class_name = String::Handle(Symbols::New("EmptyClass"));
Script& script = Script::Handle();
const Class& empty_class =
- Class::Handle(Class::New(class_name, script, Scanner::kDummyTokenIndex));
+ Class::Handle(CreateDummyClass(class_name, script));
SubtypeTestCache& cache = SubtypeTestCache::Handle(SubtypeTestCache::New());
ASSERT(!cache.IsNull());
EXPECT_EQ(0, cache.NumberOfChecks());
« 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