Chromium Code Reviews| Index: src/bootstrapper.cc |
| diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc |
| index 24108c9d64a1588ec8055d0e927eebe9c45f3d40..08007146baf549fc8ca0a4d3520614c3bd2b039d 100644 |
| --- a/src/bootstrapper.cc |
| +++ b/src/bootstrapper.cc |
| @@ -200,6 +200,7 @@ class Genesis BASE_EMBEDDED { |
| // Used for creating a context from scratch. |
| void InstallNativeFunctions(); |
| bool InstallNatives(); |
| + bool InstallExperimentalNatives(); |
| void InstallBuiltinFunctionIds(); |
| void InstallJSFunctionResultCaches(); |
| void InitializeNormalizedMapCaches(); |
| @@ -246,6 +247,7 @@ class Genesis BASE_EMBEDDED { |
| Handle<FixedArray> caller); |
| static bool CompileBuiltin(Isolate* isolate, int index); |
| + static bool CompileExperimentalBuiltin(Isolate* isolate, int index); |
| static bool CompileNative(Vector<const char> name, Handle<String> source); |
| static bool CompileScriptCached(Vector<const char> name, |
| Handle<String> source, |
| @@ -1175,6 +1177,15 @@ bool Genesis::CompileBuiltin(Isolate* isolate, int index) { |
| } |
| +bool Genesis::CompileExperimentalBuiltin(Isolate* isolate, int index) { |
| + Vector<const char> name = ExperimentalNatives::GetScriptName(index); |
| + Factory* factory = isolate->factory(); |
| + Handle<String> source_code = |
| + factory->NewStringFromAscii(ExperimentalNatives::GetScriptSource(index)); |
| + return CompileNative(name, source_code); |
| +} |
| + |
| + |
| bool Genesis::CompileNative(Vector<const char> name, Handle<String> source) { |
| HandleScope scope; |
| Isolate* isolate = source->GetIsolate(); |
| @@ -1510,7 +1521,6 @@ bool Genesis::InstallNatives() { |
| for (int i = Natives::GetDebuggerCount(); |
| i < Natives::GetBuiltinsCount(); |
| i++) { |
| - Vector<const char> name = Natives::GetScriptName(i); |
| if (!CompileBuiltin(isolate(), i)) return false; |
| // TODO(ager): We really only need to install the JS builtin |
| // functions on the builtins object after compiling and running |
| @@ -1628,6 +1638,18 @@ bool Genesis::InstallNatives() { |
| } |
| +bool Genesis::InstallExperimentalNatives() { |
| + if (FLAG_harmony_proxies) { |
|
Søren Thygesen Gjesse
2011/04/15 12:02:15
If we have more experimental features enabled this
Mads Ager (chromium)
2011/04/15 12:30:12
Right, that is what I had in mind. You can get the
|
| + for (int i = ExperimentalNatives::GetDebuggerCount(); |
| + i < ExperimentalNatives::GetBuiltinsCount(); |
| + i++) { |
| + if (!CompileExperimentalBuiltin(isolate(), i)) return false; |
| + } |
| + } |
| + return true; |
| +} |
| + |
| + |
| static Handle<JSObject> ResolveBuiltinIdHolder( |
| Handle<Context> global_context, |
| const char* holder_expr) { |
| @@ -2108,6 +2130,9 @@ Genesis::Genesis(Isolate* isolate, |
| isolate->counters()->contexts_created_from_scratch()->Increment(); |
| } |
| + // Install experimental natives. |
| + if (!InstallExperimentalNatives()) return; |
| + |
| result_ = global_context_; |
| } |