| Index: src/bootstrapper.cc
|
| diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc
|
| index d84496082c1b6a33f610ae3409c6cb51707aa706..0b1d688f3ceff3b880a2af91ee3f3dec78f1e749 100644
|
| --- a/src/bootstrapper.cc
|
| +++ b/src/bootstrapper.cc
|
| @@ -140,8 +140,7 @@ class Genesis BASE_EMBEDDED {
|
| public:
|
| Genesis(Isolate* isolate, MaybeHandle<JSGlobalProxy> maybe_global_proxy,
|
| v8::Local<v8::ObjectTemplate> global_proxy_template,
|
| - v8::ExtensionConfiguration* extensions, size_t context_snapshot_index,
|
| - GlobalContextType context_type);
|
| + size_t context_snapshot_index, GlobalContextType context_type);
|
| Genesis(Isolate* isolate, MaybeHandle<JSGlobalProxy> maybe_global_proxy,
|
| v8::Local<v8::ObjectTemplate> global_proxy_template);
|
| ~Genesis() { }
|
| @@ -313,7 +312,7 @@ Handle<Context> Bootstrapper::CreateEnvironment(
|
| GlobalContextType context_type) {
|
| HandleScope scope(isolate_);
|
| Genesis genesis(isolate_, maybe_global_proxy, global_proxy_template,
|
| - extensions, context_snapshot_index, context_type);
|
| + context_snapshot_index, context_type);
|
| Handle<Context> env = genesis.result();
|
| if (env.is_null() || !InstallExtensions(env, extensions)) {
|
| return Handle<Context>();
|
| @@ -4145,7 +4144,6 @@ bool Genesis::InstallExtension(Isolate* isolate,
|
| isolate->clear_pending_exception();
|
| }
|
| extension_states->set_state(current, INSTALLED);
|
| - isolate->NotifyExtensionInstalled();
|
| return result;
|
| }
|
|
|
| @@ -4279,7 +4277,7 @@ void Genesis::TransferNamedProperties(Handle<JSObject> from,
|
| Handle<Object> value(cell->value(), isolate());
|
| if (value->IsTheHole(isolate())) continue;
|
| PropertyDetails details = cell->property_details();
|
| - DCHECK_EQ(kData, details.kind());
|
| + if (details.kind() != kData) continue;
|
| JSObject::AddProperty(to, key, value, details.attributes());
|
| }
|
| } else {
|
| @@ -4377,12 +4375,12 @@ class NoTrackDoubleFieldsForSerializerScope {
|
| Genesis::Genesis(Isolate* isolate,
|
| MaybeHandle<JSGlobalProxy> maybe_global_proxy,
|
| v8::Local<v8::ObjectTemplate> global_proxy_template,
|
| - v8::ExtensionConfiguration* extensions,
|
| size_t context_snapshot_index, GlobalContextType context_type)
|
| : isolate_(isolate), active_(isolate->bootstrapper()) {
|
| NoTrackDoubleFieldsForSerializerScope disable_scope(isolate);
|
| result_ = Handle<Context>::null();
|
| global_proxy_ = Handle<JSGlobalProxy>::null();
|
| + bool create_new_global_proxy = context_snapshot_index == 0;
|
|
|
| // Before creating the roots we must save the context and restore it
|
| // on all function exits.
|
| @@ -4401,7 +4399,7 @@ Genesis::Genesis(Isolate* isolate,
|
| // Create an uninitialized global proxy now if we don't have one
|
| // and initialize it later in CreateNewGlobals.
|
| Handle<JSGlobalProxy> global_proxy;
|
| - if (!maybe_global_proxy.ToHandle(&global_proxy)) {
|
| + if (!maybe_global_proxy.ToHandle(&global_proxy) && create_new_global_proxy) {
|
| const int internal_field_count =
|
| !global_proxy_template.IsEmpty()
|
| ? global_proxy_template->InternalFieldCount()
|
| @@ -4433,13 +4431,16 @@ Genesis::Genesis(Isolate* isolate,
|
| Map::TraceAllTransitions(object_fun->initial_map());
|
| }
|
| #endif
|
| - Handle<JSGlobalObject> global_object =
|
| - CreateNewGlobals(global_proxy_template, global_proxy);
|
|
|
| - HookUpGlobalProxy(global_object, global_proxy);
|
| - HookUpGlobalObject(global_object);
|
| + if (create_new_global_proxy) {
|
| + Handle<JSGlobalObject> global_object =
|
| + CreateNewGlobals(global_proxy_template, global_proxy);
|
|
|
| - if (!ConfigureGlobalObjects(global_proxy_template)) return;
|
| + HookUpGlobalProxy(global_object, global_proxy);
|
| + HookUpGlobalObject(global_object);
|
| +
|
| + if (!ConfigureGlobalObjects(global_proxy_template)) return;
|
| + }
|
| } else {
|
| // We get here if there was no context snapshot.
|
| CreateRoots();
|
| @@ -4461,9 +4462,6 @@ Genesis::Genesis(Isolate* isolate,
|
| if (!ConfigureGlobalObjects(global_proxy_template)) return;
|
|
|
| isolate->counters()->contexts_created_from_scratch()->Increment();
|
| - // Re-initialize the counter because it got incremented during snapshot
|
| - // creation.
|
| - isolate->native_context()->set_errors_thrown(Smi::kZero);
|
| }
|
|
|
| // Install experimental natives. Do not include them into the
|
| @@ -4492,6 +4490,7 @@ Genesis::Genesis(Isolate* isolate,
|
| // We do not need script contexts for native scripts.
|
| DCHECK_EQ(1, native_context()->script_context_table()->used());
|
|
|
| + native_context()->ResetErrorsThrown();
|
| result_ = native_context();
|
| }
|
|
|
|
|