@@ -10322,7 +10322,7 @@ AccessorSignature* AccessorSignature::Cast(Data* data) {
10322
10322
}
10323
10323
10324
10324
Local<Value> Object::GetInternalField (int index) {
10325
- #if !defined( V8_ENABLE_CHECKS) && !defined(V8_COMPRESS_POINTERS)
10325
+ #ifndef V8_ENABLE_CHECKS
10326
10326
typedef internal::Address A;
10327
10327
typedef internal::Internals I;
10328
10328
A obj = *reinterpret_cast <A*>(this );
@@ -10333,7 +10333,12 @@ Local<Value> Object::GetInternalField(int index) {
10333
10333
instance_type == I::kJSApiObjectType ||
10334
10334
instance_type == I::kJSSpecialApiObjectType ) {
10335
10335
int offset = I::kJSObjectHeaderSize + (I::kEmbedderDataSlotSize * index );
10336
- A value = I::ReadTaggedAnyField (obj, offset);
10336
+ A value = I::ReadRawField<A>(obj, offset);
10337
+ #ifdef V8_COMPRESS_POINTERS
10338
+ // We read the full pointer value and then decompress it in order to avoid
10339
+ // dealing with potential endiannes issues.
10340
+ value = I::DecompressTaggedAnyField (obj, static_cast <int32_t >(value));
10341
+ #endif
10337
10342
internal::Isolate* isolate =
10338
10343
internal::IsolateFromNeverReadOnlySpaceObject (obj);
10339
10344
A* result = HandleScope::CreateHandle (isolate, value);
@@ -10345,7 +10350,7 @@ Local<Value> Object::GetInternalField(int index) {
10345
10350
10346
10351
10347
10352
void * Object::GetAlignedPointerFromInternalField (int index) {
10348
- #if !defined( V8_ENABLE_CHECKS) && !defined(V8_COMPRESS_POINTERS)
10353
+ #ifndef V8_ENABLE_CHECKS
10349
10354
typedef internal::Address A;
10350
10355
typedef internal::Internals I;
10351
10356
A obj = *reinterpret_cast <A*>(this );
@@ -10956,13 +10961,24 @@ int64_t Isolate::AdjustAmountOfExternalAllocatedMemory(
10956
10961
}
10957
10962
10958
10963
Local<Value> Context::GetEmbedderData (int index) {
10959
- #if !defined( V8_ENABLE_CHECKS) && !defined(V8_COMPRESS_POINTERS)
10964
+ #ifndef V8_ENABLE_CHECKS
10960
10965
typedef internal::Address A;
10961
10966
typedef internal::Internals I;
10967
+ A ctx = *reinterpret_cast <const A*>(this );
10968
+ A embedder_data =
10969
+ I::ReadTaggedPointerField (ctx, I::kNativeContextEmbedderDataOffset );
10970
+ int value_offset =
10971
+ I::kEmbedderDataArrayHeaderSize + (I::kEmbedderDataSlotSize * index );
10972
+ A value = I::ReadRawField<A>(embedder_data, value_offset);
10973
+ #ifdef V8_COMPRESS_POINTERS
10974
+ // We read the full pointer value and then decompress it in order to avoid
10975
+ // dealing with potential endiannes issues.
10976
+ value =
10977
+ I::DecompressTaggedAnyField (embedder_data, static_cast <int32_t >(value));
10978
+ #endif
10962
10979
internal::Isolate* isolate = internal::IsolateFromNeverReadOnlySpaceObject (
10963
10980
*reinterpret_cast <A*>(this ));
10964
- A* result =
10965
- HandleScope::CreateHandle (isolate, I::ReadEmbedderData<A>(this , index ));
10981
+ A* result = HandleScope::CreateHandle (isolate, value);
10966
10982
return Local<Value>(reinterpret_cast <Value*>(result));
10967
10983
#else
10968
10984
return SlowGetEmbedderData (index );
@@ -10971,9 +10987,15 @@ Local<Value> Context::GetEmbedderData(int index) {
10971
10987
10972
10988
10973
10989
void * Context::GetAlignedPointerFromEmbedderData (int index) {
10974
- #if !defined(V8_ENABLE_CHECKS) && !defined(V8_COMPRESS_POINTERS)
10990
+ #ifndef V8_ENABLE_CHECKS
10991
+ typedef internal::Address A;
10975
10992
typedef internal::Internals I;
10976
- return I::ReadEmbedderData<void *>(this , index );
10993
+ A ctx = *reinterpret_cast <const A*>(this );
10994
+ A embedder_data =
10995
+ I::ReadTaggedPointerField (ctx, I::kNativeContextEmbedderDataOffset );
10996
+ int value_offset =
10997
+ I::kEmbedderDataArrayHeaderSize + (I::kEmbedderDataSlotSize * index );
10998
+ return I::ReadRawField<void *>(embedder_data, value_offset);
10977
10999
#else
10978
11000
return SlowGetAlignedPointerFromEmbedderData (index );
10979
11001
#endif
0 commit comments