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

Side by Side Diff: src/api.cc

Issue 2741683004: [rename] Rename internal field to embedder field. (Closed)
Patch Set: [rename] Rename internal field to embedder field. Created 3 years, 9 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 unified diff | Download patch
« no previous file with comments | « include/v8.h ('k') | src/api-natives.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 477 matching lines...) Expand 10 before | Expand all | Expand 10 after
488 488
489 static SnapshotCreatorData* cast(void* data) { 489 static SnapshotCreatorData* cast(void* data) {
490 return reinterpret_cast<SnapshotCreatorData*>(data); 490 return reinterpret_cast<SnapshotCreatorData*>(data);
491 } 491 }
492 492
493 ArrayBufferAllocator allocator_; 493 ArrayBufferAllocator allocator_;
494 Isolate* isolate_; 494 Isolate* isolate_;
495 Persistent<Context> default_context_; 495 Persistent<Context> default_context_;
496 PersistentValueVector<Context> contexts_; 496 PersistentValueVector<Context> contexts_;
497 PersistentValueVector<Template> templates_; 497 PersistentValueVector<Template> templates_;
498 std::vector<SerializeInternalFieldsCallback> internal_fields_serializers_; 498 std::vector<SerializeInternalFieldsCallback> embedder_fields_serializers_;
499 bool created_; 499 bool created_;
500 }; 500 };
501 501
502 } // namespace 502 } // namespace
503 503
504 SnapshotCreator::SnapshotCreator(intptr_t* external_references, 504 SnapshotCreator::SnapshotCreator(intptr_t* external_references,
505 StartupData* existing_snapshot) { 505 StartupData* existing_snapshot) {
506 i::Isolate* internal_isolate = new i::Isolate(true); 506 i::Isolate* internal_isolate = new i::Isolate(true);
507 Isolate* isolate = reinterpret_cast<Isolate*>(internal_isolate); 507 Isolate* isolate = reinterpret_cast<Isolate*>(internal_isolate);
508 SnapshotCreatorData* data = new SnapshotCreatorData(isolate); 508 SnapshotCreatorData* data = new SnapshotCreatorData(isolate);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
547 547
548 size_t SnapshotCreator::AddContext(Local<Context> context, 548 size_t SnapshotCreator::AddContext(Local<Context> context,
549 SerializeInternalFieldsCallback callback) { 549 SerializeInternalFieldsCallback callback) {
550 DCHECK(!context.IsEmpty()); 550 DCHECK(!context.IsEmpty());
551 SnapshotCreatorData* data = SnapshotCreatorData::cast(data_); 551 SnapshotCreatorData* data = SnapshotCreatorData::cast(data_);
552 DCHECK(!data->created_); 552 DCHECK(!data->created_);
553 Isolate* isolate = data->isolate_; 553 Isolate* isolate = data->isolate_;
554 CHECK_EQ(isolate, context->GetIsolate()); 554 CHECK_EQ(isolate, context->GetIsolate());
555 size_t index = static_cast<int>(data->contexts_.Size()); 555 size_t index = static_cast<int>(data->contexts_.Size());
556 data->contexts_.Append(context); 556 data->contexts_.Append(context);
557 data->internal_fields_serializers_.push_back(callback); 557 data->embedder_fields_serializers_.push_back(callback);
558 return index; 558 return index;
559 } 559 }
560 560
561 size_t SnapshotCreator::AddTemplate(Local<Template> template_obj) { 561 size_t SnapshotCreator::AddTemplate(Local<Template> template_obj) {
562 DCHECK(!template_obj.IsEmpty()); 562 DCHECK(!template_obj.IsEmpty());
563 SnapshotCreatorData* data = SnapshotCreatorData::cast(data_); 563 SnapshotCreatorData* data = SnapshotCreatorData::cast(data_);
564 DCHECK(!data->created_); 564 DCHECK(!data->created_);
565 DCHECK_EQ(reinterpret_cast<i::Isolate*>(data->isolate_), 565 DCHECK_EQ(reinterpret_cast<i::Isolate*>(data->isolate_),
566 Utils::OpenHandle(*template_obj)->GetIsolate()); 566 Utils::OpenHandle(*template_obj)->GetIsolate());
567 size_t index = static_cast<int>(data->templates_.Size()); 567 size_t index = static_cast<int>(data->templates_.Size());
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
637 i::ExternalReferenceTable::instance(isolate)->ResetCount(); 637 i::ExternalReferenceTable::instance(isolate)->ResetCount();
638 #endif // DEBUG 638 #endif // DEBUG
639 639
640 i::StartupSerializer startup_serializer(isolate, function_code_handling); 640 i::StartupSerializer startup_serializer(isolate, function_code_handling);
641 startup_serializer.SerializeStrongReferences(); 641 startup_serializer.SerializeStrongReferences();
642 642
643 // Serialize each context with a new partial serializer. 643 // Serialize each context with a new partial serializer.
644 i::List<i::SnapshotData*> context_snapshots(num_additional_contexts + 1); 644 i::List<i::SnapshotData*> context_snapshots(num_additional_contexts + 1);
645 645
646 { 646 {
647 // The default snapshot does not support internal fields. 647 // The default snapshot does not support embedder fields.
648 i::PartialSerializer partial_serializer( 648 i::PartialSerializer partial_serializer(
649 isolate, &startup_serializer, v8::SerializeInternalFieldsCallback()); 649 isolate, &startup_serializer, v8::SerializeInternalFieldsCallback());
650 partial_serializer.Serialize(&default_context, false); 650 partial_serializer.Serialize(&default_context, false);
651 context_snapshots.Add(new i::SnapshotData(&partial_serializer)); 651 context_snapshots.Add(new i::SnapshotData(&partial_serializer));
652 } 652 }
653 653
654 for (int i = 0; i < num_additional_contexts; i++) { 654 for (int i = 0; i < num_additional_contexts; i++) {
655 i::PartialSerializer partial_serializer( 655 i::PartialSerializer partial_serializer(
656 isolate, &startup_serializer, data->internal_fields_serializers_[i]); 656 isolate, &startup_serializer, data->embedder_fields_serializers_[i]);
657 partial_serializer.Serialize(&contexts[i], true); 657 partial_serializer.Serialize(&contexts[i], true);
658 context_snapshots.Add(new i::SnapshotData(&partial_serializer)); 658 context_snapshots.Add(new i::SnapshotData(&partial_serializer));
659 } 659 }
660 660
661 startup_serializer.SerializeWeakReferencesAndDeferred(); 661 startup_serializer.SerializeWeakReferencesAndDeferred();
662 662
663 #ifdef DEBUG 663 #ifdef DEBUG
664 if (i::FLAG_external_reference_stats) { 664 if (i::FLAG_external_reference_stats) {
665 i::ExternalReferenceTable::instance(isolate)->PrintCount(); 665 i::ExternalReferenceTable::instance(isolate)->PrintCount();
666 } 666 }
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
906 #endif // VERIFY_HEAP 906 #endif // VERIFY_HEAP
907 return result.location(); 907 return result.location();
908 } 908 }
909 909
910 void V8::RegisterExternallyReferencedObject(i::Object** object, 910 void V8::RegisterExternallyReferencedObject(i::Object** object,
911 i::Isolate* isolate) { 911 i::Isolate* isolate) {
912 isolate->heap()->RegisterExternallyReferencedObject(object); 912 isolate->heap()->RegisterExternallyReferencedObject(object);
913 } 913 }
914 914
915 void V8::MakeWeak(i::Object** location, void* parameter, 915 void V8::MakeWeak(i::Object** location, void* parameter,
916 int internal_field_index1, int internal_field_index2, 916 int embedder_field_index1, int embedder_field_index2,
917 WeakCallbackInfo<void>::Callback weak_callback) { 917 WeakCallbackInfo<void>::Callback weak_callback) {
918 WeakCallbackType type = WeakCallbackType::kParameter; 918 WeakCallbackType type = WeakCallbackType::kParameter;
919 if (internal_field_index1 == 0) { 919 if (embedder_field_index1 == 0) {
920 if (internal_field_index2 == 1) { 920 if (embedder_field_index2 == 1) {
921 type = WeakCallbackType::kInternalFields; 921 type = WeakCallbackType::kInternalFields;
922 } else { 922 } else {
923 DCHECK_EQ(internal_field_index2, -1); 923 DCHECK_EQ(embedder_field_index2, -1);
924 type = WeakCallbackType::kInternalFields; 924 type = WeakCallbackType::kInternalFields;
925 } 925 }
926 } else { 926 } else {
927 DCHECK_EQ(internal_field_index1, -1); 927 DCHECK_EQ(embedder_field_index1, -1);
928 DCHECK_EQ(internal_field_index2, -1); 928 DCHECK_EQ(embedder_field_index2, -1);
929 } 929 }
930 i::GlobalHandles::MakeWeak(location, parameter, weak_callback, type); 930 i::GlobalHandles::MakeWeak(location, parameter, weak_callback, type);
931 } 931 }
932 932
933 void V8::MakeWeak(i::Object** location, void* parameter, 933 void V8::MakeWeak(i::Object** location, void* parameter,
934 WeakCallbackInfo<void>::Callback weak_callback, 934 WeakCallbackInfo<void>::Callback weak_callback,
935 WeakCallbackType type) { 935 WeakCallbackType type) {
936 i::GlobalHandles::MakeWeak(location, parameter, weak_callback, type); 936 i::GlobalHandles::MakeWeak(location, parameter, weak_callback, type);
937 } 937 }
938 938
(...skipping 25 matching lines...) Expand all
964 964
965 void V8::FromJustIsNothing() { 965 void V8::FromJustIsNothing() {
966 Utils::ApiCheck(false, "v8::FromJust", "Maybe value is Nothing."); 966 Utils::ApiCheck(false, "v8::FromJust", "Maybe value is Nothing.");
967 } 967 }
968 968
969 969
970 void V8::ToLocalEmpty() { 970 void V8::ToLocalEmpty() {
971 Utils::ApiCheck(false, "v8::ToLocalChecked", "Empty MaybeLocal."); 971 Utils::ApiCheck(false, "v8::ToLocalChecked", "Empty MaybeLocal.");
972 } 972 }
973 973
974
975 void V8::InternalFieldOutOfBounds(int index) { 974 void V8::InternalFieldOutOfBounds(int index) {
976 Utils::ApiCheck(0 <= index && index < kInternalFieldsInWeakCallback, 975 Utils::ApiCheck(0 <= index && index < kInternalFieldsInWeakCallback,
977 "WeakCallbackInfo::GetInternalField", 976 "WeakCallbackInfo::GetInternalField",
978 "Internal field out of bounds."); 977 "Internal field out of bounds.");
979 } 978 }
980 979
981 980
982 // --- H a n d l e s --- 981 // --- H a n d l e s ---
983 982
984 983
(...skipping 869 matching lines...) Expand 10 before | Expand all | Expand 10 after
1854 i::Handle<i::CallHandlerInfo> obj = 1853 i::Handle<i::CallHandlerInfo> obj =
1855 i::Handle<i::CallHandlerInfo>::cast(struct_obj); 1854 i::Handle<i::CallHandlerInfo>::cast(struct_obj);
1856 SET_FIELD_WRAPPED(obj, set_callback, callback); 1855 SET_FIELD_WRAPPED(obj, set_callback, callback);
1857 if (data.IsEmpty()) { 1856 if (data.IsEmpty()) {
1858 data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate)); 1857 data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate));
1859 } 1858 }
1860 obj->set_data(*Utils::OpenHandle(*data)); 1859 obj->set_data(*Utils::OpenHandle(*data));
1861 cons->set_instance_call_handler(*obj); 1860 cons->set_instance_call_handler(*obj);
1862 } 1861 }
1863 1862
1864
1865 int ObjectTemplate::InternalFieldCount() { 1863 int ObjectTemplate::InternalFieldCount() {
1866 return Utils::OpenHandle(this)->internal_field_count(); 1864 return Utils::OpenHandle(this)->embedder_field_count();
1867 } 1865 }
1868 1866
1869
1870 void ObjectTemplate::SetInternalFieldCount(int value) { 1867 void ObjectTemplate::SetInternalFieldCount(int value) {
1871 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); 1868 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
1872 if (!Utils::ApiCheck(i::Smi::IsValid(value), 1869 if (!Utils::ApiCheck(i::Smi::IsValid(value),
1873 "v8::ObjectTemplate::SetInternalFieldCount()", 1870 "v8::ObjectTemplate::SetInternalFieldCount()",
1874 "Invalid internal field count")) { 1871 "Invalid embedder field count")) {
1875 return; 1872 return;
1876 } 1873 }
1877 ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate); 1874 ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
1878 if (value > 0) { 1875 if (value > 0) {
1879 // The internal field count is set by the constructor function's 1876 // The embedder field count is set by the constructor function's
1880 // construct code, so we ensure that there is a constructor 1877 // construct code, so we ensure that there is a constructor
1881 // function to do the setting. 1878 // function to do the setting.
1882 EnsureConstructor(isolate, this); 1879 EnsureConstructor(isolate, this);
1883 } 1880 }
1884 Utils::OpenHandle(this)->set_internal_field_count(value); 1881 Utils::OpenHandle(this)->set_embedder_field_count(value);
1885 } 1882 }
1886 1883
1887 bool ObjectTemplate::IsImmutableProto() { 1884 bool ObjectTemplate::IsImmutableProto() {
1888 return Utils::OpenHandle(this)->immutable_proto(); 1885 return Utils::OpenHandle(this)->immutable_proto();
1889 } 1886 }
1890 1887
1891 void ObjectTemplate::SetImmutableProto() { 1888 void ObjectTemplate::SetImmutableProto() {
1892 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); 1889 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
1893 ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate); 1890 ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
1894 Utils::OpenHandle(this)->set_immutable_proto(true); 1891 Utils::OpenHandle(this)->set_immutable_proto(true);
(...skipping 4135 matching lines...) Expand 10 before | Expand all | Expand 10 after
6030 6027
6031 uint32_t Uint32::Value() const { 6028 uint32_t Uint32::Value() const {
6032 i::Handle<i::Object> obj = Utils::OpenHandle(this); 6029 i::Handle<i::Object> obj = Utils::OpenHandle(this);
6033 if (obj->IsSmi()) { 6030 if (obj->IsSmi()) {
6034 return i::Smi::cast(*obj)->value(); 6031 return i::Smi::cast(*obj)->value();
6035 } else { 6032 } else {
6036 return static_cast<uint32_t>(obj->Number()); 6033 return static_cast<uint32_t>(obj->Number());
6037 } 6034 }
6038 } 6035 }
6039 6036
6040
6041 int v8::Object::InternalFieldCount() { 6037 int v8::Object::InternalFieldCount() {
6042 i::Handle<i::JSReceiver> self = Utils::OpenHandle(this); 6038 i::Handle<i::JSReceiver> self = Utils::OpenHandle(this);
6043 if (!self->IsJSObject()) return 0; 6039 if (!self->IsJSObject()) return 0;
6044 return i::Handle<i::JSObject>::cast(self)->GetInternalFieldCount(); 6040 return i::Handle<i::JSObject>::cast(self)->GetEmbedderFieldCount();
6045 } 6041 }
6046 6042
6047
6048 static bool InternalFieldOK(i::Handle<i::JSReceiver> obj, int index, 6043 static bool InternalFieldOK(i::Handle<i::JSReceiver> obj, int index,
6049 const char* location) { 6044 const char* location) {
6050 return Utils::ApiCheck( 6045 return Utils::ApiCheck(
6051 obj->IsJSObject() && 6046 obj->IsJSObject() &&
6052 (index < i::Handle<i::JSObject>::cast(obj)->GetInternalFieldCount()), 6047 (index < i::Handle<i::JSObject>::cast(obj)->GetEmbedderFieldCount()),
6053 location, "Internal field out of bounds"); 6048 location, "Internal field out of bounds");
6054 } 6049 }
6055 6050
6056
6057 Local<Value> v8::Object::SlowGetInternalField(int index) { 6051 Local<Value> v8::Object::SlowGetInternalField(int index) {
6058 i::Handle<i::JSReceiver> obj = Utils::OpenHandle(this); 6052 i::Handle<i::JSReceiver> obj = Utils::OpenHandle(this);
6059 const char* location = "v8::Object::GetInternalField()"; 6053 const char* location = "v8::Object::GetInternalField()";
6060 if (!InternalFieldOK(obj, index, location)) return Local<Value>(); 6054 if (!InternalFieldOK(obj, index, location)) return Local<Value>();
6061 i::Handle<i::Object> value( 6055 i::Handle<i::Object> value(
6062 i::Handle<i::JSObject>::cast(obj)->GetInternalField(index), 6056 i::Handle<i::JSObject>::cast(obj)->GetEmbedderField(index),
6063 obj->GetIsolate()); 6057 obj->GetIsolate());
6064 return Utils::ToLocal(value); 6058 return Utils::ToLocal(value);
6065 } 6059 }
6066 6060
6067
6068 void v8::Object::SetInternalField(int index, v8::Local<Value> value) { 6061 void v8::Object::SetInternalField(int index, v8::Local<Value> value) {
6069 i::Handle<i::JSReceiver> obj = Utils::OpenHandle(this); 6062 i::Handle<i::JSReceiver> obj = Utils::OpenHandle(this);
6070 const char* location = "v8::Object::SetInternalField()"; 6063 const char* location = "v8::Object::SetInternalField()";
6071 if (!InternalFieldOK(obj, index, location)) return; 6064 if (!InternalFieldOK(obj, index, location)) return;
6072 i::Handle<i::Object> val = Utils::OpenHandle(*value); 6065 i::Handle<i::Object> val = Utils::OpenHandle(*value);
6073 i::Handle<i::JSObject>::cast(obj)->SetInternalField(index, *val); 6066 i::Handle<i::JSObject>::cast(obj)->SetEmbedderField(index, *val);
6074 } 6067 }
6075 6068
6076
6077 void* v8::Object::SlowGetAlignedPointerFromInternalField(int index) { 6069 void* v8::Object::SlowGetAlignedPointerFromInternalField(int index) {
6078 i::Handle<i::JSReceiver> obj = Utils::OpenHandle(this); 6070 i::Handle<i::JSReceiver> obj = Utils::OpenHandle(this);
6079 const char* location = "v8::Object::GetAlignedPointerFromInternalField()"; 6071 const char* location = "v8::Object::GetAlignedPointerFromInternalField()";
6080 if (!InternalFieldOK(obj, index, location)) return NULL; 6072 if (!InternalFieldOK(obj, index, location)) return NULL;
6081 return DecodeSmiToAligned( 6073 return DecodeSmiToAligned(
6082 i::Handle<i::JSObject>::cast(obj)->GetInternalField(index), location); 6074 i::Handle<i::JSObject>::cast(obj)->GetEmbedderField(index), location);
6083 } 6075 }
6084 6076
6085 void v8::Object::SetAlignedPointerInInternalField(int index, void* value) { 6077 void v8::Object::SetAlignedPointerInInternalField(int index, void* value) {
6086 i::Handle<i::JSReceiver> obj = Utils::OpenHandle(this); 6078 i::Handle<i::JSReceiver> obj = Utils::OpenHandle(this);
6087 const char* location = "v8::Object::SetAlignedPointerInInternalField()"; 6079 const char* location = "v8::Object::SetAlignedPointerInInternalField()";
6088 if (!InternalFieldOK(obj, index, location)) return; 6080 if (!InternalFieldOK(obj, index, location)) return;
6089 i::Handle<i::JSObject>::cast(obj) 6081 i::Handle<i::JSObject>::cast(obj)->SetEmbedderField(
6090 ->SetInternalField(index, EncodeAlignedAsSmi(value, location)); 6082 index, EncodeAlignedAsSmi(value, location));
6091 DCHECK_EQ(value, GetAlignedPointerFromInternalField(index)); 6083 DCHECK_EQ(value, GetAlignedPointerFromInternalField(index));
6092 } 6084 }
6093 6085
6094 void v8::Object::SetAlignedPointerInInternalFields(int argc, int indices[], 6086 void v8::Object::SetAlignedPointerInInternalFields(int argc, int indices[],
6095 void* values[]) { 6087 void* values[]) {
6096 i::Handle<i::JSReceiver> obj = Utils::OpenHandle(this); 6088 i::Handle<i::JSReceiver> obj = Utils::OpenHandle(this);
6097 const char* location = "v8::Object::SetAlignedPointerInInternalFields()"; 6089 const char* location = "v8::Object::SetAlignedPointerInInternalFields()";
6098 i::DisallowHeapAllocation no_gc; 6090 i::DisallowHeapAllocation no_gc;
6099 i::JSObject* object = i::JSObject::cast(*obj); 6091 i::JSObject* object = i::JSObject::cast(*obj);
6100 int nof_internal_fields = object->GetInternalFieldCount(); 6092 int nof_embedder_fields = object->GetEmbedderFieldCount();
6101 for (int i = 0; i < argc; i++) { 6093 for (int i = 0; i < argc; i++) {
6102 int index = indices[i]; 6094 int index = indices[i];
6103 if (!Utils::ApiCheck(index < nof_internal_fields, location, 6095 if (!Utils::ApiCheck(index < nof_embedder_fields, location,
6104 "Internal field out of bounds")) { 6096 "Internal field out of bounds")) {
6105 return; 6097 return;
6106 } 6098 }
6107 void* value = values[i]; 6099 void* value = values[i];
6108 object->SetInternalField(index, EncodeAlignedAsSmi(value, location)); 6100 object->SetEmbedderField(index, EncodeAlignedAsSmi(value, location));
6109 DCHECK_EQ(value, GetAlignedPointerFromInternalField(index)); 6101 DCHECK_EQ(value, GetAlignedPointerFromInternalField(index));
6110 } 6102 }
6111 } 6103 }
6112 6104
6113 static void* ExternalValue(i::Object* obj) { 6105 static void* ExternalValue(i::Object* obj) {
6114 // Obscure semantics for undefined, but somehow checked in our unit tests... 6106 // Obscure semantics for undefined, but somehow checked in our unit tests...
6115 if (!obj->IsSmi() && 6107 if (!obj->IsSmi() &&
6116 obj->IsUndefined(i::HeapObject::cast(obj)->GetIsolate())) { 6108 obj->IsUndefined(i::HeapObject::cast(obj)->GetIsolate())) {
6117 return NULL; 6109 return NULL;
6118 } 6110 }
6119 i::Object* foreign = i::JSObject::cast(obj)->GetInternalField(0); 6111 i::Object* foreign = i::JSObject::cast(obj)->GetEmbedderField(0);
6120 return i::Foreign::cast(foreign)->foreign_address(); 6112 return i::Foreign::cast(foreign)->foreign_address();
6121 } 6113 }
6122 6114
6123 6115
6124 // --- E n v i r o n m e n t --- 6116 // --- E n v i r o n m e n t ---
6125 6117
6126 6118
6127 void v8::V8::InitializePlatform(Platform* platform) { 6119 void v8::V8::InitializePlatform(Platform* platform) {
6128 i::V8::InitializePlatform(platform); 6120 i::V8::InitializePlatform(platform);
6129 } 6121 }
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
6225 6217
6226 template <typename ObjectType> 6218 template <typename ObjectType>
6227 struct InvokeBootstrapper; 6219 struct InvokeBootstrapper;
6228 6220
6229 template <> 6221 template <>
6230 struct InvokeBootstrapper<i::Context> { 6222 struct InvokeBootstrapper<i::Context> {
6231 i::Handle<i::Context> Invoke( 6223 i::Handle<i::Context> Invoke(
6232 i::Isolate* isolate, i::MaybeHandle<i::JSGlobalProxy> maybe_global_proxy, 6224 i::Isolate* isolate, i::MaybeHandle<i::JSGlobalProxy> maybe_global_proxy,
6233 v8::Local<v8::ObjectTemplate> global_object_template, 6225 v8::Local<v8::ObjectTemplate> global_object_template,
6234 v8::ExtensionConfiguration* extensions, size_t context_snapshot_index, 6226 v8::ExtensionConfiguration* extensions, size_t context_snapshot_index,
6235 v8::DeserializeInternalFieldsCallback internal_fields_deserializer) { 6227 v8::DeserializeInternalFieldsCallback embedder_fields_deserializer) {
6236 return isolate->bootstrapper()->CreateEnvironment( 6228 return isolate->bootstrapper()->CreateEnvironment(
6237 maybe_global_proxy, global_object_template, extensions, 6229 maybe_global_proxy, global_object_template, extensions,
6238 context_snapshot_index, internal_fields_deserializer); 6230 context_snapshot_index, embedder_fields_deserializer);
6239 } 6231 }
6240 }; 6232 };
6241 6233
6242 template <> 6234 template <>
6243 struct InvokeBootstrapper<i::JSGlobalProxy> { 6235 struct InvokeBootstrapper<i::JSGlobalProxy> {
6244 i::Handle<i::JSGlobalProxy> Invoke( 6236 i::Handle<i::JSGlobalProxy> Invoke(
6245 i::Isolate* isolate, i::MaybeHandle<i::JSGlobalProxy> maybe_global_proxy, 6237 i::Isolate* isolate, i::MaybeHandle<i::JSGlobalProxy> maybe_global_proxy,
6246 v8::Local<v8::ObjectTemplate> global_object_template, 6238 v8::Local<v8::ObjectTemplate> global_object_template,
6247 v8::ExtensionConfiguration* extensions, size_t context_snapshot_index, 6239 v8::ExtensionConfiguration* extensions, size_t context_snapshot_index,
6248 v8::DeserializeInternalFieldsCallback internal_fields_deserializer) { 6240 v8::DeserializeInternalFieldsCallback embedder_fields_deserializer) {
6249 USE(extensions); 6241 USE(extensions);
6250 USE(context_snapshot_index); 6242 USE(context_snapshot_index);
6251 return isolate->bootstrapper()->NewRemoteContext(maybe_global_proxy, 6243 return isolate->bootstrapper()->NewRemoteContext(maybe_global_proxy,
6252 global_object_template); 6244 global_object_template);
6253 } 6245 }
6254 }; 6246 };
6255 6247
6256 template <typename ObjectType> 6248 template <typename ObjectType>
6257 static i::Handle<ObjectType> CreateEnvironment( 6249 static i::Handle<ObjectType> CreateEnvironment(
6258 i::Isolate* isolate, v8::ExtensionConfiguration* extensions, 6250 i::Isolate* isolate, v8::ExtensionConfiguration* extensions,
6259 v8::MaybeLocal<ObjectTemplate> maybe_global_template, 6251 v8::MaybeLocal<ObjectTemplate> maybe_global_template,
6260 v8::MaybeLocal<Value> maybe_global_proxy, size_t context_snapshot_index, 6252 v8::MaybeLocal<Value> maybe_global_proxy, size_t context_snapshot_index,
6261 v8::DeserializeInternalFieldsCallback internal_fields_deserializer) { 6253 v8::DeserializeInternalFieldsCallback embedder_fields_deserializer) {
6262 i::Handle<ObjectType> result; 6254 i::Handle<ObjectType> result;
6263 6255
6264 { 6256 {
6265 ENTER_V8_FOR_NEW_CONTEXT(isolate); 6257 ENTER_V8_FOR_NEW_CONTEXT(isolate);
6266 v8::Local<ObjectTemplate> proxy_template; 6258 v8::Local<ObjectTemplate> proxy_template;
6267 i::Handle<i::FunctionTemplateInfo> proxy_constructor; 6259 i::Handle<i::FunctionTemplateInfo> proxy_constructor;
6268 i::Handle<i::FunctionTemplateInfo> global_constructor; 6260 i::Handle<i::FunctionTemplateInfo> global_constructor;
6269 i::Handle<i::Object> named_interceptor( 6261 i::Handle<i::Object> named_interceptor(
6270 isolate->factory()->undefined_value()); 6262 isolate->factory()->undefined_value());
6271 i::Handle<i::Object> indexed_interceptor( 6263 i::Handle<i::Object> indexed_interceptor(
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
6324 6316
6325 i::MaybeHandle<i::JSGlobalProxy> maybe_proxy; 6317 i::MaybeHandle<i::JSGlobalProxy> maybe_proxy;
6326 if (!maybe_global_proxy.IsEmpty()) { 6318 if (!maybe_global_proxy.IsEmpty()) {
6327 maybe_proxy = i::Handle<i::JSGlobalProxy>::cast( 6319 maybe_proxy = i::Handle<i::JSGlobalProxy>::cast(
6328 Utils::OpenHandle(*maybe_global_proxy.ToLocalChecked())); 6320 Utils::OpenHandle(*maybe_global_proxy.ToLocalChecked()));
6329 } 6321 }
6330 // Create the environment. 6322 // Create the environment.
6331 InvokeBootstrapper<ObjectType> invoke; 6323 InvokeBootstrapper<ObjectType> invoke;
6332 result = 6324 result =
6333 invoke.Invoke(isolate, maybe_proxy, proxy_template, extensions, 6325 invoke.Invoke(isolate, maybe_proxy, proxy_template, extensions,
6334 context_snapshot_index, internal_fields_deserializer); 6326 context_snapshot_index, embedder_fields_deserializer);
6335 6327
6336 // Restore the access check info and interceptors on the global template. 6328 // Restore the access check info and interceptors on the global template.
6337 if (!maybe_global_template.IsEmpty()) { 6329 if (!maybe_global_template.IsEmpty()) {
6338 DCHECK(!global_constructor.is_null()); 6330 DCHECK(!global_constructor.is_null());
6339 DCHECK(!proxy_constructor.is_null()); 6331 DCHECK(!proxy_constructor.is_null());
6340 global_constructor->set_access_check_info( 6332 global_constructor->set_access_check_info(
6341 proxy_constructor->access_check_info()); 6333 proxy_constructor->access_check_info());
6342 global_constructor->set_needs_access_check( 6334 global_constructor->set_needs_access_check(
6343 proxy_constructor->needs_access_check()); 6335 proxy_constructor->needs_access_check());
6344 global_constructor->set_named_property_handler(*named_interceptor); 6336 global_constructor->set_named_property_handler(*named_interceptor);
6345 global_constructor->set_indexed_property_handler(*indexed_interceptor); 6337 global_constructor->set_indexed_property_handler(*indexed_interceptor);
6346 } 6338 }
6347 } 6339 }
6348 // Leave V8. 6340 // Leave V8.
6349 6341
6350 return result; 6342 return result;
6351 } 6343 }
6352 6344
6353 Local<Context> NewContext( 6345 Local<Context> NewContext(
6354 v8::Isolate* external_isolate, v8::ExtensionConfiguration* extensions, 6346 v8::Isolate* external_isolate, v8::ExtensionConfiguration* extensions,
6355 v8::MaybeLocal<ObjectTemplate> global_template, 6347 v8::MaybeLocal<ObjectTemplate> global_template,
6356 v8::MaybeLocal<Value> global_object, size_t context_snapshot_index, 6348 v8::MaybeLocal<Value> global_object, size_t context_snapshot_index,
6357 v8::DeserializeInternalFieldsCallback internal_fields_deserializer) { 6349 v8::DeserializeInternalFieldsCallback embedder_fields_deserializer) {
6358 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(external_isolate); 6350 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(external_isolate);
6359 TRACE_EVENT_CALL_STATS_SCOPED(isolate, "v8", "V8.NewContext"); 6351 TRACE_EVENT_CALL_STATS_SCOPED(isolate, "v8", "V8.NewContext");
6360 LOG_API(isolate, Context, New); 6352 LOG_API(isolate, Context, New);
6361 i::HandleScope scope(isolate); 6353 i::HandleScope scope(isolate);
6362 ExtensionConfiguration no_extensions; 6354 ExtensionConfiguration no_extensions;
6363 if (extensions == NULL) extensions = &no_extensions; 6355 if (extensions == NULL) extensions = &no_extensions;
6364 i::Handle<i::Context> env = CreateEnvironment<i::Context>( 6356 i::Handle<i::Context> env = CreateEnvironment<i::Context>(
6365 isolate, extensions, global_template, global_object, 6357 isolate, extensions, global_template, global_object,
6366 context_snapshot_index, internal_fields_deserializer); 6358 context_snapshot_index, embedder_fields_deserializer);
6367 if (env.is_null()) { 6359 if (env.is_null()) {
6368 if (isolate->has_pending_exception()) isolate->clear_pending_exception(); 6360 if (isolate->has_pending_exception()) isolate->clear_pending_exception();
6369 return Local<Context>(); 6361 return Local<Context>();
6370 } 6362 }
6371 return Utils::ToLocal(scope.CloseAndEscape(env)); 6363 return Utils::ToLocal(scope.CloseAndEscape(env));
6372 } 6364 }
6373 6365
6374 Local<Context> v8::Context::New(v8::Isolate* external_isolate, 6366 Local<Context> v8::Context::New(v8::Isolate* external_isolate,
6375 v8::ExtensionConfiguration* extensions, 6367 v8::ExtensionConfiguration* extensions,
6376 v8::MaybeLocal<ObjectTemplate> global_template, 6368 v8::MaybeLocal<ObjectTemplate> global_template,
6377 v8::MaybeLocal<Value> global_object) { 6369 v8::MaybeLocal<Value> global_object) {
6378 return NewContext(external_isolate, extensions, global_template, 6370 return NewContext(external_isolate, extensions, global_template,
6379 global_object, 0, DeserializeInternalFieldsCallback()); 6371 global_object, 0, DeserializeInternalFieldsCallback());
6380 } 6372 }
6381 6373
6382 MaybeLocal<Context> v8::Context::FromSnapshot( 6374 MaybeLocal<Context> v8::Context::FromSnapshot(
6383 v8::Isolate* external_isolate, size_t context_snapshot_index, 6375 v8::Isolate* external_isolate, size_t context_snapshot_index,
6384 v8::DeserializeInternalFieldsCallback internal_fields_deserializer, 6376 v8::DeserializeInternalFieldsCallback embedder_fields_deserializer,
6385 v8::ExtensionConfiguration* extensions, MaybeLocal<Value> global_object) { 6377 v8::ExtensionConfiguration* extensions, MaybeLocal<Value> global_object) {
6386 size_t index_including_default_context = context_snapshot_index + 1; 6378 size_t index_including_default_context = context_snapshot_index + 1;
6387 if (!i::Snapshot::HasContextSnapshot( 6379 if (!i::Snapshot::HasContextSnapshot(
6388 reinterpret_cast<i::Isolate*>(external_isolate), 6380 reinterpret_cast<i::Isolate*>(external_isolate),
6389 index_including_default_context)) { 6381 index_including_default_context)) {
6390 return MaybeLocal<Context>(); 6382 return MaybeLocal<Context>();
6391 } 6383 }
6392 return NewContext(external_isolate, extensions, MaybeLocal<ObjectTemplate>(), 6384 return NewContext(external_isolate, extensions, MaybeLocal<ObjectTemplate>(),
6393 global_object, index_including_default_context, 6385 global_object, index_including_default_context,
6394 internal_fields_deserializer); 6386 embedder_fields_deserializer);
6395 } 6387 }
6396 6388
6397 MaybeLocal<Object> v8::Context::NewRemoteContext( 6389 MaybeLocal<Object> v8::Context::NewRemoteContext(
6398 v8::Isolate* external_isolate, v8::Local<ObjectTemplate> global_template, 6390 v8::Isolate* external_isolate, v8::Local<ObjectTemplate> global_template,
6399 v8::MaybeLocal<v8::Value> global_object) { 6391 v8::MaybeLocal<v8::Value> global_object) {
6400 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(external_isolate); 6392 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(external_isolate);
6401 LOG_API(isolate, Context, NewRemoteContext); 6393 LOG_API(isolate, Context, NewRemoteContext);
6402 i::HandleScope scope(isolate); 6394 i::HandleScope scope(isolate);
6403 i::Handle<i::FunctionTemplateInfo> global_constructor = 6395 i::Handle<i::FunctionTemplateInfo> global_constructor =
6404 EnsureConstructor(isolate, *global_template); 6396 EnsureConstructor(isolate, *global_template);
(...skipping 1100 matching lines...) Expand 10 before | Expand all | Expand 10 after
7505 has_pending_exception = 7497 has_pending_exception =
7506 !ToLocal<Proxy>(i::JSProxy::New(isolate, target, handler), &result); 7498 !ToLocal<Proxy>(i::JSProxy::New(isolate, target, handler), &result);
7507 RETURN_ON_FAILED_EXECUTION(Proxy); 7499 RETURN_ON_FAILED_EXECUTION(Proxy);
7508 RETURN_ESCAPED(result); 7500 RETURN_ESCAPED(result);
7509 } 7501 }
7510 7502
7511 Local<String> WasmCompiledModule::GetWasmWireBytes() { 7503 Local<String> WasmCompiledModule::GetWasmWireBytes() {
7512 i::Handle<i::JSObject> obj = 7504 i::Handle<i::JSObject> obj =
7513 i::Handle<i::JSObject>::cast(Utils::OpenHandle(this)); 7505 i::Handle<i::JSObject>::cast(Utils::OpenHandle(this));
7514 i::Handle<i::WasmCompiledModule> compiled_part = 7506 i::Handle<i::WasmCompiledModule> compiled_part =
7515 i::handle(i::WasmCompiledModule::cast(obj->GetInternalField(0))); 7507 i::handle(i::WasmCompiledModule::cast(obj->GetEmbedderField(0)));
7516 i::Handle<i::String> wire_bytes(compiled_part->module_bytes()); 7508 i::Handle<i::String> wire_bytes(compiled_part->module_bytes());
7517 return Local<String>::Cast(Utils::ToLocal(wire_bytes)); 7509 return Local<String>::Cast(Utils::ToLocal(wire_bytes));
7518 } 7510 }
7519 7511
7520 WasmCompiledModule::SerializedModule WasmCompiledModule::Serialize() { 7512 WasmCompiledModule::SerializedModule WasmCompiledModule::Serialize() {
7521 i::Handle<i::JSObject> obj = 7513 i::Handle<i::JSObject> obj =
7522 i::Handle<i::JSObject>::cast(Utils::OpenHandle(this)); 7514 i::Handle<i::JSObject>::cast(Utils::OpenHandle(this));
7523 i::Handle<i::WasmCompiledModule> compiled_part = 7515 i::Handle<i::WasmCompiledModule> compiled_part =
7524 i::handle(i::WasmCompiledModule::cast(obj->GetInternalField(0))); 7516 i::handle(i::WasmCompiledModule::cast(obj->GetEmbedderField(0)));
7525 7517
7526 std::unique_ptr<i::ScriptData> script_data = 7518 std::unique_ptr<i::ScriptData> script_data =
7527 i::WasmCompiledModuleSerializer::SerializeWasmModule(obj->GetIsolate(), 7519 i::WasmCompiledModuleSerializer::SerializeWasmModule(obj->GetIsolate(),
7528 compiled_part); 7520 compiled_part);
7529 script_data->ReleaseDataOwnership(); 7521 script_data->ReleaseDataOwnership();
7530 7522
7531 size_t size = static_cast<size_t>(script_data->length()); 7523 size_t size = static_cast<size_t>(script_data->length());
7532 return {std::unique_ptr<const uint8_t[]>(script_data->data()), size}; 7524 return {std::unique_ptr<const uint8_t[]>(script_data->data()), size};
7533 } 7525 }
7534 7526
(...skipping 2718 matching lines...) Expand 10 before | Expand all | Expand 10 after
10253 Address callback_address = 10245 Address callback_address =
10254 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); 10246 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback));
10255 VMState<EXTERNAL> state(isolate); 10247 VMState<EXTERNAL> state(isolate);
10256 ExternalCallbackScope call_scope(isolate, callback_address); 10248 ExternalCallbackScope call_scope(isolate, callback_address);
10257 callback(info); 10249 callback(info);
10258 } 10250 }
10259 10251
10260 10252
10261 } // namespace internal 10253 } // namespace internal
10262 } // namespace v8 10254 } // namespace v8
OLDNEW
« no previous file with comments | « include/v8.h ('k') | src/api-natives.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698