| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/api.h" | 5 #include "src/api.h" |
| 6 | 6 |
| 7 #include <string.h> // For memcpy, strlen. | 7 #include <string.h> // For memcpy, strlen. |
| 8 #ifdef V8_USE_ADDRESS_SANITIZER | 8 #ifdef V8_USE_ADDRESS_SANITIZER |
| 9 #include <sanitizer/asan_interface.h> | 9 #include <sanitizer/asan_interface.h> |
| 10 #endif // V8_USE_ADDRESS_SANITIZER | 10 #endif // V8_USE_ADDRESS_SANITIZER |
| (...skipping 597 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 608 #endif // DEBUG | 608 #endif // DEBUG |
| 609 | 609 |
| 610 i::StartupSerializer startup_serializer(isolate, function_code_handling); | 610 i::StartupSerializer startup_serializer(isolate, function_code_handling); |
| 611 startup_serializer.SerializeStrongReferences(); | 611 startup_serializer.SerializeStrongReferences(); |
| 612 | 612 |
| 613 // Serialize each context with a new partial serializer. | 613 // Serialize each context with a new partial serializer. |
| 614 i::List<i::SnapshotData*> context_snapshots(num_additional_contexts + 1); | 614 i::List<i::SnapshotData*> context_snapshots(num_additional_contexts + 1); |
| 615 | 615 |
| 616 { | 616 { |
| 617 // The default snapshot does not support internal fields. | 617 // The default snapshot does not support internal fields. |
| 618 i::PartialSerializer partial_serializer(isolate, &startup_serializer, | 618 i::PartialSerializer partial_serializer( |
| 619 nullptr); | 619 isolate, &startup_serializer, v8::SerializeInternalFieldsCallback()); |
| 620 partial_serializer.Serialize(&default_context, false); | 620 partial_serializer.Serialize(&default_context, false); |
| 621 context_snapshots.Add(new i::SnapshotData(&partial_serializer)); | 621 context_snapshots.Add(new i::SnapshotData(&partial_serializer)); |
| 622 } | 622 } |
| 623 | 623 |
| 624 for (int i = 0; i < num_additional_contexts; i++) { | 624 for (int i = 0; i < num_additional_contexts; i++) { |
| 625 i::PartialSerializer partial_serializer( | 625 i::PartialSerializer partial_serializer( |
| 626 isolate, &startup_serializer, data->internal_fields_serializers_[i]); | 626 isolate, &startup_serializer, data->internal_fields_serializers_[i]); |
| 627 partial_serializer.Serialize(&contexts[i], true); | 627 partial_serializer.Serialize(&contexts[i], true); |
| 628 context_snapshots.Add(new i::SnapshotData(&partial_serializer)); | 628 context_snapshots.Add(new i::SnapshotData(&partial_serializer)); |
| 629 } | 629 } |
| (...skipping 5660 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6290 return Local<Context>(); | 6290 return Local<Context>(); |
| 6291 } | 6291 } |
| 6292 return Utils::ToLocal(scope.CloseAndEscape(env)); | 6292 return Utils::ToLocal(scope.CloseAndEscape(env)); |
| 6293 } | 6293 } |
| 6294 | 6294 |
| 6295 Local<Context> v8::Context::New(v8::Isolate* external_isolate, | 6295 Local<Context> v8::Context::New(v8::Isolate* external_isolate, |
| 6296 v8::ExtensionConfiguration* extensions, | 6296 v8::ExtensionConfiguration* extensions, |
| 6297 v8::MaybeLocal<ObjectTemplate> global_template, | 6297 v8::MaybeLocal<ObjectTemplate> global_template, |
| 6298 v8::MaybeLocal<Value> global_object) { | 6298 v8::MaybeLocal<Value> global_object) { |
| 6299 return NewContext(external_isolate, extensions, global_template, | 6299 return NewContext(external_isolate, extensions, global_template, |
| 6300 global_object, 0, nullptr); | 6300 global_object, 0, DeserializeInternalFieldsCallback()); |
| 6301 } | 6301 } |
| 6302 | 6302 |
| 6303 MaybeLocal<Context> v8::Context::FromSnapshot( | 6303 MaybeLocal<Context> v8::Context::FromSnapshot( |
| 6304 v8::Isolate* external_isolate, size_t context_snapshot_index, | 6304 v8::Isolate* external_isolate, size_t context_snapshot_index, |
| 6305 v8::DeserializeInternalFieldsCallback internal_fields_deserializer, | 6305 v8::DeserializeInternalFieldsCallback internal_fields_deserializer, |
| 6306 v8::ExtensionConfiguration* extensions, MaybeLocal<Value> global_object) { | 6306 v8::ExtensionConfiguration* extensions, MaybeLocal<Value> global_object) { |
| 6307 size_t index_including_default_context = context_snapshot_index + 1; | 6307 size_t index_including_default_context = context_snapshot_index + 1; |
| 6308 if (!i::Snapshot::HasContextSnapshot( | 6308 if (!i::Snapshot::HasContextSnapshot( |
| 6309 reinterpret_cast<i::Isolate*>(external_isolate), | 6309 reinterpret_cast<i::Isolate*>(external_isolate), |
| 6310 index_including_default_context)) { | 6310 index_including_default_context)) { |
| (...skipping 16 matching lines...) Expand all Loading... |
| 6327 "v8::Context::NewRemoteContext", | 6327 "v8::Context::NewRemoteContext", |
| 6328 "Global template needs to have access checks enabled."); | 6328 "Global template needs to have access checks enabled."); |
| 6329 i::Handle<i::AccessCheckInfo> access_check_info = i::handle( | 6329 i::Handle<i::AccessCheckInfo> access_check_info = i::handle( |
| 6330 i::AccessCheckInfo::cast(global_constructor->access_check_info()), | 6330 i::AccessCheckInfo::cast(global_constructor->access_check_info()), |
| 6331 isolate); | 6331 isolate); |
| 6332 Utils::ApiCheck(access_check_info->named_interceptor() != nullptr, | 6332 Utils::ApiCheck(access_check_info->named_interceptor() != nullptr, |
| 6333 "v8::Context::NewRemoteContext", | 6333 "v8::Context::NewRemoteContext", |
| 6334 "Global template needs to have access check handlers."); | 6334 "Global template needs to have access check handlers."); |
| 6335 i::Handle<i::JSGlobalProxy> global_proxy = | 6335 i::Handle<i::JSGlobalProxy> global_proxy = |
| 6336 CreateEnvironment<i::JSGlobalProxy>(isolate, nullptr, global_template, | 6336 CreateEnvironment<i::JSGlobalProxy>(isolate, nullptr, global_template, |
| 6337 global_object, 0, nullptr); | 6337 global_object, 0, |
| 6338 DeserializeInternalFieldsCallback()); |
| 6338 if (global_proxy.is_null()) { | 6339 if (global_proxy.is_null()) { |
| 6339 if (isolate->has_pending_exception()) { | 6340 if (isolate->has_pending_exception()) { |
| 6340 isolate->OptionalRescheduleException(true); | 6341 isolate->OptionalRescheduleException(true); |
| 6341 } | 6342 } |
| 6342 return MaybeLocal<Object>(); | 6343 return MaybeLocal<Object>(); |
| 6343 } | 6344 } |
| 6344 return Utils::ToLocal( | 6345 return Utils::ToLocal( |
| 6345 scope.CloseAndEscape(i::Handle<i::JSObject>::cast(global_proxy))); | 6346 scope.CloseAndEscape(i::Handle<i::JSObject>::cast(global_proxy))); |
| 6346 } | 6347 } |
| 6347 | 6348 |
| (...skipping 3639 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9987 Address callback_address = | 9988 Address callback_address = |
| 9988 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); | 9989 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); |
| 9989 VMState<EXTERNAL> state(isolate); | 9990 VMState<EXTERNAL> state(isolate); |
| 9990 ExternalCallbackScope call_scope(isolate, callback_address); | 9991 ExternalCallbackScope call_scope(isolate, callback_address); |
| 9991 callback(info); | 9992 callback(info); |
| 9992 } | 9993 } |
| 9993 | 9994 |
| 9994 | 9995 |
| 9995 } // namespace internal | 9996 } // namespace internal |
| 9996 } // namespace v8 | 9997 } // namespace v8 |
| OLD | NEW |