| Index: src/bootstrapper.cc
|
| diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc
|
| index 702500549082e12bbd0a9cd8c04b11ac5b9769cd..58b2ad0387b4bf50b439e437bdea75fb1b760ff1 100644
|
| --- a/src/bootstrapper.cc
|
| +++ b/src/bootstrapper.cc
|
| @@ -147,16 +147,13 @@ class Genesis BASE_EMBEDDED {
|
| v8::ExtensionConfiguration* extensions);
|
| ~Genesis() { }
|
|
|
| - Handle<Context> result() { return result_; }
|
| -
|
| Isolate* isolate() const { return isolate_; }
|
| Factory* factory() const { return isolate_->factory(); }
|
| Heap* heap() const { return isolate_->heap(); }
|
|
|
| - private:
|
| - Handle<Context> native_context_;
|
| - Isolate* isolate_;
|
| + Handle<Context> result() { return result_; }
|
|
|
| + private:
|
| Handle<Context> native_context() { return native_context_; }
|
|
|
| // Creates some basic objects. Used for creating a context from scratch.
|
| @@ -277,7 +274,9 @@ class Genesis BASE_EMBEDDED {
|
| Handle<Context> top_context,
|
| bool use_runtime_context);
|
|
|
| + Isolate* isolate_;
|
| Handle<Context> result_;
|
| + Handle<Context> native_context_;
|
|
|
| // Function instance maps. Function literal maps are created initially with
|
| // a read only prototype for the processing of JS builtins. Later the function
|
| @@ -303,9 +302,9 @@ Handle<Context> Bootstrapper::CreateEnvironment(
|
| v8::Handle<v8::ObjectTemplate> global_template,
|
| v8::ExtensionConfiguration* extensions) {
|
| HandleScope scope(isolate_);
|
| - Handle<Context> env;
|
| Genesis genesis(isolate_, global_object, global_template, extensions);
|
| - env = genesis.result();
|
| + Handle<Object> context(isolate_->global_handles()->Create(*genesis.result()));
|
| + Handle<Context> env = Handle<Context>::cast(context);
|
| if (!env.is_null()) {
|
| if (InstallExtensions(env, extensions)) {
|
| return env;
|
| @@ -692,9 +691,8 @@ void Genesis::CreateRoots() {
|
| // closure and extension object later (we need the empty function
|
| // and the global object, but in order to create those, we need the
|
| // native context).
|
| - native_context_ = Handle<Context>::cast(isolate()->global_handles()->Create(
|
| - *factory()->NewNativeContext()));
|
| - AddToWeakNativeContextList(*native_context_);
|
| + native_context_ = factory()->NewNativeContext();
|
| + AddToWeakNativeContextList(*native_context());
|
| isolate()->set_context(*native_context());
|
|
|
| // Allocate the message listeners object.
|
| @@ -823,11 +821,11 @@ void Genesis::HookUpGlobalProxy(Handle<GlobalObject> inner_global,
|
|
|
| void Genesis::HookUpInnerGlobal(Handle<GlobalObject> inner_global) {
|
| Handle<GlobalObject> inner_global_from_snapshot(
|
| - GlobalObject::cast(native_context_->extension()));
|
| - Handle<JSBuiltinsObject> builtins_global(native_context_->builtins());
|
| - native_context_->set_extension(*inner_global);
|
| - native_context_->set_global_object(*inner_global);
|
| - native_context_->set_security_token(*inner_global);
|
| + GlobalObject::cast(native_context()->extension()));
|
| + Handle<JSBuiltinsObject> builtins_global(native_context()->builtins());
|
| + native_context()->set_extension(*inner_global);
|
| + native_context()->set_global_object(*inner_global);
|
| + native_context()->set_security_token(*inner_global);
|
| static const PropertyAttributes attributes =
|
| static_cast<PropertyAttributes>(READ_ONLY | DONT_DELETE);
|
| ForceSetProperty(builtins_global,
|
| @@ -2417,7 +2415,6 @@ Genesis::Genesis(Isolate* isolate,
|
|
|
| // Before creating the roots we must save the context and restore it
|
| // on all function exits.
|
| - HandleScope scope(isolate);
|
| SaveContext saved_context(isolate);
|
|
|
| // During genesis, the boilerplate for stack overflow won't work until the
|
| @@ -2426,12 +2423,10 @@ Genesis::Genesis(Isolate* isolate,
|
| StackLimitCheck check(isolate);
|
| if (check.HasOverflowed()) return;
|
|
|
| - Handle<Context> new_context = Snapshot::NewContextFromSnapshot();
|
| - if (!new_context.is_null()) {
|
| - native_context_ =
|
| - Handle<Context>::cast(isolate->global_handles()->Create(*new_context));
|
| - AddToWeakNativeContextList(*native_context_);
|
| - isolate->set_context(*native_context_);
|
| + native_context_ = Snapshot::NewContextFromSnapshot();
|
| + if (!native_context().is_null()) {
|
| + AddToWeakNativeContextList(*native_context());
|
| + isolate->set_context(*native_context());
|
| isolate->counters()->contexts_created_by_snapshot()->Increment();
|
| Handle<GlobalObject> inner_global;
|
| Handle<JSGlobalProxy> global_proxy =
|
| @@ -2467,7 +2462,7 @@ Genesis::Genesis(Isolate* isolate,
|
| InitializeExperimentalGlobal();
|
| if (!InstallExperimentalNatives()) return;
|
|
|
| - result_ = native_context_;
|
| + result_ = native_context();
|
| }
|
|
|
|
|
|
|