Files
sdk/runtime/vm/bootstrap.cc
T
iposva@google.com f29e6bb659 - Split Dart core libraries into shared sources and patch sources.
Currently this split goes along the runtime vs. library directories,
  eventually more shared code will be sitting in the shared library
  sources.
Review URL: https://chromiumcodereview.appspot.com//10834284

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@10612 260f80e4-7a28-3924-810f-c04153c831b5
2012-08-13 23:01:20 +00:00

82 lines
2.5 KiB
C++

// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
#include "vm/bootstrap.h"
#include "include/dart_api.h"
#include "vm/compiler.h"
#include "vm/dart_api_impl.h"
#include "vm/object.h"
#include "vm/object_store.h"
namespace dart {
DEFINE_FLAG(bool, print_bootstrap, false, "Print the bootstrap source.");
RawScript* Bootstrap::LoadScript(const char* url,
const char* source,
bool patch) {
return Script::New(String::Handle(String::New(url, Heap::kOld)),
String::Handle(String::New(source, Heap::kOld)),
patch ? RawScript::kPatchTag : RawScript::kSourceTag);
}
RawScript* Bootstrap::LoadCoreScript(bool patch) {
// TODO(iposva): Use proper library name.
const char* url = patch ? "dart:core-patch" : "bootstrap";
const char* source = patch ? corelib_patch_ : corelib_source_;
return LoadScript(url, source, patch);
}
RawScript* Bootstrap::LoadCoreImplScript(bool patch) {
// TODO(iposva): Use proper library name.
const char* url = patch ? "dart:coreimpl-patch" : "bootstrap_impl";
const char* source = patch ? corelib_impl_patch_ : corelib_impl_source_;
return LoadScript(url, source, patch);
}
RawScript* Bootstrap::LoadMathScript(bool patch) {
const char* url = patch ? "dart:math-patch" : "dart:math";
const char* source = patch ? math_patch_ : math_source_;
return LoadScript(url, source, patch);
}
RawScript* Bootstrap::LoadIsolateScript(bool patch) {
const char* url = patch ? "dart:isolate-patch" : "dart:isolate";
const char* source = patch ? isolate_patch_ : isolate_source_;
return LoadScript(url, source, patch);
}
RawScript* Bootstrap::LoadMirrorsScript(bool patch) {
const char* url = patch ? "dart:mirrors-patch" : "dart:mirrors";
const char* source = patch ? mirrors_patch_ : mirrors_source_;
return LoadScript(url, source, patch);
}
RawError* Bootstrap::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();
}
} // namespace dart