| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent ca91969 commit b8e264d
18 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -126,10 +126,10 @@ Typical ways of working with internal fields are: | |||
| 126 | 126 | * `obj->GetInternalField(i)` to get a JavaScript value from an internal field. | |
| 127 | 127 | * `obj->SetInternalField(i, v)` to store a JavaScript value in an | |
| 128 | 128 | internal field. | |
| 129 | - * `obj->GetAlignedPointerFromInternalField(i)` to get a `void*` pointer from an | ||
| 130 | - internal field. | ||
| 131 | - * `obj->SetAlignedPointerInInternalField(i, p)` to store a `void*` pointer in an | ||
| 132 | - internal field. | ||
| 129 | + * `obj->GetAlignedPointerFromInternalField(i, EmbedderDataTag::kDefault)` to get | ||
| 130 | + a `void*` pointer from an internal field. | ||
| 131 | + * `obj->SetAlignedPointerInInternalField(i, p, EmbedderDataTag::kDefault)` to store | ||
| 132 | + a `void*` pointer in an internal field. | ||
| 133 | 133 | ||
| 134 | 134 | [`Context`][]s provide the same feature under the name “embedder data”. | |
| 135 | 135 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -74,30 +74,34 @@ bool BaseObject::IsBaseObject(IsolateData* isolate_data, | |||
| 74 | 74 | return false; | |
| 75 | 75 | } | |
| 76 | 76 | ||
| 77 | - uint16_t* ptr = static_cast<uint16_t*>( | ||
| 78 | - obj->GetAlignedPointerFromInternalField(BaseObject::kEmbedderType)); | ||
| 77 | + uint16_t* ptr = | ||
| 78 | + static_cast<uint16_t*>(obj->GetAlignedPointerFromInternalField( | ||
| 79 | + BaseObject::kEmbedderType, EmbedderDataTag::kEmbedderType)); | ||
| 79 | 80 | return ptr == isolate_data->embedder_id_for_non_cppgc(); | |
| 80 | 81 | } | |
| 81 | 82 | ||
| 82 | 83 | void BaseObject::TagBaseObject(IsolateData* isolate_data, | |
| 83 | 84 | v8::Local<v8::Object> object) { | |
| 84 | 85 | DCHECK_GE(object->InternalFieldCount(), BaseObject::kInternalFieldCount); | |
| 85 | 86 | object->SetAlignedPointerInInternalField( | |
| 86 | - BaseObject::kEmbedderType, isolate_data->embedder_id_for_non_cppgc()); | ||
| 87 | + BaseObject::kEmbedderType, | ||
| 88 | + isolate_data->embedder_id_for_non_cppgc(), | ||
| 89 | + EmbedderDataTag::kEmbedderType); | ||
| 87 | 90 | } | |
| 88 | 91 | ||
| 89 | 92 | void BaseObject::SetInternalFields(IsolateData* isolate_data, | |
| 90 | 93 | v8::Local<v8::Object> object, | |
| 91 | 94 | void* slot) { | |
| 92 | 95 | TagBaseObject(isolate_data, object); | |
| 93 | - object->SetAlignedPointerInInternalField(BaseObject::kSlot, slot); | ||
| 96 | + object->SetAlignedPointerInInternalField( | ||
| 97 | + BaseObject::kSlot, slot, EmbedderDataTag::kDefault); | ||
| 94 | 98 | } | |
| 95 | 99 | ||
| 96 | 100 | BaseObject* BaseObject::FromJSObject(v8::Local<v8::Value> value) { | |
| 97 | 101 | v8::Local<v8::Object> obj = value.As<v8::Object>(); | |
| 98 | 102 | DCHECK_GE(obj->InternalFieldCount(), BaseObject::kInternalFieldCount); | |
| 99 | - return static_cast<BaseObject*>( | ||
| 100 | - obj->GetAlignedPointerFromInternalField(BaseObject::kSlot)); | ||
| 103 | + return static_cast<BaseObject*>(obj->GetAlignedPointerFromInternalField( | ||
| 104 | + BaseObject::kSlot, EmbedderDataTag::kDefault)); | ||
| 101 | 105 | } | |
| 102 | 106 | ||
| 103 | 107 | template <typename T> | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -45,7 +45,8 @@ BaseObject::~BaseObject() { | |||
| 45 | 45 | ||
| 46 | 46 | { | |
| 47 | 47 | HandleScope handle_scope(realm()->isolate()); | |
| 48 | - object()->SetAlignedPointerInInternalField(BaseObject::kSlot, nullptr); | ||
| 48 | + object()->SetAlignedPointerInInternalField( | ||
| 49 | + BaseObject::kSlot, nullptr, EmbedderDataTag::kDefault); | ||
| 49 | 50 | } | |
| 50 | 51 | } | |
| 51 | 52 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -27,6 +27,7 @@ | |||
| 27 | 27 | #include <type_traits> // std::remove_reference | |
| 28 | 28 | #include "base_object_types.h" | |
| 29 | 29 | #include "memory_tracker.h" | |
| 30 | + #include "node_v8_embedder.h" | ||
| 30 | 31 | #include "util.h" | |
| 31 | 32 | #include "v8.h" | |
| 32 | 33 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -19,8 +19,10 @@ void CppgcMixin::Wrap(T* ptr, Realm* realm, v8::Local<v8::Object> obj) { | |||
| 19 | 19 | v8::Object::Wrap<v8::CppHeapPointerTag::kDefaultTag>(isolate, obj, wrappable); | |
| 20 | 20 | // Keep the layout consistent with BaseObjects. | |
| 21 | 21 | obj->SetAlignedPointerInInternalField( | |
| 22 | - kEmbedderType, realm->isolate_data()->embedder_id_for_cppgc()); | ||
| 23 | - obj->SetAlignedPointerInInternalField(kSlot, ptr); | ||
| 22 | + kEmbedderType, | ||
| 23 | + realm->isolate_data()->embedder_id_for_cppgc(), | ||
| 24 | + EmbedderDataTag::kEmbedderType); | ||
| 25 | + obj->SetAlignedPointerInInternalField(kSlot, ptr, EmbedderDataTag::kDefault); | ||
| 24 | 26 | realm->TrackCppgcWrapper(ptr); | |
| 25 | 27 | } | |
| 26 | 28 | ||
@@ -41,7 +43,8 @@ T* CppgcMixin::Unwrap(v8::Local<v8::Object> obj) { | |||
| 41 | 43 | if (obj->InternalFieldCount() != T::kInternalFieldCount) { | |
| 42 | 44 | return nullptr; | |
| 43 | 45 | } | |
| 44 | - T* ptr = static_cast<T*>(obj->GetAlignedPointerFromInternalField(T::kSlot)); | ||
| 46 | + T* ptr = static_cast<T*>(obj->GetAlignedPointerFromInternalField( | ||
| 47 | + T::kSlot, EmbedderDataTag::kDefault)); | ||
| 45 | 48 | return ptr; | |
| 46 | 49 | } | |
| 47 | 50 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -196,9 +196,8 @@ inline Environment* Environment::GetCurrent(v8::Local<v8::Context> context) { | |||
| 196 | 196 | if (!ContextEmbedderTag::IsNodeContext(context)) [[unlikely]] { | |
| 197 | 197 | return nullptr; | |
| 198 | 198 | } | |
| 199 | - return static_cast<Environment*>( | ||
| 200 | - context->GetAlignedPointerFromEmbedderData( | ||
| 201 | - ContextEmbedderIndex::kEnvironment)); | ||
| 199 | + return static_cast<Environment*>(context->GetAlignedPointerFromEmbedderData( | ||
| 200 | + ContextEmbedderIndex::kEnvironment, EmbedderDataTag::kPerContextData)); | ||
| 202 | 201 | } | |
| 203 | 202 | ||
| 204 | 203 | inline Environment* Environment::GetCurrent( | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -674,12 +674,16 @@ void Environment::AssignToContext(Local<v8::Context> context, | |||
| 674 | 674 | Realm* realm, | |
| 675 | 675 | const ContextInfo& info) { | |
| 676 | 676 | context->SetAlignedPointerInEmbedderData(ContextEmbedderIndex::kEnvironment, | |
| 677 | - this); | ||
| 678 | - context->SetAlignedPointerInEmbedderData(ContextEmbedderIndex::kRealm, realm); | ||
| 677 | + this, | ||
| 678 | + EmbedderDataTag::kPerContextData); | ||
| 679 | + context->SetAlignedPointerInEmbedderData( | ||
| 680 | + ContextEmbedderIndex::kRealm, realm, EmbedderDataTag::kPerContextData); | ||
| 679 | 681 | ||
| 680 | 682 | // ContextifyContexts will update this to a pointer to the native object. | |
| 681 | 683 | context->SetAlignedPointerInEmbedderData( | |
| 682 | - ContextEmbedderIndex::kContextifyContext, nullptr); | ||
| 684 | + ContextEmbedderIndex::kContextifyContext, | ||
| 685 | + nullptr, | ||
| 686 | + EmbedderDataTag::kPerContextData); | ||
| 683 | 687 | ||
| 684 | 688 | // This must not be done before other context fields are initialized. | |
| 685 | 689 | ContextEmbedderTag::TagNodeContext(context); | |
@@ -695,11 +699,15 @@ void Environment::AssignToContext(Local<v8::Context> context, | |||
| 695 | 699 | void Environment::UnassignFromContext(Local<v8::Context> context) { | |
| 696 | 700 | if (!context.IsEmpty()) { | |
| 697 | 701 | context->SetAlignedPointerInEmbedderData(ContextEmbedderIndex::kEnvironment, | |
| 698 | - nullptr); | ||
| 702 | + nullptr, | ||
| 703 | + EmbedderDataTag::kPerContextData); | ||
| 699 | 704 | context->SetAlignedPointerInEmbedderData(ContextEmbedderIndex::kRealm, | |
| 700 | - nullptr); | ||
| 705 | + nullptr, | ||
| 706 | + EmbedderDataTag::kPerContextData); | ||
| 701 | 707 | context->SetAlignedPointerInEmbedderData( | |
| 702 | - ContextEmbedderIndex::kContextifyContext, nullptr); | ||
| 708 | + ContextEmbedderIndex::kContextifyContext, | ||
| 709 | + nullptr, | ||
| 710 | + EmbedderDataTag::kPerContextData); | ||
| 703 | 711 | } | |
| 704 | 712 | UntrackContext(context); | |
| 705 | 713 | } | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -136,7 +136,8 @@ HistogramBase::HistogramBase( | |||
| 136 | 136 | MakeWeak(); | |
| 137 | 137 | wrap->SetAlignedPointerInInternalField( | |
| 138 | 138 | HistogramImpl::InternalFields::kImplField, | |
| 139 | - static_cast<HistogramImpl*>(this)); | ||
| 139 | + static_cast<HistogramImpl*>(this), | ||
| 140 | + EmbedderDataTag::kDefault); | ||
| 140 | 141 | } | |
| 141 | 142 | ||
| 142 | 143 | HistogramBase::HistogramBase( | |
@@ -148,7 +149,8 @@ HistogramBase::HistogramBase( | |||
| 148 | 149 | MakeWeak(); | |
| 149 | 150 | wrap->SetAlignedPointerInInternalField( | |
| 150 | 151 | HistogramImpl::InternalFields::kImplField, | |
| 151 | - static_cast<HistogramImpl*>(this)); | ||
| 152 | + static_cast<HistogramImpl*>(this), | ||
| 153 | + EmbedderDataTag::kDefault); | ||
| 152 | 154 | } | |
| 153 | 155 | ||
| 154 | 156 | void HistogramBase::MemoryInfo(MemoryTracker* tracker) const { | |
@@ -362,7 +364,8 @@ IntervalHistogram::IntervalHistogram( | |||
| 362 | 364 | MakeWeak(); | |
| 363 | 365 | wrap->SetAlignedPointerInInternalField( | |
| 364 | 366 | HistogramImpl::InternalFields::kImplField, | |
| 365 | - static_cast<HistogramImpl*>(this)); | ||
| 367 | + static_cast<HistogramImpl*>(this), | ||
| 368 | + EmbedderDataTag::kDefault); | ||
| 366 | 369 | uv_timer_init(env->event_loop(), &timer_); | |
| 367 | 370 | } | |
| 368 | 371 | ||
@@ -600,8 +603,8 @@ double HistogramImpl::FastGetPercentile(Local<Value> receiver, | |||
| 600 | 603 | HistogramImpl* HistogramImpl::FromJSObject(Local<Value> value) { | |
| 601 | 604 | auto obj = value.As<Object>(); | |
| 602 | 605 | DCHECK_GE(obj->InternalFieldCount(), HistogramImpl::kInternalFieldCount); | |
| 603 | - return static_cast<HistogramImpl*>( | ||
| 604 | - obj->GetAlignedPointerFromInternalField(HistogramImpl::kImplField)); | ||
| 606 | + return static_cast<HistogramImpl*>(obj->GetAlignedPointerFromInternalField( | ||
| 607 | + HistogramImpl::kImplField, EmbedderDataTag::kDefault)); | ||
| 605 | 608 | } | |
| 606 | 609 | ||
| 607 | 610 | std::unique_ptr<worker::TransferData> | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -55,8 +55,9 @@ JSUDPWrap::JSUDPWrap(Environment* env, Local<Object> obj) | |||
| 55 | 55 | : AsyncWrap(env, obj, PROVIDER_JSUDPWRAP) { | |
| 56 | 56 | MakeWeak(); | |
| 57 | 57 | ||
| 58 | - obj->SetAlignedPointerInInternalField( | ||
| 59 | - kUDPWrapBaseField, static_cast<UDPWrapBase*>(this)); | ||
| 58 | + obj->SetAlignedPointerInInternalField(kUDPWrapBaseField, | ||
| 59 | + static_cast<UDPWrapBase*>(this), | ||
| 60 | + EmbedderDataTag::kDefault); | ||
| 60 | 61 | } | |
| 61 | 62 | ||
| 62 | 63 | int JSUDPWrap::RecvStart() { | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -3,6 +3,7 @@ | |||
| 3 | 3 | ||
| 4 | 4 | #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS | |
| 5 | 5 | ||
| 6 | + #include "node_v8_embedder.h" | ||
| 6 | 7 | #include "util.h" | |
| 7 | 8 | #include "v8.h" | |
| 8 | 9 | ||
@@ -135,7 +136,8 @@ class ContextEmbedderTag { | |||
| 135 | 136 | // context. | |
| 136 | 137 | context->SetAlignedPointerInEmbedderData( | |
| 137 | 138 | ContextEmbedderIndex::kContextTag, | |
| 138 | - ContextEmbedderTag::kNodeContextTagPtr); | ||
| 139 | + ContextEmbedderTag::kNodeContextTagPtr, | ||
| 140 | + EmbedderDataTag::kPerContextData); | ||
| 139 | 141 | } | |
| 140 | 142 | ||
| 141 | 143 | static inline bool IsNodeContext(v8::Local<v8::Context> context) { | |
@@ -147,7 +149,8 @@ class ContextEmbedderTag { | |||
| 147 | 149 | return false; | |
| 148 | 150 | } | |
| 149 | 151 | if (context->GetAlignedPointerFromEmbedderData( | |
| 150 | - ContextEmbedderIndex::kContextTag) != | ||
| 152 | + ContextEmbedderIndex::kContextTag, | ||
| 153 | + EmbedderDataTag::kPerContextData) != | ||
| 151 | 154 | ContextEmbedderTag::kNodeContextTagPtr) [[unlikely]] { | |
| 152 | 155 | return false; | |
| 153 | 156 | } | |
| Back | FazBrowse Home | New Git URL |
0 commit comments