Chromium Code Reviews| Index: runtime/vm/object.cc |
| =================================================================== |
| --- runtime/vm/object.cc (revision 22145) |
| +++ runtime/vm/object.cc (working copy) |
| @@ -677,31 +677,6 @@ |
| } |
| -#define LOAD_LIBRARY(name, raw_name) \ |
| - url = Symbols::Dart##name().raw(); \ |
| - lib = Library::LookupLibrary(url); \ |
| - if (lib.IsNull()) { \ |
| - lib = Library::NewLibraryHelper(url, true); \ |
| - lib.Register(); \ |
| - } \ |
| - isolate->object_store()->set_##raw_name##_library(lib); \ |
| - |
| -#define INIT_LIBRARY(name, raw_name, has_patch) \ |
| - LOAD_LIBRARY(name, raw_name) \ |
| - script = Bootstrap::Load##name##Script(false); \ |
| - error = Bootstrap::Compile(lib, script); \ |
| - if (!error.IsNull()) { \ |
| - return error.raw(); \ |
| - } \ |
| - if (has_patch) { \ |
| - script = Bootstrap::Load##name##Script(true); \ |
| - error = lib.Patch(script); \ |
| - if (!error.IsNull()) { \ |
| - return error.raw(); \ |
| - } \ |
| - } \ |
| - |
| - |
| RawError* Object::Init(Isolate* isolate) { |
| TIMERSCOPE(time_bootstrap); |
| ObjectStore* object_store = isolate->object_store(); |
| @@ -709,10 +684,7 @@ |
| Class& cls = Class::Handle(); |
| Type& type = Type::Handle(); |
| Array& array = Array::Handle(); |
| - String& url = String::Handle(); |
| Library& lib = Library::Handle(); |
| - Script& script = Script::Handle(); |
| - Error& error = Error::Handle(); |
| // All RawArray fields will be initialized to an empty array, therefore |
| // initialize array class first. |
| @@ -843,13 +815,13 @@ |
| pending_classes.Add(cls, Heap::kOld); |
| // Initialize the base interfaces used by the core VM classes. |
| - script = Bootstrap::LoadCoreScript(false); |
| // Allocate and initialize the pre-allocated classes in the core library. |
| cls = Class::New<Instance>(kInstanceCid); |
| object_store->set_object_class(cls); |
| cls.set_name(Symbols::Object()); |
| - cls.set_script(script); |
| + // This class has no script object associated with it, it is an internal VM |
| + // class with no associated source code. |
|
Ivan Posva
2013/04/29 21:13:47
Although the methods associated with this class wi
siva
2013/04/29 21:47:38
True.
I changed the commend to reflect that.
On
|
| cls.set_is_prefinalized(); |
| core_lib.AddClass(cls); |
| pending_classes.Add(cls, Heap::kOld); |
| @@ -900,7 +872,13 @@ |
| // Pre-register the typed_data library so the native class implementations |
| // can be hooked up before compiling it. |
| - LOAD_LIBRARY(TypedData, typed_data); |
| + lib = Library::LookupLibrary(Symbols::DartTypedData()); |
| + if (lib.IsNull()) { |
| + lib = Library::NewLibraryHelper(Symbols::DartTypedData(), true); |
| + lib.Register(); |
| + isolate->object_store()->set_bootstrap_library(ObjectStore::kTypedData, |
| + lib); |
| + } |
| ASSERT(!lib.IsNull()); |
| ASSERT(lib.raw() == Library::TypedDataLibrary()); |
| const intptr_t typed_data_class_array_length = |
| @@ -979,30 +957,26 @@ |
| type = Type::NewNonParameterizedType(cls); |
| object_store->set_number_type(type); |
| - cls = Class::New<Instance>(Symbols::Int(), script, Scanner::kDummyTokenIndex); |
| + cls = Class::New<Instance>(kIllegalCid); |
| RegisterClass(cls, Symbols::Int(), core_lib); |
| pending_classes.Add(cls, Heap::kOld); |
| type = Type::NewNonParameterizedType(cls); |
| object_store->set_int_type(type); |
| - cls = Class::New<Instance>(Symbols::Double(), |
| - script, |
| - Scanner::kDummyTokenIndex); |
| + cls = Class::New<Instance>(kIllegalCid); |
| RegisterClass(cls, Symbols::Double(), core_lib); |
| pending_classes.Add(cls, Heap::kOld); |
| type = Type::NewNonParameterizedType(cls); |
| object_store->set_double_type(type); |
| name = Symbols::New("String"); |
| - cls = Class::New<Instance>(name, script, Scanner::kDummyTokenIndex); |
| + cls = Class::New<Instance>(kIllegalCid); |
| RegisterClass(cls, name, core_lib); |
| pending_classes.Add(cls, Heap::kOld); |
| type = Type::NewNonParameterizedType(cls); |
| object_store->set_string_type(type); |
| - cls = Class::New<Instance>(Symbols::List(), |
| - script, |
| - Scanner::kDummyTokenIndex); |
| + cls = Class::New<Instance>(kIllegalCid); |
| RegisterClass(cls, Symbols::List(), core_lib); |
| pending_classes.Add(cls, Heap::kOld); |
| object_store->set_list_class(cls); |
| @@ -1041,22 +1015,11 @@ |
| // Finish the initialization by compiling the bootstrap scripts containing the |
| // base interfaces and the implementation of the internal classes. |
| - INIT_LIBRARY(Core, core, true); |
| + const Error& error = Error::Handle(Bootstrap::LoadandCompileScripts()); |
| + if (!error.IsNull()) { |
| + return error.raw(); |
| + } |
| - INIT_LIBRARY(Async, async, true); |
| - INIT_LIBRARY(Collection, collection, true); |
| - INIT_LIBRARY(CollectionDev, collection_dev, true); |
| - INIT_LIBRARY(Crypto, crypto, false); |
| - INIT_LIBRARY(Isolate, isolate, true); |
| - INIT_LIBRARY(Json, json, true); |
| - INIT_LIBRARY(Math, math, true); |
| - INIT_LIBRARY(Mirrors, mirrors, true); |
| - INIT_LIBRARY(TypedData, typed_data, true); |
| - INIT_LIBRARY(Utf, utf, false); |
| - INIT_LIBRARY(Uri, uri, false); |
| - |
| - Bootstrap::SetupNativeResolver(); |
| - |
| // Remove the Object superclass cycle by setting the super type to null (not |
| // to the type of null). |
| cls = object_store->object_class(); |
| @@ -1840,11 +1803,10 @@ |
| } |
| -template <class FakeInstance> |
| RawClass* Class::New(const String& name, |
| const Script& script, |
| intptr_t token_pos) { |
| - Class& result = Class::Handle(New<FakeInstance>(kIllegalCid)); |
| + Class& result = Class::Handle(New<Instance>(kIllegalCid)); |
| result.set_name(name); |
| result.set_script(script); |
| result.set_token_pos(token_pos); |
| @@ -1852,19 +1814,11 @@ |
| } |
| -RawClass* Class::New(const String& name, |
| - const Script& script, |
| - intptr_t token_pos) { |
| - Class& result = Class::Handle(New<Instance>(name, script, token_pos)); |
| - return result.raw(); |
| -} |
| - |
| - |
| RawClass* Class::NewSignatureClass(const String& name, |
| const Function& signature_function, |
| const Script& script, |
| intptr_t token_pos) { |
| - const Class& result = Class::Handle(New<Instance>(name, script, token_pos)); |
| + const Class& result = Class::Handle(New(name, script, token_pos)); |
| const Type& super_type = Type::Handle(Type::ObjectType()); |
| ASSERT(!super_type.IsNull()); |
| // Instances of a signature class can only be closures. |
| @@ -1919,7 +1873,7 @@ |
| int field_count) { |
| Class& cls = Class::Handle(library.LookupClass(name)); |
| if (cls.IsNull()) { |
| - cls = New<Instance>(name, Script::Handle(), Scanner::kDummyTokenIndex); |
| + cls = New(name, Script::Handle(), Scanner::kDummyTokenIndex); |
| cls.SetFields(Object::empty_array()); |
| cls.SetFunctions(Object::empty_array()); |
| // Set super class to Object. |
| @@ -6445,7 +6399,7 @@ |
| const Library& core_lib = |
| Library::Handle(Library::NewLibraryHelper(core_lib_url, false)); |
| core_lib.Register(); |
| - isolate->object_store()->set_core_library(core_lib); |
| + isolate->object_store()->set_bootstrap_library(ObjectStore::kCore, core_lib); |
| isolate->object_store()->set_root_library(Library::Handle()); |
| // Hook up predefined classes without setting their library pointers. These |