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

Unified Diff: runtime/vm/object.cc

Issue 12321082: - Properly load the core libraries as libraries and not as scripts. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 10 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.h ('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.cc
===================================================================
--- runtime/vm/object.cc (revision 19011)
+++ runtime/vm/object.cc (working copy)
@@ -631,15 +631,30 @@
lib.AddClass(cls);
}
-#define INIT_LIBRARY(name, raw_script, raw_lib) \
- script ^= raw_script; \
- Library::Init##name##Library(isolate); \
- lib ^= raw_lib; \
- ASSERT(!lib.IsNull()); \
+
+#define LOAD_LIBRARY(name, raw_name) \
+ url = Symbols::Dart##name().raw(); \
+ lib = Library::LookupLibrary(url); \
+ if (lib.IsNull()) { \
+ lib = Library::NewLibraryHelper(url, true); \
siva 2013/02/25 23:12:25 ASSERT(!lib.IsNull());
Ivan Posva 2013/02/25 23:23:59 We do not check for allocation success anywhere el
+ 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) {
@@ -649,6 +664,10 @@
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.
@@ -698,8 +717,10 @@
GrowableObjectArray::Handle(GrowableObjectArray::New(Heap::kOld));
object_store->set_libraries(libraries);
- // Basic infrastructure has been setup, initialize the class dictionary.
+ // Pre-register the core library.
Library::InitCoreLibrary(isolate);
+
+ // Basic infrastructure has been setup, initialize the class dictionary.
Library& core_lib = Library::Handle(Library::CoreLibrary());
ASSERT(!core_lib.IsNull());
@@ -771,7 +792,7 @@
pending_classes.Add(cls, Heap::kOld);
// Initialize the base interfaces used by the core VM classes.
- Script& script = Script::Handle(Bootstrap::LoadCoreScript(false));
+ script = Bootstrap::LoadCoreScript(false);
// Allocate and initialize the pre-allocated classes in the core library.
cls = Class::New<Instance>(kInstanceCid);
@@ -821,8 +842,17 @@
object_store->set_weak_property_class(cls);
RegisterPrivateClass(cls, Symbols::_WeakProperty(), core_lib);
- Library::InitScalarlistLibrary(isolate);
+ // Setup some default native field classes which can be extended for
+ // specifying native fields in dart classes.
+ Library::InitNativeWrappersLibrary(isolate);
+ ASSERT(isolate->object_store()->native_wrappers_library() != Library::null());
+
+ // Pre-register the scalarlist library so the native class implementations
+ // can be hooked up before compiling it.
+ LOAD_LIBRARY(Scalarlist, scalarlist);
+
Library& scalarlist_lib = Library::Handle(Library::ScalarlistLibrary());
+ ASSERT(!scalarlist_lib.IsNull());
cls = Class::New<Float32x4>();
object_store->set_float32x4_class(cls);
@@ -1010,125 +1040,22 @@
type = Type::NewNonParameterizedType(cls);
object_store->set_dynamic_type(type);
- // Setup some default native field classes which can be extended for
- // specifying native fields in dart classes.
- Library::InitNativeWrappersLibrary(isolate);
- ASSERT(isolate->object_store()->native_wrappers_library() != Library::null());
-
// Finish the initialization by compiling the bootstrap scripts containing the
// base interfaces and the implementation of the internal classes.
- Error& error = Error::Handle();
- error = Bootstrap::Compile(core_lib, script);
- if (!error.IsNull()) {
- return error.raw();
- }
- Script& patch_script = Script::Handle(Bootstrap::LoadCoreScript(true));
- error = core_lib.Patch(patch_script);
- if (!error.IsNull()) {
- return error.raw();
- }
- Library::InitASyncLibrary(isolate);
- const Script& async_script =
- Script::Handle(Bootstrap::LoadASyncScript(false));
- const Library& async_lib = Library::Handle(Library::ASyncLibrary());
- ASSERT(!async_lib.IsNull());
- error = Bootstrap::Compile(async_lib, async_script);
- if (!error.IsNull()) {
- return error.raw();
- }
- patch_script = Bootstrap::LoadASyncScript(true);
- error = async_lib.Patch(patch_script);
- if (!error.IsNull()) {
- return error.raw();
- }
- const Script& collection_script =
- Script::Handle(Bootstrap::LoadCollectionScript(false));
- const Library& collection_lib =
- Library::Handle(Library::CollectionLibrary());
- ASSERT(!collection_lib.IsNull());
- error = Bootstrap::Compile(collection_lib, collection_script);
- if (!error.IsNull()) {
- return error.raw();
- }
- const Script& collection_dev_script =
- Script::Handle(Bootstrap::LoadCollectionDevScript(false));
- const Library& collection_dev_lib =
- Library::Handle(Library::CollectionDevLibrary());
- ASSERT(!collection_dev_lib.IsNull());
- error = Bootstrap::Compile(collection_dev_lib, collection_dev_script);
- if (!error.IsNull()) {
- return error.raw();
- }
- const Script& math_script = Script::Handle(Bootstrap::LoadMathScript(false));
- const Library& math_lib = Library::Handle(Library::MathLibrary());
- ASSERT(!math_lib.IsNull());
- error = Bootstrap::Compile(math_lib, math_script);
- if (!error.IsNull()) {
- return error.raw();
- }
- patch_script = Bootstrap::LoadMathScript(true);
- error = math_lib.Patch(patch_script);
- if (!error.IsNull()) {
- return error.raw();
- }
- const Script& isolate_script = Script::Handle(
- Bootstrap::LoadIsolateScript(false));
- Library::InitIsolateLibrary(isolate);
- const Library& isolate_lib = Library::Handle(Library::IsolateLibrary());
- ASSERT(!isolate_lib.IsNull());
- error = Bootstrap::Compile(isolate_lib, isolate_script);
- if (!error.IsNull()) {
- return error.raw();
- }
- patch_script = Bootstrap::LoadIsolateScript(true);
- error = isolate_lib.Patch(patch_script);
- if (!error.IsNull()) {
- return error.raw();
- }
- const Script& mirrors_script = Script::Handle(
- Bootstrap::LoadMirrorsScript(false));
- Library::InitMirrorsLibrary(isolate);
- const Library& mirrors_lib = Library::Handle(Library::MirrorsLibrary());
- ASSERT(!mirrors_lib.IsNull());
- error = Bootstrap::Compile(mirrors_lib, mirrors_script);
- if (!error.IsNull()) {
- return error.raw();
- }
- patch_script = Bootstrap::LoadMirrorsScript(true);
- error = mirrors_lib.Patch(patch_script);
- if (!error.IsNull()) {
- return error.raw();
- }
- const Script& scalarlist_script = Script::Handle(
- Bootstrap::LoadScalarlistScript(false));
- ASSERT(!scalarlist_lib.IsNull());
- error = Bootstrap::Compile(scalarlist_lib, scalarlist_script);
- if (!error.IsNull()) {
- return error.raw();
- }
- patch_script = Bootstrap::LoadScalarlistScript(true);
- error = scalarlist_lib.Patch(patch_script);
- if (!error.IsNull()) {
- return error.raw();
- }
- Library& lib = Library::Handle();
- INIT_LIBRARY(Crypto,
- Bootstrap::LoadCryptoScript(false),
- Library::CryptoLibrary());
- INIT_LIBRARY(Json,
- Bootstrap::LoadJsonScript(false),
- Library::JsonLibrary());
- patch_script = Bootstrap::LoadJsonScript(true);
- error = lib.Patch(patch_script);
- if (!error.IsNull()) {
- return error.raw();
- }
- INIT_LIBRARY(Utf,
- Bootstrap::LoadUtfScript(false),
- Library::UtfLibrary());
- INIT_LIBRARY(Uri,
- Bootstrap::LoadUriScript(false),
- Library::UriLibrary());
+ INIT_LIBRARY(Core, core, true);
+
+ INIT_LIBRARY(Async, async, true);
+ INIT_LIBRARY(Collection, collection, false);
+ INIT_LIBRARY(CollectionDev, collection_dev, false);
+ INIT_LIBRARY(Crypto, crypto, false);
+ INIT_LIBRARY(Isolate, isolate, true);
+ INIT_LIBRARY(Json, json, false);
+ INIT_LIBRARY(Math, math, true);
+ INIT_LIBRARY(Mirrors, mirrors, true);
+ INIT_LIBRARY(Scalarlist, scalarlist, 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
@@ -6381,37 +6308,12 @@
}
-void Library::InitASyncLibrary(Isolate* isolate) {
- const String& url = Symbols::DartAsync();
- const Library& lib = Library::Handle(Library::NewLibraryHelper(url, true));
- lib.Register();
- isolate->object_store()->set_async_library(lib);
-}
-
-
void Library::InitCoreLibrary(Isolate* isolate) {
const String& core_lib_url = Symbols::DartCore();
const Library& core_lib =
Library::Handle(Library::NewLibraryHelper(core_lib_url, false));
core_lib.Register();
isolate->object_store()->set_core_library(core_lib);
- Library::InitMathLibrary(isolate);
- const Library& math_lib = Library::Handle(Library::MathLibrary());
- const Namespace& math_ns = Namespace::Handle(
- Namespace::New(math_lib, Array::Handle(), Array::Handle()));
- Library::InitCollectionDevLibrary(isolate);
- const Library& collection_dev_lib =
- Library::Handle(Library::CollectionDevLibrary());
- const Namespace& collection_dev_ns = Namespace::Handle(
- Namespace::New(collection_dev_lib, Array::Handle(), Array::Handle()));
- Library::InitCollectionLibrary(isolate);
- const Library& collection_lib =
- Library::Handle(Library::CollectionLibrary());
- const Namespace& collection_ns = Namespace::Handle(
- Namespace::New(collection_lib, Array::Handle(), Array::Handle()));
- core_lib.AddImport(math_ns);
- core_lib.AddImport(collection_ns);
- core_lib.AddImport(collection_dev_ns);
isolate->object_store()->set_root_library(Library::Handle());
// Hook up predefined classes without setting their library pointers. These
@@ -6422,92 +6324,6 @@
}
-void Library::InitCollectionLibrary(Isolate* isolate) {
- const String& url = Symbols::DartCollection();
- const Library& lib = Library::Handle(Library::NewLibraryHelper(url, true));
- lib.Register();
- const Library& math_lib = Library::Handle(Library::MathLibrary());
- const Namespace& math_ns = Namespace::Handle(
- Namespace::New(math_lib, Array::Handle(), Array::Handle()));
- const Library& collection_dev_lib =
- Library::Handle(Library::CollectionDevLibrary());
- const Namespace& collection_dev_ns = Namespace::Handle(
- Namespace::New(collection_dev_lib, Array::Handle(), Array::Handle()));
- lib.AddImport(math_ns);
- lib.AddImport(collection_dev_ns);
- isolate->object_store()->set_collection_library(lib);
-}
-
-
-void Library::InitCollectionDevLibrary(Isolate* isolate) {
- const String& url = Symbols::DartCollectionDev();
- const Library& lib = Library::Handle(Library::NewLibraryHelper(url, true));
- lib.Register();
- isolate->object_store()->set_collection_dev_library(lib);
-}
-
-
-void Library::InitCryptoLibrary(Isolate* isolate) {
- const String& url = Symbols::DartCrypto();
- const Library& lib = Library::Handle(Library::NewLibraryHelper(url, true));
- lib.Register();
- const Library& math_lib = Library::Handle(Library::MathLibrary());
- const Namespace& math_ns = Namespace::Handle(
- Namespace::New(math_lib, Array::Handle(), Array::Handle()));
- lib.AddImport(math_ns);
- isolate->object_store()->set_crypto_library(lib);
-}
-
-
-void Library::InitIsolateLibrary(Isolate* isolate) {
- const String& url = Symbols::DartIsolate();
- const Library& lib = Library::Handle(Library::NewLibraryHelper(url, true));
- lib.Register();
- const Library& async_lib = Library::Handle(Library::ASyncLibrary());
- const Namespace& async_ns = Namespace::Handle(
- Namespace::New(async_lib, Array::Handle(), Array::Handle()));
- lib.AddImport(async_ns);
- isolate->object_store()->set_isolate_library(lib);
-}
-
-
-void Library::InitJsonLibrary(Isolate* isolate) {
- const String& url = Symbols::DartJson();
- const Library& lib = Library::Handle(Library::NewLibraryHelper(url, true));
- lib.Register();
- isolate->object_store()->set_json_library(lib);
-}
-
-
-void Library::InitMathLibrary(Isolate* isolate) {
- const String& url = Symbols::DartMath();
- const Library& lib = Library::Handle(Library::NewLibraryHelper(url, true));
- lib.Register();
- isolate->object_store()->set_math_library(lib);
-}
-
-
-void Library::InitMirrorsLibrary(Isolate* isolate) {
- const String& url = Symbols::DartMirrors();
- const Library& lib = Library::Handle(Library::NewLibraryHelper(url, true));
- lib.Register();
- const Library& isolate_lib = Library::Handle(Library::IsolateLibrary());
- const Namespace& isolate_ns = Namespace::Handle(
- Namespace::New(isolate_lib, Array::Handle(), Array::Handle()));
- lib.AddImport(isolate_ns);
- const Library& async_lib = Library::Handle(Library::ASyncLibrary());
- const Namespace& async_ns = Namespace::Handle(
- Namespace::New(async_lib, Array::Handle(), Array::Handle()));
- lib.AddImport(async_ns);
- const Library& wrappers_lib =
- Library::Handle(Library::NativeWrappersLibrary());
- const Namespace& wrappers_ns = Namespace::Handle(
- Namespace::New(wrappers_lib, Array::Handle(), Array::Handle()));
- lib.AddImport(wrappers_ns);
- isolate->object_store()->set_mirrors_library(lib);
-}
-
-
void Library::InitNativeWrappersLibrary(Isolate* isolate) {
static const int kNumNativeWrappersClasses = 4;
ASSERT(kNumNativeWrappersClasses > 0 && kNumNativeWrappersClasses < 10);
@@ -6533,47 +6349,6 @@
}
-void Library::InitScalarlistLibrary(Isolate* isolate) {
- const String& url = Symbols::DartScalarlist();
- const Library& lib = Library::Handle(Library::NewLibraryHelper(url, true));
- lib.Register();
- const Library& collection_lib =
- Library::Handle(Library::CollectionLibrary());
- const Namespace& collection_ns = Namespace::Handle(
- Namespace::New(collection_lib, Array::Handle(), Array::Handle()));
- lib.AddImport(collection_ns);
- isolate->object_store()->set_scalarlist_library(lib);
-}
-
-
-void Library::InitUriLibrary(Isolate* isolate) {
- const String& url = Symbols::DartUri();
- const Library& lib = Library::Handle(Library::NewLibraryHelper(url, true));
- lib.Register();
- const Library& math_lib = Library::Handle(Library::MathLibrary());
- const Namespace& math_ns = Namespace::Handle(
- Namespace::New(math_lib, Array::Handle(), Array::Handle()));
- const Library& utf_lib = Library::Handle(Library::UtfLibrary());
- const Namespace& utf_ns = Namespace::Handle(
- Namespace::New(utf_lib, Array::Handle(), Array::Handle()));
- lib.AddImport(math_ns);
- lib.AddImport(utf_ns);
- isolate->object_store()->set_uri_library(lib);
-}
-
-
-void Library::InitUtfLibrary(Isolate* isolate) {
- const String& url = Symbols::DartUtf();
- const Library& lib = Library::Handle(Library::NewLibraryHelper(url, true));
- lib.Register();
- const Library& async_lib = Library::Handle(Library::ASyncLibrary());
- const Namespace& async_ns = Namespace::Handle(
- Namespace::New(async_lib, Array::Handle(), Array::Handle()));
- lib.AddImport(async_ns);
- isolate->object_store()->set_utf_library(lib);
-}
-
-
RawLibrary* Library::LookupLibrary(const String &url) {
Isolate* isolate = Isolate::Current();
Library& lib = Library::Handle(isolate, Library::null());
@@ -6667,7 +6442,7 @@
}
-RawLibrary* Library::ASyncLibrary() {
+RawLibrary* Library::AsyncLibrary() {
return Isolate::Current()->object_store()->async_library();
}
« no previous file with comments | « runtime/vm/object.h ('k') | runtime/vm/parser.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698