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

Unified Diff: src/bootstrapper.cc

Issue 1129743003: Make V8 extras a separate type of native (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Initial version from https://codereview.chromium.org/1129743003 Created 5 years, 7 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 | « BUILD.gn ('k') | src/heap/heap.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/bootstrapper.cc
diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc
index 9eca9e8dddd2a057b446046875468a9503d1f1be..9512a9c0d1eee1a4766493a3b8d2840890363376 100644
--- a/src/bootstrapper.cc
+++ b/src/bootstrapper.cc
@@ -42,6 +42,12 @@ FixedArray* GetCache<ExperimentalNatives>(Heap* heap) {
}
+template <>
+FixedArray* GetCache<ExtraNatives>(Heap* heap) {
+ return heap->extra_natives_source_cache();
+}
+
+
template <class Source>
Handle<String> Bootstrapper::SourceLookup(int index) {
DCHECK(0 <= index && index < Source::GetBuiltinsCount());
@@ -67,6 +73,7 @@ Handle<String> Bootstrapper::SourceLookup(int index) {
template Handle<String> Bootstrapper::SourceLookup<Natives>(int index);
template Handle<String> Bootstrapper::SourceLookup<ExperimentalNatives>(
int index);
+template Handle<String> Bootstrapper::SourceLookup<ExtraNatives>(int index);
void Bootstrapper::Initialize(bool create_heap_objects) {
@@ -134,6 +141,7 @@ void DeleteNativeSources(Object* maybe_array) {
void Bootstrapper::TearDown() {
DeleteNativeSources(isolate_->heap()->natives_source_cache());
DeleteNativeSources(isolate_->heap()->experimental_natives_source_cache());
+ DeleteNativeSources(isolate_->heap()->extra_natives_source_cache());
extensions_cache_.Initialize(isolate_, false); // Yes, symmetrical
}
@@ -220,6 +228,7 @@ class Genesis BASE_EMBEDDED {
Handle<JSFunction>* fun,
Handle<Map>* external_map);
bool InstallExperimentalNatives();
+ bool InstallExtraNatives();
void InstallBuiltinFunctionIds();
void InstallJSFunctionResultCaches();
void InitializeNormalizedMapCaches();
@@ -300,6 +309,7 @@ class Genesis BASE_EMBEDDED {
static bool CompileBuiltin(Isolate* isolate, int index);
static bool CompileExperimentalBuiltin(Isolate* isolate, int index);
+ static bool CompileExtraBuiltin(Isolate* isolate, int index);
static bool CompileNative(Isolate* isolate,
Vector<const char> name,
Handle<String> source);
@@ -1447,6 +1457,14 @@ bool Genesis::CompileExperimentalBuiltin(Isolate* isolate, int index) {
}
+bool Genesis::CompileExtraBuiltin(Isolate* isolate, int index) {
+ Vector<const char> name = ExtraNatives::GetScriptName(index);
+ Handle<String> source_code =
+ isolate->bootstrapper()->SourceLookup<ExtraNatives>(index);
+ return CompileNative(isolate, name, source_code);
+}
+
+
bool Genesis::CompileNative(Isolate* isolate,
Vector<const char> name,
Handle<String> source) {
@@ -2356,6 +2374,16 @@ bool Genesis::InstallExperimentalNatives() {
}
+bool Genesis::InstallExtraNatives() {
+ for (int i = ExtraNatives::GetDebuggerCount();
+ i < ExtraNatives::GetBuiltinsCount(); i++) {
+ if (!CompileExtraBuiltin(isolate(), i)) return false;
+ }
+
+ return true;
+}
+
+
static void InstallBuiltinFunctionId(Handle<JSObject> holder,
const char* function_name,
BuiltinFunctionId id) {
@@ -2929,12 +2957,13 @@ Genesis::Genesis(Isolate* isolate,
isolate->counters()->contexts_created_from_scratch()->Increment();
}
- // Install experimental natives. Do not include them into the snapshot as we
- // should be able to turn them off at runtime. Re-installing them after
- // they have already been deserialized would also fail.
+ // Install experimental and extra natives. Do not include them into the
+ // snapshot as we should be able to turn them off at runtime. Re-installing
+ // them after they have already been deserialized would also fail.
if (!isolate->serializer_enabled()) {
InitializeExperimentalGlobal();
if (!InstallExperimentalNatives()) return;
+ if (!InstallExtraNatives()) return;
}
// The serializer cannot serialize typed arrays. Reset those typed arrays
« no previous file with comments | « BUILD.gn ('k') | src/heap/heap.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698