| 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 478 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 489 | 489 |
| 490 static SnapshotCreatorData* cast(void* data) { | 490 static SnapshotCreatorData* cast(void* data) { |
| 491 return reinterpret_cast<SnapshotCreatorData*>(data); | 491 return reinterpret_cast<SnapshotCreatorData*>(data); |
| 492 } | 492 } |
| 493 | 493 |
| 494 ArrayBufferAllocator allocator_; | 494 ArrayBufferAllocator allocator_; |
| 495 Isolate* isolate_; | 495 Isolate* isolate_; |
| 496 Persistent<Context> default_context_; | 496 Persistent<Context> default_context_; |
| 497 PersistentValueVector<Context> contexts_; | 497 PersistentValueVector<Context> contexts_; |
| 498 PersistentValueVector<Template> templates_; | 498 PersistentValueVector<Template> templates_; |
| 499 std::vector<SerializeInternalFieldsCallback> internal_fields_serializers_; | 499 std::vector<SerializeEmbedderFieldsCallback> embedder_fields_serializers_; |
| 500 bool created_; | 500 bool created_; |
| 501 }; | 501 }; |
| 502 | 502 |
| 503 } // namespace | 503 } // namespace |
| 504 | 504 |
| 505 SnapshotCreator::SnapshotCreator(intptr_t* external_references, | 505 SnapshotCreator::SnapshotCreator(intptr_t* external_references, |
| 506 StartupData* existing_snapshot) { | 506 StartupData* existing_snapshot) { |
| 507 i::Isolate* internal_isolate = new i::Isolate(true); | 507 i::Isolate* internal_isolate = new i::Isolate(true); |
| 508 Isolate* isolate = reinterpret_cast<Isolate*>(internal_isolate); | 508 Isolate* isolate = reinterpret_cast<Isolate*>(internal_isolate); |
| 509 SnapshotCreatorData* data = new SnapshotCreatorData(isolate); | 509 SnapshotCreatorData* data = new SnapshotCreatorData(isolate); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 540 DCHECK(!context.IsEmpty()); | 540 DCHECK(!context.IsEmpty()); |
| 541 SnapshotCreatorData* data = SnapshotCreatorData::cast(data_); | 541 SnapshotCreatorData* data = SnapshotCreatorData::cast(data_); |
| 542 DCHECK(!data->created_); | 542 DCHECK(!data->created_); |
| 543 DCHECK(data->default_context_.IsEmpty()); | 543 DCHECK(data->default_context_.IsEmpty()); |
| 544 Isolate* isolate = data->isolate_; | 544 Isolate* isolate = data->isolate_; |
| 545 CHECK_EQ(isolate, context->GetIsolate()); | 545 CHECK_EQ(isolate, context->GetIsolate()); |
| 546 data->default_context_.Reset(isolate, context); | 546 data->default_context_.Reset(isolate, context); |
| 547 } | 547 } |
| 548 | 548 |
| 549 size_t SnapshotCreator::AddContext(Local<Context> context, | 549 size_t SnapshotCreator::AddContext(Local<Context> context, |
| 550 SerializeInternalFieldsCallback callback) { | 550 SerializeEmbedderFieldsCallback callback) { |
| 551 DCHECK(!context.IsEmpty()); | 551 DCHECK(!context.IsEmpty()); |
| 552 SnapshotCreatorData* data = SnapshotCreatorData::cast(data_); | 552 SnapshotCreatorData* data = SnapshotCreatorData::cast(data_); |
| 553 DCHECK(!data->created_); | 553 DCHECK(!data->created_); |
| 554 Isolate* isolate = data->isolate_; | 554 Isolate* isolate = data->isolate_; |
| 555 CHECK_EQ(isolate, context->GetIsolate()); | 555 CHECK_EQ(isolate, context->GetIsolate()); |
| 556 size_t index = static_cast<int>(data->contexts_.Size()); | 556 size_t index = static_cast<int>(data->contexts_.Size()); |
| 557 data->contexts_.Append(context); | 557 data->contexts_.Append(context); |
| 558 data->internal_fields_serializers_.push_back(callback); | 558 data->embedder_fields_serializers_.push_back(callback); |
| 559 return index; | 559 return index; |
| 560 } | 560 } |
| 561 | 561 |
| 562 size_t SnapshotCreator::AddTemplate(Local<Template> template_obj) { | 562 size_t SnapshotCreator::AddTemplate(Local<Template> template_obj) { |
| 563 DCHECK(!template_obj.IsEmpty()); | 563 DCHECK(!template_obj.IsEmpty()); |
| 564 SnapshotCreatorData* data = SnapshotCreatorData::cast(data_); | 564 SnapshotCreatorData* data = SnapshotCreatorData::cast(data_); |
| 565 DCHECK(!data->created_); | 565 DCHECK(!data->created_); |
| 566 DCHECK_EQ(reinterpret_cast<i::Isolate*>(data->isolate_), | 566 DCHECK_EQ(reinterpret_cast<i::Isolate*>(data->isolate_), |
| 567 Utils::OpenHandle(*template_obj)->GetIsolate()); | 567 Utils::OpenHandle(*template_obj)->GetIsolate()); |
| 568 size_t index = static_cast<int>(data->templates_.Size()); | 568 size_t index = static_cast<int>(data->templates_.Size()); |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 630 i::ExternalReferenceTable::instance(isolate)->ResetCount(); | 630 i::ExternalReferenceTable::instance(isolate)->ResetCount(); |
| 631 #endif // DEBUG | 631 #endif // DEBUG |
| 632 | 632 |
| 633 i::StartupSerializer startup_serializer(isolate, function_code_handling); | 633 i::StartupSerializer startup_serializer(isolate, function_code_handling); |
| 634 startup_serializer.SerializeStrongReferences(); | 634 startup_serializer.SerializeStrongReferences(); |
| 635 | 635 |
| 636 // Serialize each context with a new partial serializer. | 636 // Serialize each context with a new partial serializer. |
| 637 i::List<i::SnapshotData*> context_snapshots(num_additional_contexts + 1); | 637 i::List<i::SnapshotData*> context_snapshots(num_additional_contexts + 1); |
| 638 | 638 |
| 639 { | 639 { |
| 640 // The default snapshot does not support internal fields. | 640 // The default snapshot does not support embedder fields. |
| 641 i::PartialSerializer partial_serializer( | 641 i::PartialSerializer partial_serializer( |
| 642 isolate, &startup_serializer, v8::SerializeInternalFieldsCallback()); | 642 isolate, &startup_serializer, v8::SerializeEmbedderFieldsCallback()); |
| 643 partial_serializer.Serialize(&default_context, false); | 643 partial_serializer.Serialize(&default_context, false); |
| 644 context_snapshots.Add(new i::SnapshotData(&partial_serializer)); | 644 context_snapshots.Add(new i::SnapshotData(&partial_serializer)); |
| 645 } | 645 } |
| 646 | 646 |
| 647 for (int i = 0; i < num_additional_contexts; i++) { | 647 for (int i = 0; i < num_additional_contexts; i++) { |
| 648 i::PartialSerializer partial_serializer( | 648 i::PartialSerializer partial_serializer( |
| 649 isolate, &startup_serializer, data->internal_fields_serializers_[i]); | 649 isolate, &startup_serializer, data->embedder_fields_serializers_[i]); |
| 650 partial_serializer.Serialize(&contexts[i], true); | 650 partial_serializer.Serialize(&contexts[i], true); |
| 651 context_snapshots.Add(new i::SnapshotData(&partial_serializer)); | 651 context_snapshots.Add(new i::SnapshotData(&partial_serializer)); |
| 652 } | 652 } |
| 653 | 653 |
| 654 startup_serializer.SerializeWeakReferencesAndDeferred(); | 654 startup_serializer.SerializeWeakReferencesAndDeferred(); |
| 655 | 655 |
| 656 #ifdef DEBUG | 656 #ifdef DEBUG |
| 657 if (i::FLAG_external_reference_stats) { | 657 if (i::FLAG_external_reference_stats) { |
| 658 i::ExternalReferenceTable::instance(isolate)->PrintCount(); | 658 i::ExternalReferenceTable::instance(isolate)->PrintCount(); |
| 659 } | 659 } |
| (...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 899 #endif // VERIFY_HEAP | 899 #endif // VERIFY_HEAP |
| 900 return result.location(); | 900 return result.location(); |
| 901 } | 901 } |
| 902 | 902 |
| 903 void V8::RegisterExternallyReferencedObject(i::Object** object, | 903 void V8::RegisterExternallyReferencedObject(i::Object** object, |
| 904 i::Isolate* isolate) { | 904 i::Isolate* isolate) { |
| 905 isolate->heap()->RegisterExternallyReferencedObject(object); | 905 isolate->heap()->RegisterExternallyReferencedObject(object); |
| 906 } | 906 } |
| 907 | 907 |
| 908 void V8::MakeWeak(i::Object** location, void* parameter, | 908 void V8::MakeWeak(i::Object** location, void* parameter, |
| 909 int internal_field_index1, int internal_field_index2, | 909 int embedder_field_index1, int embedder_field_index2, |
| 910 WeakCallbackInfo<void>::Callback weak_callback) { | 910 WeakCallbackInfo<void>::Callback weak_callback) { |
| 911 WeakCallbackType type = WeakCallbackType::kParameter; | 911 WeakCallbackType type = WeakCallbackType::kParameter; |
| 912 if (internal_field_index1 == 0) { | 912 if (embedder_field_index1 == 0) { |
| 913 if (internal_field_index2 == 1) { | 913 if (embedder_field_index2 == 1) { |
| 914 type = WeakCallbackType::kInternalFields; | 914 type = WeakCallbackType::kEmbedderFields; |
| 915 } else { | 915 } else { |
| 916 DCHECK_EQ(internal_field_index2, -1); | 916 DCHECK_EQ(embedder_field_index2, -1); |
| 917 type = WeakCallbackType::kInternalFields; | 917 type = WeakCallbackType::kEmbedderFields; |
| 918 } | 918 } |
| 919 } else { | 919 } else { |
| 920 DCHECK_EQ(internal_field_index1, -1); | 920 DCHECK_EQ(embedder_field_index1, -1); |
| 921 DCHECK_EQ(internal_field_index2, -1); | 921 DCHECK_EQ(embedder_field_index2, -1); |
| 922 } | 922 } |
| 923 i::GlobalHandles::MakeWeak(location, parameter, weak_callback, type); | 923 i::GlobalHandles::MakeWeak(location, parameter, weak_callback, type); |
| 924 } | 924 } |
| 925 | 925 |
| 926 void V8::MakeWeak(i::Object** location, void* parameter, | 926 void V8::MakeWeak(i::Object** location, void* parameter, |
| 927 WeakCallbackInfo<void>::Callback weak_callback, | 927 WeakCallbackInfo<void>::Callback weak_callback, |
| 928 WeakCallbackType type) { | 928 WeakCallbackType type) { |
| 929 i::GlobalHandles::MakeWeak(location, parameter, weak_callback, type); | 929 i::GlobalHandles::MakeWeak(location, parameter, weak_callback, type); |
| 930 } | 930 } |
| 931 | 931 |
| (...skipping 25 matching lines...) Expand all Loading... |
| 957 | 957 |
| 958 void V8::FromJustIsNothing() { | 958 void V8::FromJustIsNothing() { |
| 959 Utils::ApiCheck(false, "v8::FromJust", "Maybe value is Nothing."); | 959 Utils::ApiCheck(false, "v8::FromJust", "Maybe value is Nothing."); |
| 960 } | 960 } |
| 961 | 961 |
| 962 | 962 |
| 963 void V8::ToLocalEmpty() { | 963 void V8::ToLocalEmpty() { |
| 964 Utils::ApiCheck(false, "v8::ToLocalChecked", "Empty MaybeLocal."); | 964 Utils::ApiCheck(false, "v8::ToLocalChecked", "Empty MaybeLocal."); |
| 965 } | 965 } |
| 966 | 966 |
| 967 | 967 void V8::EmbedderFieldOutOfBounds(int index) { |
| 968 void V8::InternalFieldOutOfBounds(int index) { | 968 Utils::ApiCheck(0 <= index && index < kEmbedderFieldsInWeakCallback, |
| 969 Utils::ApiCheck(0 <= index && index < kInternalFieldsInWeakCallback, | 969 "WeakCallbackInfo::GetEmbedderField", |
| 970 "WeakCallbackInfo::GetInternalField", | |
| 971 "Internal field out of bounds."); | 970 "Internal field out of bounds."); |
| 972 } | 971 } |
| 973 | 972 |
| 974 | 973 |
| 975 // --- H a n d l e s --- | 974 // --- H a n d l e s --- |
| 976 | 975 |
| 977 | 976 |
| 978 HandleScope::HandleScope(Isolate* isolate) { | 977 HandleScope::HandleScope(Isolate* isolate) { |
| 979 Initialize(isolate); | 978 Initialize(isolate); |
| 980 } | 979 } |
| (...skipping 885 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1866 i::Handle<i::CallHandlerInfo> obj = | 1865 i::Handle<i::CallHandlerInfo> obj = |
| 1867 i::Handle<i::CallHandlerInfo>::cast(struct_obj); | 1866 i::Handle<i::CallHandlerInfo>::cast(struct_obj); |
| 1868 SET_FIELD_WRAPPED(obj, set_callback, callback); | 1867 SET_FIELD_WRAPPED(obj, set_callback, callback); |
| 1869 if (data.IsEmpty()) { | 1868 if (data.IsEmpty()) { |
| 1870 data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate)); | 1869 data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate)); |
| 1871 } | 1870 } |
| 1872 obj->set_data(*Utils::OpenHandle(*data)); | 1871 obj->set_data(*Utils::OpenHandle(*data)); |
| 1873 cons->set_instance_call_handler(*obj); | 1872 cons->set_instance_call_handler(*obj); |
| 1874 } | 1873 } |
| 1875 | 1874 |
| 1876 | 1875 int ObjectTemplate::EmbedderFieldCount() { |
| 1877 int ObjectTemplate::InternalFieldCount() { | 1876 return Utils::OpenHandle(this)->embedder_field_count(); |
| 1878 return Utils::OpenHandle(this)->internal_field_count(); | |
| 1879 } | 1877 } |
| 1880 | 1878 |
| 1881 | 1879 void ObjectTemplate::SetEmbedderFieldCount(int value) { |
| 1882 void ObjectTemplate::SetInternalFieldCount(int value) { | |
| 1883 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 1880 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
| 1884 if (!Utils::ApiCheck(i::Smi::IsValid(value), | 1881 if (!Utils::ApiCheck(i::Smi::IsValid(value), |
| 1885 "v8::ObjectTemplate::SetInternalFieldCount()", | 1882 "v8::ObjectTemplate::SetEmbedderFieldCount()", |
| 1886 "Invalid internal field count")) { | 1883 "Invalid embedder field count")) { |
| 1887 return; | 1884 return; |
| 1888 } | 1885 } |
| 1889 ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate); | 1886 ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate); |
| 1890 if (value > 0) { | 1887 if (value > 0) { |
| 1891 // The internal field count is set by the constructor function's | 1888 // The embedder field count is set by the constructor function's |
| 1892 // construct code, so we ensure that there is a constructor | 1889 // construct code, so we ensure that there is a constructor |
| 1893 // function to do the setting. | 1890 // function to do the setting. |
| 1894 EnsureConstructor(isolate, this); | 1891 EnsureConstructor(isolate, this); |
| 1895 } | 1892 } |
| 1896 Utils::OpenHandle(this)->set_internal_field_count(value); | 1893 Utils::OpenHandle(this)->set_embedder_field_count(value); |
| 1897 } | 1894 } |
| 1898 | 1895 |
| 1899 bool ObjectTemplate::IsImmutableProto() { | 1896 bool ObjectTemplate::IsImmutableProto() { |
| 1900 return Utils::OpenHandle(this)->immutable_proto(); | 1897 return Utils::OpenHandle(this)->immutable_proto(); |
| 1901 } | 1898 } |
| 1902 | 1899 |
| 1903 void ObjectTemplate::SetImmutableProto() { | 1900 void ObjectTemplate::SetImmutableProto() { |
| 1904 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 1901 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
| 1905 ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate); | 1902 ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate); |
| 1906 Utils::OpenHandle(this)->set_immutable_proto(true); | 1903 Utils::OpenHandle(this)->set_immutable_proto(true); |
| (...skipping 4135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6042 | 6039 |
| 6043 uint32_t Uint32::Value() const { | 6040 uint32_t Uint32::Value() const { |
| 6044 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 6041 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
| 6045 if (obj->IsSmi()) { | 6042 if (obj->IsSmi()) { |
| 6046 return i::Smi::cast(*obj)->value(); | 6043 return i::Smi::cast(*obj)->value(); |
| 6047 } else { | 6044 } else { |
| 6048 return static_cast<uint32_t>(obj->Number()); | 6045 return static_cast<uint32_t>(obj->Number()); |
| 6049 } | 6046 } |
| 6050 } | 6047 } |
| 6051 | 6048 |
| 6052 | 6049 int v8::Object::EmbedderFieldCount() { |
| 6053 int v8::Object::InternalFieldCount() { | |
| 6054 i::Handle<i::JSReceiver> self = Utils::OpenHandle(this); | 6050 i::Handle<i::JSReceiver> self = Utils::OpenHandle(this); |
| 6055 if (!self->IsJSObject()) return 0; | 6051 if (!self->IsJSObject()) return 0; |
| 6056 return i::Handle<i::JSObject>::cast(self)->GetInternalFieldCount(); | 6052 return i::Handle<i::JSObject>::cast(self)->GetEmbedderFieldCount(); |
| 6057 } | 6053 } |
| 6058 | 6054 |
| 6059 | 6055 static bool EmbedderFieldOK(i::Handle<i::JSReceiver> obj, int index, |
| 6060 static bool InternalFieldOK(i::Handle<i::JSReceiver> obj, int index, | |
| 6061 const char* location) { | 6056 const char* location) { |
| 6062 return Utils::ApiCheck( | 6057 return Utils::ApiCheck( |
| 6063 obj->IsJSObject() && | 6058 obj->IsJSObject() && |
| 6064 (index < i::Handle<i::JSObject>::cast(obj)->GetInternalFieldCount()), | 6059 (index < i::Handle<i::JSObject>::cast(obj)->GetEmbedderFieldCount()), |
| 6065 location, "Internal field out of bounds"); | 6060 location, "Internal field out of bounds"); |
| 6066 } | 6061 } |
| 6067 | 6062 |
| 6068 | 6063 Local<Value> v8::Object::SlowGetEmbedderField(int index) { |
| 6069 Local<Value> v8::Object::SlowGetInternalField(int index) { | |
| 6070 i::Handle<i::JSReceiver> obj = Utils::OpenHandle(this); | 6064 i::Handle<i::JSReceiver> obj = Utils::OpenHandle(this); |
| 6071 const char* location = "v8::Object::GetInternalField()"; | 6065 const char* location = "v8::Object::GetEmbedderField()"; |
| 6072 if (!InternalFieldOK(obj, index, location)) return Local<Value>(); | 6066 if (!EmbedderFieldOK(obj, index, location)) return Local<Value>(); |
| 6073 i::Handle<i::Object> value( | 6067 i::Handle<i::Object> value( |
| 6074 i::Handle<i::JSObject>::cast(obj)->GetInternalField(index), | 6068 i::Handle<i::JSObject>::cast(obj)->GetEmbedderField(index), |
| 6075 obj->GetIsolate()); | 6069 obj->GetIsolate()); |
| 6076 return Utils::ToLocal(value); | 6070 return Utils::ToLocal(value); |
| 6077 } | 6071 } |
| 6078 | 6072 |
| 6079 | 6073 void v8::Object::SetEmbedderField(int index, v8::Local<Value> value) { |
| 6080 void v8::Object::SetInternalField(int index, v8::Local<Value> value) { | |
| 6081 i::Handle<i::JSReceiver> obj = Utils::OpenHandle(this); | 6074 i::Handle<i::JSReceiver> obj = Utils::OpenHandle(this); |
| 6082 const char* location = "v8::Object::SetInternalField()"; | 6075 const char* location = "v8::Object::SetEmbedderField()"; |
| 6083 if (!InternalFieldOK(obj, index, location)) return; | 6076 if (!EmbedderFieldOK(obj, index, location)) return; |
| 6084 i::Handle<i::Object> val = Utils::OpenHandle(*value); | 6077 i::Handle<i::Object> val = Utils::OpenHandle(*value); |
| 6085 i::Handle<i::JSObject>::cast(obj)->SetInternalField(index, *val); | 6078 i::Handle<i::JSObject>::cast(obj)->SetEmbedderField(index, *val); |
| 6086 } | 6079 } |
| 6087 | 6080 |
| 6088 | 6081 void* v8::Object::SlowGetAlignedPointerFromEmbedderField(int index) { |
| 6089 void* v8::Object::SlowGetAlignedPointerFromInternalField(int index) { | |
| 6090 i::Handle<i::JSReceiver> obj = Utils::OpenHandle(this); | 6082 i::Handle<i::JSReceiver> obj = Utils::OpenHandle(this); |
| 6091 const char* location = "v8::Object::GetAlignedPointerFromInternalField()"; | 6083 const char* location = "v8::Object::GetAlignedPointerFromEmbedderField()"; |
| 6092 if (!InternalFieldOK(obj, index, location)) return NULL; | 6084 if (!EmbedderFieldOK(obj, index, location)) return NULL; |
| 6093 return DecodeSmiToAligned( | 6085 return DecodeSmiToAligned( |
| 6094 i::Handle<i::JSObject>::cast(obj)->GetInternalField(index), location); | 6086 i::Handle<i::JSObject>::cast(obj)->GetEmbedderField(index), location); |
| 6095 } | 6087 } |
| 6096 | 6088 |
| 6097 void v8::Object::SetAlignedPointerInInternalField(int index, void* value) { | 6089 void v8::Object::SetAlignedPointerInEmbedderField(int index, void* value) { |
| 6098 i::Handle<i::JSReceiver> obj = Utils::OpenHandle(this); | 6090 i::Handle<i::JSReceiver> obj = Utils::OpenHandle(this); |
| 6099 const char* location = "v8::Object::SetAlignedPointerInInternalField()"; | 6091 const char* location = "v8::Object::SetAlignedPointerInEmbedderField()"; |
| 6100 if (!InternalFieldOK(obj, index, location)) return; | 6092 if (!EmbedderFieldOK(obj, index, location)) return; |
| 6101 i::Handle<i::JSObject>::cast(obj) | 6093 i::Handle<i::JSObject>::cast(obj)->SetEmbedderField( |
| 6102 ->SetInternalField(index, EncodeAlignedAsSmi(value, location)); | 6094 index, EncodeAlignedAsSmi(value, location)); |
| 6103 DCHECK_EQ(value, GetAlignedPointerFromInternalField(index)); | 6095 DCHECK_EQ(value, GetAlignedPointerFromEmbedderField(index)); |
| 6104 } | 6096 } |
| 6105 | 6097 |
| 6106 void v8::Object::SetAlignedPointerInInternalFields(int argc, int indices[], | 6098 void v8::Object::SetAlignedPointerInEmbedderFields(int argc, int indices[], |
| 6107 void* values[]) { | 6099 void* values[]) { |
| 6108 i::Handle<i::JSReceiver> obj = Utils::OpenHandle(this); | 6100 i::Handle<i::JSReceiver> obj = Utils::OpenHandle(this); |
| 6109 const char* location = "v8::Object::SetAlignedPointerInInternalFields()"; | 6101 const char* location = "v8::Object::SetAlignedPointerInEmbedderFields()"; |
| 6110 i::DisallowHeapAllocation no_gc; | 6102 i::DisallowHeapAllocation no_gc; |
| 6111 i::JSObject* object = i::JSObject::cast(*obj); | 6103 i::JSObject* object = i::JSObject::cast(*obj); |
| 6112 int nof_internal_fields = object->GetInternalFieldCount(); | 6104 int nof_embedder_fields = object->GetEmbedderFieldCount(); |
| 6113 for (int i = 0; i < argc; i++) { | 6105 for (int i = 0; i < argc; i++) { |
| 6114 int index = indices[i]; | 6106 int index = indices[i]; |
| 6115 if (!Utils::ApiCheck(index < nof_internal_fields, location, | 6107 if (!Utils::ApiCheck(index < nof_embedder_fields, location, |
| 6116 "Internal field out of bounds")) { | 6108 "Internal field out of bounds")) { |
| 6117 return; | 6109 return; |
| 6118 } | 6110 } |
| 6119 void* value = values[i]; | 6111 void* value = values[i]; |
| 6120 object->SetInternalField(index, EncodeAlignedAsSmi(value, location)); | 6112 object->SetEmbedderField(index, EncodeAlignedAsSmi(value, location)); |
| 6121 DCHECK_EQ(value, GetAlignedPointerFromInternalField(index)); | 6113 DCHECK_EQ(value, GetAlignedPointerFromEmbedderField(index)); |
| 6122 } | 6114 } |
| 6123 } | 6115 } |
| 6124 | 6116 |
| 6125 static void* ExternalValue(i::Object* obj) { | 6117 static void* ExternalValue(i::Object* obj) { |
| 6126 // Obscure semantics for undefined, but somehow checked in our unit tests... | 6118 // Obscure semantics for undefined, but somehow checked in our unit tests... |
| 6127 if (!obj->IsSmi() && | 6119 if (!obj->IsSmi() && |
| 6128 obj->IsUndefined(i::HeapObject::cast(obj)->GetIsolate())) { | 6120 obj->IsUndefined(i::HeapObject::cast(obj)->GetIsolate())) { |
| 6129 return NULL; | 6121 return NULL; |
| 6130 } | 6122 } |
| 6131 i::Object* foreign = i::JSObject::cast(obj)->GetInternalField(0); | 6123 i::Object* foreign = i::JSObject::cast(obj)->GetEmbedderField(0); |
| 6132 return i::Foreign::cast(foreign)->foreign_address(); | 6124 return i::Foreign::cast(foreign)->foreign_address(); |
| 6133 } | 6125 } |
| 6134 | 6126 |
| 6135 | 6127 |
| 6136 // --- E n v i r o n m e n t --- | 6128 // --- E n v i r o n m e n t --- |
| 6137 | 6129 |
| 6138 | 6130 |
| 6139 void v8::V8::InitializePlatform(Platform* platform) { | 6131 void v8::V8::InitializePlatform(Platform* platform) { |
| 6140 i::V8::InitializePlatform(platform); | 6132 i::V8::InitializePlatform(platform); |
| 6141 } | 6133 } |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6227 | 6219 |
| 6228 template <typename ObjectType> | 6220 template <typename ObjectType> |
| 6229 struct InvokeBootstrapper; | 6221 struct InvokeBootstrapper; |
| 6230 | 6222 |
| 6231 template <> | 6223 template <> |
| 6232 struct InvokeBootstrapper<i::Context> { | 6224 struct InvokeBootstrapper<i::Context> { |
| 6233 i::Handle<i::Context> Invoke( | 6225 i::Handle<i::Context> Invoke( |
| 6234 i::Isolate* isolate, i::MaybeHandle<i::JSGlobalProxy> maybe_global_proxy, | 6226 i::Isolate* isolate, i::MaybeHandle<i::JSGlobalProxy> maybe_global_proxy, |
| 6235 v8::Local<v8::ObjectTemplate> global_object_template, | 6227 v8::Local<v8::ObjectTemplate> global_object_template, |
| 6236 v8::ExtensionConfiguration* extensions, size_t context_snapshot_index, | 6228 v8::ExtensionConfiguration* extensions, size_t context_snapshot_index, |
| 6237 v8::DeserializeInternalFieldsCallback internal_fields_deserializer) { | 6229 v8::DeserializeEmbedderFieldsCallback embedder_fields_deserializer) { |
| 6238 return isolate->bootstrapper()->CreateEnvironment( | 6230 return isolate->bootstrapper()->CreateEnvironment( |
| 6239 maybe_global_proxy, global_object_template, extensions, | 6231 maybe_global_proxy, global_object_template, extensions, |
| 6240 context_snapshot_index, internal_fields_deserializer); | 6232 context_snapshot_index, embedder_fields_deserializer); |
| 6241 } | 6233 } |
| 6242 }; | 6234 }; |
| 6243 | 6235 |
| 6244 template <> | 6236 template <> |
| 6245 struct InvokeBootstrapper<i::JSGlobalProxy> { | 6237 struct InvokeBootstrapper<i::JSGlobalProxy> { |
| 6246 i::Handle<i::JSGlobalProxy> Invoke( | 6238 i::Handle<i::JSGlobalProxy> Invoke( |
| 6247 i::Isolate* isolate, i::MaybeHandle<i::JSGlobalProxy> maybe_global_proxy, | 6239 i::Isolate* isolate, i::MaybeHandle<i::JSGlobalProxy> maybe_global_proxy, |
| 6248 v8::Local<v8::ObjectTemplate> global_object_template, | 6240 v8::Local<v8::ObjectTemplate> global_object_template, |
| 6249 v8::ExtensionConfiguration* extensions, size_t context_snapshot_index, | 6241 v8::ExtensionConfiguration* extensions, size_t context_snapshot_index, |
| 6250 v8::DeserializeInternalFieldsCallback internal_fields_deserializer) { | 6242 v8::DeserializeEmbedderFieldsCallback embedder_fields_deserializer) { |
| 6251 USE(extensions); | 6243 USE(extensions); |
| 6252 USE(context_snapshot_index); | 6244 USE(context_snapshot_index); |
| 6253 return isolate->bootstrapper()->NewRemoteContext(maybe_global_proxy, | 6245 return isolate->bootstrapper()->NewRemoteContext(maybe_global_proxy, |
| 6254 global_object_template); | 6246 global_object_template); |
| 6255 } | 6247 } |
| 6256 }; | 6248 }; |
| 6257 | 6249 |
| 6258 template <typename ObjectType> | 6250 template <typename ObjectType> |
| 6259 static i::Handle<ObjectType> CreateEnvironment( | 6251 static i::Handle<ObjectType> CreateEnvironment( |
| 6260 i::Isolate* isolate, v8::ExtensionConfiguration* extensions, | 6252 i::Isolate* isolate, v8::ExtensionConfiguration* extensions, |
| 6261 v8::MaybeLocal<ObjectTemplate> maybe_global_template, | 6253 v8::MaybeLocal<ObjectTemplate> maybe_global_template, |
| 6262 v8::MaybeLocal<Value> maybe_global_proxy, size_t context_snapshot_index, | 6254 v8::MaybeLocal<Value> maybe_global_proxy, size_t context_snapshot_index, |
| 6263 v8::DeserializeInternalFieldsCallback internal_fields_deserializer) { | 6255 v8::DeserializeEmbedderFieldsCallback embedder_fields_deserializer) { |
| 6264 i::Handle<ObjectType> result; | 6256 i::Handle<ObjectType> result; |
| 6265 | 6257 |
| 6266 { | 6258 { |
| 6267 ENTER_V8_FOR_NEW_CONTEXT(isolate); | 6259 ENTER_V8_FOR_NEW_CONTEXT(isolate); |
| 6268 v8::Local<ObjectTemplate> proxy_template; | 6260 v8::Local<ObjectTemplate> proxy_template; |
| 6269 i::Handle<i::FunctionTemplateInfo> proxy_constructor; | 6261 i::Handle<i::FunctionTemplateInfo> proxy_constructor; |
| 6270 i::Handle<i::FunctionTemplateInfo> global_constructor; | 6262 i::Handle<i::FunctionTemplateInfo> global_constructor; |
| 6271 i::Handle<i::Object> named_interceptor( | 6263 i::Handle<i::Object> named_interceptor( |
| 6272 isolate->factory()->undefined_value()); | 6264 isolate->factory()->undefined_value()); |
| 6273 i::Handle<i::Object> indexed_interceptor( | 6265 i::Handle<i::Object> indexed_interceptor( |
| 6274 isolate->factory()->undefined_value()); | 6266 isolate->factory()->undefined_value()); |
| 6275 | 6267 |
| 6276 if (!maybe_global_template.IsEmpty()) { | 6268 if (!maybe_global_template.IsEmpty()) { |
| 6277 v8::Local<v8::ObjectTemplate> global_template = | 6269 v8::Local<v8::ObjectTemplate> global_template = |
| 6278 maybe_global_template.ToLocalChecked(); | 6270 maybe_global_template.ToLocalChecked(); |
| 6279 // Make sure that the global_template has a constructor. | 6271 // Make sure that the global_template has a constructor. |
| 6280 global_constructor = EnsureConstructor(isolate, *global_template); | 6272 global_constructor = EnsureConstructor(isolate, *global_template); |
| 6281 | 6273 |
| 6282 // Create a fresh template for the global proxy object. | 6274 // Create a fresh template for the global proxy object. |
| 6283 proxy_template = ObjectTemplate::New( | 6275 proxy_template = ObjectTemplate::New( |
| 6284 reinterpret_cast<v8::Isolate*>(isolate)); | 6276 reinterpret_cast<v8::Isolate*>(isolate)); |
| 6285 proxy_constructor = EnsureConstructor(isolate, *proxy_template); | 6277 proxy_constructor = EnsureConstructor(isolate, *proxy_template); |
| 6286 | 6278 |
| 6287 // Set the global template to be the prototype template of | 6279 // Set the global template to be the prototype template of |
| 6288 // global proxy template. | 6280 // global proxy template. |
| 6289 proxy_constructor->set_prototype_template( | 6281 proxy_constructor->set_prototype_template( |
| 6290 *Utils::OpenHandle(*global_template)); | 6282 *Utils::OpenHandle(*global_template)); |
| 6291 | 6283 |
| 6292 proxy_template->SetInternalFieldCount( | 6284 proxy_template->SetEmbedderFieldCount( |
| 6293 global_template->InternalFieldCount()); | 6285 global_template->EmbedderFieldCount()); |
| 6294 | 6286 |
| 6295 // Migrate security handlers from global_template to | 6287 // Migrate security handlers from global_template to |
| 6296 // proxy_template. Temporarily removing access check | 6288 // proxy_template. Temporarily removing access check |
| 6297 // information from the global template. | 6289 // information from the global template. |
| 6298 if (!global_constructor->access_check_info()->IsUndefined(isolate)) { | 6290 if (!global_constructor->access_check_info()->IsUndefined(isolate)) { |
| 6299 proxy_constructor->set_access_check_info( | 6291 proxy_constructor->set_access_check_info( |
| 6300 global_constructor->access_check_info()); | 6292 global_constructor->access_check_info()); |
| 6301 proxy_constructor->set_needs_access_check( | 6293 proxy_constructor->set_needs_access_check( |
| 6302 global_constructor->needs_access_check()); | 6294 global_constructor->needs_access_check()); |
| 6303 global_constructor->set_needs_access_check(false); | 6295 global_constructor->set_needs_access_check(false); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 6326 | 6318 |
| 6327 i::MaybeHandle<i::JSGlobalProxy> maybe_proxy; | 6319 i::MaybeHandle<i::JSGlobalProxy> maybe_proxy; |
| 6328 if (!maybe_global_proxy.IsEmpty()) { | 6320 if (!maybe_global_proxy.IsEmpty()) { |
| 6329 maybe_proxy = i::Handle<i::JSGlobalProxy>::cast( | 6321 maybe_proxy = i::Handle<i::JSGlobalProxy>::cast( |
| 6330 Utils::OpenHandle(*maybe_global_proxy.ToLocalChecked())); | 6322 Utils::OpenHandle(*maybe_global_proxy.ToLocalChecked())); |
| 6331 } | 6323 } |
| 6332 // Create the environment. | 6324 // Create the environment. |
| 6333 InvokeBootstrapper<ObjectType> invoke; | 6325 InvokeBootstrapper<ObjectType> invoke; |
| 6334 result = | 6326 result = |
| 6335 invoke.Invoke(isolate, maybe_proxy, proxy_template, extensions, | 6327 invoke.Invoke(isolate, maybe_proxy, proxy_template, extensions, |
| 6336 context_snapshot_index, internal_fields_deserializer); | 6328 context_snapshot_index, embedder_fields_deserializer); |
| 6337 | 6329 |
| 6338 // Restore the access check info and interceptors on the global template. | 6330 // Restore the access check info and interceptors on the global template. |
| 6339 if (!maybe_global_template.IsEmpty()) { | 6331 if (!maybe_global_template.IsEmpty()) { |
| 6340 DCHECK(!global_constructor.is_null()); | 6332 DCHECK(!global_constructor.is_null()); |
| 6341 DCHECK(!proxy_constructor.is_null()); | 6333 DCHECK(!proxy_constructor.is_null()); |
| 6342 global_constructor->set_access_check_info( | 6334 global_constructor->set_access_check_info( |
| 6343 proxy_constructor->access_check_info()); | 6335 proxy_constructor->access_check_info()); |
| 6344 global_constructor->set_needs_access_check( | 6336 global_constructor->set_needs_access_check( |
| 6345 proxy_constructor->needs_access_check()); | 6337 proxy_constructor->needs_access_check()); |
| 6346 global_constructor->set_named_property_handler(*named_interceptor); | 6338 global_constructor->set_named_property_handler(*named_interceptor); |
| 6347 global_constructor->set_indexed_property_handler(*indexed_interceptor); | 6339 global_constructor->set_indexed_property_handler(*indexed_interceptor); |
| 6348 } | 6340 } |
| 6349 } | 6341 } |
| 6350 // Leave V8. | 6342 // Leave V8. |
| 6351 | 6343 |
| 6352 return result; | 6344 return result; |
| 6353 } | 6345 } |
| 6354 | 6346 |
| 6355 Local<Context> NewContext( | 6347 Local<Context> NewContext( |
| 6356 v8::Isolate* external_isolate, v8::ExtensionConfiguration* extensions, | 6348 v8::Isolate* external_isolate, v8::ExtensionConfiguration* extensions, |
| 6357 v8::MaybeLocal<ObjectTemplate> global_template, | 6349 v8::MaybeLocal<ObjectTemplate> global_template, |
| 6358 v8::MaybeLocal<Value> global_object, size_t context_snapshot_index, | 6350 v8::MaybeLocal<Value> global_object, size_t context_snapshot_index, |
| 6359 v8::DeserializeInternalFieldsCallback internal_fields_deserializer) { | 6351 v8::DeserializeEmbedderFieldsCallback embedder_fields_deserializer) { |
| 6360 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(external_isolate); | 6352 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(external_isolate); |
| 6361 TRACE_EVENT_CALL_STATS_SCOPED(isolate, "v8", "V8.NewContext"); | 6353 TRACE_EVENT_CALL_STATS_SCOPED(isolate, "v8", "V8.NewContext"); |
| 6362 LOG_API(isolate, Context, New); | 6354 LOG_API(isolate, Context, New); |
| 6363 i::HandleScope scope(isolate); | 6355 i::HandleScope scope(isolate); |
| 6364 ExtensionConfiguration no_extensions; | 6356 ExtensionConfiguration no_extensions; |
| 6365 if (extensions == NULL) extensions = &no_extensions; | 6357 if (extensions == NULL) extensions = &no_extensions; |
| 6366 i::Handle<i::Context> env = CreateEnvironment<i::Context>( | 6358 i::Handle<i::Context> env = CreateEnvironment<i::Context>( |
| 6367 isolate, extensions, global_template, global_object, | 6359 isolate, extensions, global_template, global_object, |
| 6368 context_snapshot_index, internal_fields_deserializer); | 6360 context_snapshot_index, embedder_fields_deserializer); |
| 6369 if (env.is_null()) { | 6361 if (env.is_null()) { |
| 6370 if (isolate->has_pending_exception()) isolate->clear_pending_exception(); | 6362 if (isolate->has_pending_exception()) isolate->clear_pending_exception(); |
| 6371 return Local<Context>(); | 6363 return Local<Context>(); |
| 6372 } | 6364 } |
| 6373 return Utils::ToLocal(scope.CloseAndEscape(env)); | 6365 return Utils::ToLocal(scope.CloseAndEscape(env)); |
| 6374 } | 6366 } |
| 6375 | 6367 |
| 6376 Local<Context> v8::Context::New(v8::Isolate* external_isolate, | 6368 Local<Context> v8::Context::New(v8::Isolate* external_isolate, |
| 6377 v8::ExtensionConfiguration* extensions, | 6369 v8::ExtensionConfiguration* extensions, |
| 6378 v8::MaybeLocal<ObjectTemplate> global_template, | 6370 v8::MaybeLocal<ObjectTemplate> global_template, |
| 6379 v8::MaybeLocal<Value> global_object) { | 6371 v8::MaybeLocal<Value> global_object) { |
| 6380 return NewContext(external_isolate, extensions, global_template, | 6372 return NewContext(external_isolate, extensions, global_template, |
| 6381 global_object, 0, DeserializeInternalFieldsCallback()); | 6373 global_object, 0, DeserializeEmbedderFieldsCallback()); |
| 6382 } | 6374 } |
| 6383 | 6375 |
| 6384 MaybeLocal<Context> v8::Context::FromSnapshot( | 6376 MaybeLocal<Context> v8::Context::FromSnapshot( |
| 6385 v8::Isolate* external_isolate, size_t context_snapshot_index, | 6377 v8::Isolate* external_isolate, size_t context_snapshot_index, |
| 6386 v8::DeserializeInternalFieldsCallback internal_fields_deserializer, | 6378 v8::DeserializeEmbedderFieldsCallback embedder_fields_deserializer, |
| 6387 v8::ExtensionConfiguration* extensions, MaybeLocal<Value> global_object) { | 6379 v8::ExtensionConfiguration* extensions, MaybeLocal<Value> global_object) { |
| 6388 size_t index_including_default_context = context_snapshot_index + 1; | 6380 size_t index_including_default_context = context_snapshot_index + 1; |
| 6389 if (!i::Snapshot::HasContextSnapshot( | 6381 if (!i::Snapshot::HasContextSnapshot( |
| 6390 reinterpret_cast<i::Isolate*>(external_isolate), | 6382 reinterpret_cast<i::Isolate*>(external_isolate), |
| 6391 index_including_default_context)) { | 6383 index_including_default_context)) { |
| 6392 return MaybeLocal<Context>(); | 6384 return MaybeLocal<Context>(); |
| 6393 } | 6385 } |
| 6394 return NewContext(external_isolate, extensions, MaybeLocal<ObjectTemplate>(), | 6386 return NewContext(external_isolate, extensions, MaybeLocal<ObjectTemplate>(), |
| 6395 global_object, index_including_default_context, | 6387 global_object, index_including_default_context, |
| 6396 internal_fields_deserializer); | 6388 embedder_fields_deserializer); |
| 6397 } | 6389 } |
| 6398 | 6390 |
| 6399 MaybeLocal<Object> v8::Context::NewRemoteContext( | 6391 MaybeLocal<Object> v8::Context::NewRemoteContext( |
| 6400 v8::Isolate* external_isolate, v8::Local<ObjectTemplate> global_template, | 6392 v8::Isolate* external_isolate, v8::Local<ObjectTemplate> global_template, |
| 6401 v8::MaybeLocal<v8::Value> global_object) { | 6393 v8::MaybeLocal<v8::Value> global_object) { |
| 6402 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(external_isolate); | 6394 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(external_isolate); |
| 6403 LOG_API(isolate, Context, NewRemoteContext); | 6395 LOG_API(isolate, Context, NewRemoteContext); |
| 6404 i::HandleScope scope(isolate); | 6396 i::HandleScope scope(isolate); |
| 6405 i::Handle<i::FunctionTemplateInfo> global_constructor = | 6397 i::Handle<i::FunctionTemplateInfo> global_constructor = |
| 6406 EnsureConstructor(isolate, *global_template); | 6398 EnsureConstructor(isolate, *global_template); |
| 6407 Utils::ApiCheck(global_constructor->needs_access_check(), | 6399 Utils::ApiCheck(global_constructor->needs_access_check(), |
| 6408 "v8::Context::NewRemoteContext", | 6400 "v8::Context::NewRemoteContext", |
| 6409 "Global template needs to have access checks enabled."); | 6401 "Global template needs to have access checks enabled."); |
| 6410 i::Handle<i::AccessCheckInfo> access_check_info = i::handle( | 6402 i::Handle<i::AccessCheckInfo> access_check_info = i::handle( |
| 6411 i::AccessCheckInfo::cast(global_constructor->access_check_info()), | 6403 i::AccessCheckInfo::cast(global_constructor->access_check_info()), |
| 6412 isolate); | 6404 isolate); |
| 6413 Utils::ApiCheck(access_check_info->named_interceptor() != nullptr, | 6405 Utils::ApiCheck(access_check_info->named_interceptor() != nullptr, |
| 6414 "v8::Context::NewRemoteContext", | 6406 "v8::Context::NewRemoteContext", |
| 6415 "Global template needs to have access check handlers."); | 6407 "Global template needs to have access check handlers."); |
| 6416 i::Handle<i::JSGlobalProxy> global_proxy = | 6408 i::Handle<i::JSGlobalProxy> global_proxy = |
| 6417 CreateEnvironment<i::JSGlobalProxy>(isolate, nullptr, global_template, | 6409 CreateEnvironment<i::JSGlobalProxy>(isolate, nullptr, global_template, |
| 6418 global_object, 0, | 6410 global_object, 0, |
| 6419 DeserializeInternalFieldsCallback()); | 6411 DeserializeEmbedderFieldsCallback()); |
| 6420 if (global_proxy.is_null()) { | 6412 if (global_proxy.is_null()) { |
| 6421 if (isolate->has_pending_exception()) isolate->clear_pending_exception(); | 6413 if (isolate->has_pending_exception()) isolate->clear_pending_exception(); |
| 6422 return MaybeLocal<Object>(); | 6414 return MaybeLocal<Object>(); |
| 6423 } | 6415 } |
| 6424 return Utils::ToLocal( | 6416 return Utils::ToLocal( |
| 6425 scope.CloseAndEscape(i::Handle<i::JSObject>::cast(global_proxy))); | 6417 scope.CloseAndEscape(i::Handle<i::JSObject>::cast(global_proxy))); |
| 6426 } | 6418 } |
| 6427 | 6419 |
| 6428 void v8::Context::SetSecurityToken(Local<Value> token) { | 6420 void v8::Context::SetSecurityToken(Local<Value> token) { |
| 6429 i::Handle<i::Context> env = Utils::OpenHandle(this); | 6421 i::Handle<i::Context> env = Utils::OpenHandle(this); |
| (...skipping 1077 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7507 has_pending_exception = | 7499 has_pending_exception = |
| 7508 !ToLocal<Proxy>(i::JSProxy::New(isolate, target, handler), &result); | 7500 !ToLocal<Proxy>(i::JSProxy::New(isolate, target, handler), &result); |
| 7509 RETURN_ON_FAILED_EXECUTION(Proxy); | 7501 RETURN_ON_FAILED_EXECUTION(Proxy); |
| 7510 RETURN_ESCAPED(result); | 7502 RETURN_ESCAPED(result); |
| 7511 } | 7503 } |
| 7512 | 7504 |
| 7513 Local<String> WasmCompiledModule::GetWasmWireBytes() { | 7505 Local<String> WasmCompiledModule::GetWasmWireBytes() { |
| 7514 i::Handle<i::JSObject> obj = | 7506 i::Handle<i::JSObject> obj = |
| 7515 i::Handle<i::JSObject>::cast(Utils::OpenHandle(this)); | 7507 i::Handle<i::JSObject>::cast(Utils::OpenHandle(this)); |
| 7516 i::Handle<i::WasmCompiledModule> compiled_part = | 7508 i::Handle<i::WasmCompiledModule> compiled_part = |
| 7517 i::handle(i::WasmCompiledModule::cast(obj->GetInternalField(0))); | 7509 i::handle(i::WasmCompiledModule::cast(obj->GetEmbedderField(0))); |
| 7518 i::Handle<i::String> wire_bytes(compiled_part->module_bytes()); | 7510 i::Handle<i::String> wire_bytes(compiled_part->module_bytes()); |
| 7519 return Local<String>::Cast(Utils::ToLocal(wire_bytes)); | 7511 return Local<String>::Cast(Utils::ToLocal(wire_bytes)); |
| 7520 } | 7512 } |
| 7521 | 7513 |
| 7522 WasmCompiledModule::SerializedModule WasmCompiledModule::Serialize() { | 7514 WasmCompiledModule::SerializedModule WasmCompiledModule::Serialize() { |
| 7523 i::Handle<i::JSObject> obj = | 7515 i::Handle<i::JSObject> obj = |
| 7524 i::Handle<i::JSObject>::cast(Utils::OpenHandle(this)); | 7516 i::Handle<i::JSObject>::cast(Utils::OpenHandle(this)); |
| 7525 i::Handle<i::WasmCompiledModule> compiled_part = | 7517 i::Handle<i::WasmCompiledModule> compiled_part = |
| 7526 i::handle(i::WasmCompiledModule::cast(obj->GetInternalField(0))); | 7518 i::handle(i::WasmCompiledModule::cast(obj->GetEmbedderField(0))); |
| 7527 | 7519 |
| 7528 std::unique_ptr<i::ScriptData> script_data = | 7520 std::unique_ptr<i::ScriptData> script_data = |
| 7529 i::WasmCompiledModuleSerializer::SerializeWasmModule(obj->GetIsolate(), | 7521 i::WasmCompiledModuleSerializer::SerializeWasmModule(obj->GetIsolate(), |
| 7530 compiled_part); | 7522 compiled_part); |
| 7531 script_data->ReleaseDataOwnership(); | 7523 script_data->ReleaseDataOwnership(); |
| 7532 | 7524 |
| 7533 size_t size = static_cast<size_t>(script_data->length()); | 7525 size_t size = static_cast<size_t>(script_data->length()); |
| 7534 return {std::unique_ptr<const uint8_t[]>(script_data->data()), size}; | 7526 return {std::unique_ptr<const uint8_t[]>(script_data->data()), size}; |
| 7535 } | 7527 } |
| 7536 | 7528 |
| (...skipping 2706 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10243 Address callback_address = | 10235 Address callback_address = |
| 10244 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); | 10236 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); |
| 10245 VMState<EXTERNAL> state(isolate); | 10237 VMState<EXTERNAL> state(isolate); |
| 10246 ExternalCallbackScope call_scope(isolate, callback_address); | 10238 ExternalCallbackScope call_scope(isolate, callback_address); |
| 10247 callback(info); | 10239 callback(info); |
| 10248 } | 10240 } |
| 10249 | 10241 |
| 10250 | 10242 |
| 10251 } // namespace internal | 10243 } // namespace internal |
| 10252 } // namespace v8 | 10244 } // namespace v8 |
| OLD | NEW |