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

Unified Diff: runtime/vm/bootstrap.cc

Issue 14927003: Revert 22380 to investigate windows build break. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 8 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/bootstrap.h ('k') | runtime/vm/dart.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/bootstrap.cc
===================================================================
--- runtime/vm/bootstrap.cc (revision 22381)
+++ runtime/vm/bootstrap.cc (working copy)
@@ -25,7 +25,7 @@
typedef struct {
intptr_t index_;
const char* uri_;
- const char** source_paths_;
+ const char* source_;
const char* patch_uri_;
const char* patch_source_;
} bootstrap_lib_props;
@@ -34,171 +34,73 @@
static bootstrap_lib_props bootstrap_libraries[] = {
INIT_LIBRARY(ObjectStore::kCore,
core,
- Bootstrap::corelib_source_paths_,
+ Bootstrap::corelib_source_,
Bootstrap::corelib_patch_),
INIT_LIBRARY(ObjectStore::kAsync,
async,
- Bootstrap::async_source_paths_,
+ Bootstrap::async_source_,
Bootstrap::async_patch_),
INIT_LIBRARY(ObjectStore::kCollection,
collection,
- Bootstrap::collection_source_paths_,
+ Bootstrap::collection_source_,
Bootstrap::collection_patch_),
INIT_LIBRARY(ObjectStore::kCollectionDev,
_collection-dev,
- Bootstrap::collection_dev_source_paths_,
+ Bootstrap::collection_dev_source_,
Bootstrap::collection_dev_patch_),
INIT_LIBRARY(ObjectStore::kCrypto,
crypto,
- Bootstrap::crypto_source_paths_,
+ Bootstrap::crypto_source_,
NULL),
INIT_LIBRARY(ObjectStore::kIsolate,
isolate,
- Bootstrap::isolate_source_paths_,
+ Bootstrap::isolate_source_,
Bootstrap::isolate_patch_),
INIT_LIBRARY(ObjectStore::kJson,
json,
- Bootstrap::json_source_paths_,
+ Bootstrap::json_source_,
Bootstrap::json_patch_),
INIT_LIBRARY(ObjectStore::kMath,
math,
- Bootstrap::math_source_paths_,
+ Bootstrap::math_source_,
Bootstrap::math_patch_),
INIT_LIBRARY(ObjectStore::kMirrors,
mirrors,
- Bootstrap::mirrors_source_paths_,
+ Bootstrap::mirrors_source_,
Bootstrap::mirrors_patch_),
INIT_LIBRARY(ObjectStore::kTypedData,
typed_data,
- Bootstrap::typed_data_source_paths_,
+ Bootstrap::typed_data_source_,
Bootstrap::typed_data_patch_),
INIT_LIBRARY(ObjectStore::kUtf,
utf,
- Bootstrap::utf_source_paths_,
+ Bootstrap::utf_source_,
NULL),
INIT_LIBRARY(ObjectStore::kUri,
uri,
- Bootstrap::uri_source_paths_,
+ Bootstrap::uri_source_,
NULL),
{ ObjectStore::kNone, NULL, NULL, NULL, NULL }
};
-static RawString* GetLibrarySource(const Library& lib,
- const String& uri,
- bool patch) {
- // First check if this is a valid boot strap library and find it's index
- // in the 'bootstrap_libraries' table above.
- intptr_t index = 0;
- const String& lib_uri = String::Handle(lib.url());
- while (bootstrap_libraries[index].index_ != ObjectStore::kNone) {
- if (lib_uri.Equals(bootstrap_libraries[index].uri_)) {
- break;
- }
- index += 1;
- }
- if (bootstrap_libraries[index].index_ == ObjectStore::kNone) {
- return String::null(); // Library is not a boot strap library.
- }
-
- if (patch) {
- // TODO(asiva): Replace with actual read of the source file.
- const char* source = bootstrap_libraries[index].patch_source_;
- ASSERT(source != NULL);
- return String::New(source, Heap::kOld);
- }
-
- // Try to read the source using the path specified for the uri.
- const char** source_paths = bootstrap_libraries[index].source_paths_;
- if (source_paths == NULL) {
- return String::null(); // No path mapping information exists for library.
- }
- intptr_t i = 0;
- const char* source_path = NULL;
- while (source_paths[i] != NULL) {
- if (uri.Equals(source_paths[i])) {
- source_path = source_paths[i + 1];
- break;
- }
- i += 2;
- }
- if (source_path == NULL) {
- return String::null(); // Uri does not exist in path mapping information.
- }
-
- Dart_FileOpenCallback file_open = Isolate::file_open_callback();
- Dart_FileReadCallback file_read = Isolate::file_read_callback();
- Dart_FileCloseCallback file_close = Isolate::file_close_callback();
- if (file_open == NULL || file_read == NULL || file_close == NULL) {
- return String::null(); // File operations are not supported.
- }
-
- void* stream = (*file_open)(source_path, false);
- if (stream == NULL) {
- return String::null();
- }
-
- const uint8_t* utf8_array = NULL;
- intptr_t file_length = -1;
- (*file_read)(&utf8_array, &file_length, stream);
- if (file_length == -1) {
- return String::null();
- }
- ASSERT(utf8_array != NULL);
-
- (*file_close)(stream);
-
- return String::FromUTF8(utf8_array, file_length);
+static RawString* GetLibrarySource(intptr_t index, bool patch) {
+ // TODO(asiva): Replace with actual read of the source file.
+ const char* source = patch ? bootstrap_libraries[index].patch_source_ :
+ bootstrap_libraries[index].source_;
+ ASSERT(source != NULL);
+ return String::New(source, Heap::kOld);
}
-static RawError* Compile(const Library& library, const Script& script) {
- if (FLAG_print_bootstrap) {
- OS::Print("Bootstrap source '%s':\n%s\n",
- String::Handle(script.url()).ToCString(),
- String::Handle(script.Source()).ToCString());
- }
- bool update_lib_status = (script.kind() == RawScript::kScriptTag ||
- script.kind() == RawScript::kLibraryTag);
- if (update_lib_status) {
- library.SetLoadInProgress();
- }
- const Error& error = Error::Handle(Compiler::Compile(library, script));
- if (update_lib_status) {
- if (error.IsNull()) {
- library.SetLoaded();
- } else {
- library.SetLoadError();
- }
- }
- return error.raw();
-}
-
-
static Dart_Handle LoadPartSource(Isolate* isolate,
const Library& lib,
const String& uri) {
- const String& part_source = String::Handle(
- isolate, GetLibrarySource(lib, uri, false));
- const String& lib_uri = String::Handle(isolate, lib.url());
- if (part_source.IsNull()) {
- return Dart_NewApiError("Unable to read part file '%s' of library '%s'",
- uri.ToCString(), lib_uri.ToCString());
- }
-
- // Prepend the library URI to form a unique script URI for the part.
- const Array& strings = Array::Handle(isolate, Array::New(3));
- strings.SetAt(0, lib_uri);
- strings.SetAt(1, Symbols::Slash());
- strings.SetAt(2, uri);
- const String& part_uri = String::Handle(isolate, String::ConcatAll(strings));
-
- // Create a script object and compile the part.
- const Script& part_script = Script::Handle(
- isolate, Script::New(part_uri, part_source, RawScript::kSourceTag));
- const Error& error = Error::Handle(isolate, Compile(lib, part_script));
- return Api::NewHandle(isolate, error.raw());
+ // TODO(asiva): For now we return an error here, once we start
+ // loading libraries from the real source this would have to call the
+ // file read callback here and invoke Compiler::Compile on it.
+ return Dart_NewApiError("Unable to load source '%s' ", uri.ToCString());
}
@@ -212,12 +114,18 @@
if (!Dart_IsString(uri)) {
return Dart_NewApiError("uri is not a string");
}
+ const String& uri_str = Api::UnwrapStringHandle(isolate, uri);
+ ASSERT(!uri_str.IsNull());
+ bool is_dart_scheme_uri = uri_str.StartsWith(Symbols::DartScheme());
+ if (!is_dart_scheme_uri) {
+ // The bootstrap tag handler can only handle dart scheme uris.
+ return Dart_NewApiError("Do not know how to load '%s' ",
+ uri_str.ToCString());
+ }
if (tag == kCanonicalizeUrl) {
- // In the boot strap loader we do not try and do any canonicalization.
+ // Dart Scheme URIs do not need any canonicalization.
return uri;
}
- const String& uri_str = Api::UnwrapStringHandle(isolate, uri);
- ASSERT(!uri_str.IsNull());
if (tag == kImportTag) {
// We expect the core bootstrap libraries to only import other
// core bootstrap libraries.
@@ -234,6 +142,23 @@
}
+static RawError* Compile(const Library& library, const Script& script) {
+ if (FLAG_print_bootstrap) {
+ OS::Print("Bootstrap source '%s':\n%s\n",
+ String::Handle(script.url()).ToCString(),
+ String::Handle(script.Source()).ToCString());
+ }
+ library.SetLoadInProgress();
+ const Error& error = Error::Handle(Compiler::Compile(library, script));
+ if (error.IsNull()) {
+ library.SetLoaded();
+ } else {
+ library.SetLoadError();
+ }
+ return error.raw();
+}
+
+
RawError* Bootstrap::LoadandCompileScripts() {
Isolate* isolate = Isolate::Current();
String& uri = String::Handle();
@@ -272,13 +197,7 @@
uri = Symbols::New(bootstrap_libraries[i].uri_);
lib = Library::LookupLibrary(uri);
ASSERT(!lib.IsNull());
- source = GetLibrarySource(lib, uri, false);
- if (source.IsNull()) {
- error ^= Api::UnwrapErrorHandle(
- isolate, Api::NewError("Unable to find dart source for %s",
- uri.ToCString())).raw();
- break;
- }
+ source = GetLibrarySource(i, false);
script = Script::New(uri, source, RawScript::kLibraryTag);
error = Compile(lib, script);
if (!error.IsNull()) {
@@ -288,13 +207,7 @@
if (bootstrap_libraries[i].patch_source_ != NULL) {
patch_uri = String::New(bootstrap_libraries[i].patch_uri_,
Heap::kOld);
- source = GetLibrarySource(lib, uri, true);
- if (source.IsNull()) {
- error ^= Api::UnwrapErrorHandle(
- isolate, Api::NewError("Unable to find dart patch source for %s",
- uri.ToCString())).raw();
- break;
- }
+ source = GetLibrarySource(i, true);
script = Script::New(patch_uri, source, RawScript::kPatchTag);
error = lib.Patch(script);
if (!error.IsNull()) {
« no previous file with comments | « runtime/vm/bootstrap.h ('k') | runtime/vm/dart.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698