| Index: runtime/vm/object.cc
|
| ===================================================================
|
| --- runtime/vm/object.cc (revision 7922)
|
| +++ runtime/vm/object.cc (working copy)
|
| @@ -497,6 +497,11 @@
|
| cls = Class::New<OneByteString>();
|
| object_store->set_one_byte_string_class(cls);
|
|
|
| + // Set up the libraries array before initializing the core library.
|
| + const GrowableObjectArray& libraries =
|
| + GrowableObjectArray::Handle(GrowableObjectArray::New(Heap::kOld));
|
| + object_store->set_libraries(libraries);
|
| +
|
| // Basic infrastructure has been setup, initialize the class dictionary.
|
| Library::InitCoreLibrary(isolate);
|
| Library& core_lib = Library::Handle(Library::CoreLibrary());
|
| @@ -5306,7 +5311,6 @@
|
| result.raw_ptr()->anonymous_classes_ = Array::Empty();
|
| result.raw_ptr()->num_anonymous_ = 0;
|
| result.raw_ptr()->imports_ = Array::Empty();
|
| - result.raw_ptr()->next_registered_ = Library::null();
|
| result.raw_ptr()->loaded_scripts_ = Array::null();
|
| result.set_native_entry_resolver(NULL);
|
| result.raw_ptr()->corelib_imported_ = true;
|
| @@ -5404,32 +5408,34 @@
|
| Isolate* isolate = Isolate::Current();
|
| Library& lib = Library::Handle(isolate, Library::null());
|
| String& lib_url = String::Handle(isolate, String::null());
|
| - lib = isolate->object_store()->registered_libraries();
|
| - while (!lib.IsNull()) {
|
| + GrowableObjectArray& libs = GrowableObjectArray::Handle(
|
| + isolate, isolate->object_store()->libraries());
|
| + for (int i = 0; i < libs.Length(); i++) {
|
| + lib ^= libs.At(i);
|
| lib_url = lib.url();
|
| if (lib_url.Equals(url)) {
|
| return lib.raw();
|
| }
|
| - lib = lib.next_registered();
|
| }
|
| return Library::null();
|
| }
|
|
|
|
|
| RawString* Library::CheckForDuplicateDefinition() {
|
| - Library& lib = Library::Handle();
|
| Isolate* isolate = Isolate::Current();
|
| ASSERT(isolate != NULL);
|
| ObjectStore* object_store = isolate->object_store();
|
| ASSERT(object_store != NULL);
|
| - lib ^= object_store->registered_libraries();
|
| + const GrowableObjectArray& libs =
|
| + GrowableObjectArray::Handle(object_store->libraries());
|
| + Library& lib = Library::Handle();
|
| String& error_message = String::Handle();
|
| - while (!lib.IsNull()) {
|
| + for (int i = 0; i < libs.Length(); i++) {
|
| + lib ^= libs.At(i);
|
| error_message = lib.FindDuplicateDefinition();
|
| if (!error_message.IsNull()) {
|
| return error_message.raw();
|
| }
|
| - lib ^= lib.next_registered();
|
| }
|
| return String::null();
|
| }
|
| @@ -5437,16 +5443,17 @@
|
|
|
| bool Library::IsKeyUsed(intptr_t key) {
|
| intptr_t lib_key;
|
| + const GrowableObjectArray& libs = GrowableObjectArray::Handle(
|
| + Isolate::Current()->object_store()->libraries());
|
| Library& lib = Library::Handle();
|
| - lib = Isolate::Current()->object_store()->registered_libraries();
|
| String& lib_url = String::Handle();
|
| - while (!lib.IsNull()) {
|
| + for (int i = 0; i < libs.Length(); i++) {
|
| + lib ^= libs.At(i);
|
| lib_url ^= lib.url();
|
| lib_key = lib_url.Hash();
|
| if (lib_key == key) {
|
| return true;
|
| }
|
| - lib = lib.next_registered();
|
| }
|
| return false;
|
| }
|
| @@ -5463,11 +5470,27 @@
|
| }
|
|
|
|
|
| +RawLibrary* Library::GetLibrary(intptr_t index) {
|
| + Isolate* isolate = Isolate::Current();
|
| + const GrowableObjectArray& libs =
|
| + GrowableObjectArray::Handle(isolate->object_store()->libraries());
|
| + ASSERT(!libs.IsNull());
|
| + if ((0 <= index) && (index < libs.Length())) {
|
| + Library& lib = Library::Handle();
|
| + lib ^= libs.At(index);
|
| + return lib.raw();
|
| + }
|
| + return Library::null();
|
| +}
|
| +
|
| +
|
| void Library::Register() const {
|
| ASSERT(Library::LookupLibrary(String::Handle(url())) == Library::null());
|
| - raw_ptr()->next_registered_ =
|
| - Isolate::Current()->object_store()->registered_libraries();
|
| - Isolate::Current()->object_store()->set_registered_libraries(*this);
|
| + ObjectStore* object_store = Isolate::Current()->object_store();
|
| + GrowableObjectArray& libs =
|
| + GrowableObjectArray::Handle(object_store->libraries());
|
| + ASSERT(!libs.IsNull());
|
| + libs.Add(*this);
|
| }
|
|
|
|
|
| @@ -5667,10 +5690,12 @@
|
|
|
| RawError* Library::CompileAll() {
|
| Error& error = Error::Handle();
|
| - Library& lib = Library::Handle(
|
| - Isolate::Current()->object_store()->registered_libraries());
|
| + const GrowableObjectArray& libs = GrowableObjectArray::Handle(
|
| + Isolate::Current()->object_store()->libraries());
|
| + Library& lib = Library::Handle();
|
| Class& cls = Class::Handle();
|
| - while (!lib.IsNull()) {
|
| + for (int i = 0; i < libs.Length(); i++) {
|
| + lib ^= libs.At(i);
|
| ClassDictionaryIterator it(lib);
|
| while (it.HasNext()) {
|
| cls ^= it.GetNextClass();
|
| @@ -5690,7 +5715,6 @@
|
| return error.raw();
|
| }
|
| }
|
| - lib = lib.next_registered();
|
| }
|
| return error.raw();
|
| }
|
|
|