diff --git a/ecmascript/ecma_string_table_optimization.cpp b/ecmascript/ecma_string_table_optimization.cpp index 615cd3d83e087fae99f8de5f8ce59cbafab3cf07..d0af0de0db2aa2870b45b648ad5c8b521cf26ebe 100644 --- a/ecmascript/ecma_string_table_optimization.cpp +++ b/ecmascript/ecma_string_table_optimization.cpp @@ -101,18 +101,21 @@ EcmaString* EcmaStringTableImpl::GetOrInternFlattenString(EcmaVM* vm, Ec } else { ASSERT(Region::ObjectAddressToRange(reinterpret_cast(string))->InSharedHeap()); } - auto readBarrier = [thread](const void *obj, size_t offset) -> TaggedObject * { + auto readBarrierForLoad = [thread](const void *obj, size_t offset) -> TaggedObject* { return Barriers::GetTaggedObject(thread, obj, offset); }; - auto loadResult = stringTable_.template Load(std::move(readBarrier), hashcode, string->ToBaseString()); + auto loadResult = stringTable_.template Load(std::move(readBarrierForLoad), hashcode, string->ToBaseString()); if (loadResult.value != nullptr) { return EcmaString::FromBaseString(loadResult.value); } JSHandle stringHandle(thread, string); ThreadType* holder = GetThreadHolder(thread); + auto readBarrierForStoreOrLoad = [thread](const void *obj, size_t offset) -> TaggedObject* { + return Barriers::GetTaggedObject(thread, obj, offset); + }; BaseString *result = stringTable_.template StoreOrLoad< - true, decltype(readBarrier), common::ReadOnlyHandle>( - holder, std::move(readBarrier), hashcode, loadResult, stringHandle); + true, decltype(readBarrierForStoreOrLoad), common::ReadOnlyHandle>( + holder, std::move(readBarrierForStoreOrLoad), hashcode, loadResult, stringHandle); ASSERT(result != nullptr); return EcmaString::FromBaseString(result); } @@ -134,7 +137,7 @@ EcmaString* EcmaStringTableImpl::GetOrInternFlattenStringNoGC(EcmaVM* vm } else { ASSERT(Region::ObjectAddressToRange(reinterpret_cast(string))->InSharedHeap()); } - auto readBarrier = [thread](const void *obj, size_t offset) -> TaggedObject * { + auto readBarrier = [thread](const void *obj, size_t offset) -> TaggedObject* { return Barriers::GetTaggedObject(thread, obj, offset); }; auto loadResult = stringTable_.template Load(readBarrier, hashcode, string->ToBaseString()); @@ -157,7 +160,7 @@ EcmaString* EcmaStringTableImpl::GetOrInternStringFromCompressedSubStrin const uint8_t* utf8Data = EcmaStringAccessor(string).GetDataUtf8() + offset; uint32_t hashcode = EcmaStringAccessor::ComputeHashcodeUtf8(utf8Data, utf8Len, true); JSThread *thread = vm->GetAssociatedJSThread(); - auto readBarrier = [thread](const void *obj, size_t offset) -> TaggedObject * { + auto readBarrier = [thread](const void *obj, size_t offset) -> TaggedObject* { return Barriers::GetTaggedObject(thread, obj, offset); }; auto loadResult = stringTable_.template Load(std::move(readBarrier), hashcode, string, offset, utf8Len); @@ -207,7 +210,7 @@ EcmaString *EcmaStringTableImpl::GetOrInternString(EcmaVM *vm, EcmaStrin return strFlat; } uint32_t hashcode = EcmaStringAccessor(strFlat).GetHashcode(thread); - auto readBarrier = [thread](const void *obj, size_t offset) -> TaggedObject * { + auto readBarrier = [thread](const void *obj, size_t offset) -> TaggedObject* { return Barriers::GetTaggedObject(thread, obj, offset); }; auto loadResult = stringTable_.template Load(readBarrier, hashcode, strFlat->ToBaseString()); @@ -312,18 +315,21 @@ EcmaString* EcmaStringTableImpl::GetOrInternString(EcmaVM* vm, const uin JSThread* thread = vm->GetJSThread(); EcmaString* str = EcmaStringAccessor::CreateUtf16StringFromUtf8(vm, utf8Data, utf16Len, type); uint32_t hashcode = EcmaStringAccessor(str).GetHashcode(thread); - auto readBarrier = [thread](const void *obj, size_t offset) -> TaggedObject * { + auto readBarrierForLoad = [thread](const void *obj, size_t offset) -> TaggedObject* { return Barriers::GetTaggedObject(thread, obj, offset); }; - auto loadResult = stringTable_.template Load(std::move(readBarrier), hashcode, str->ToBaseString()); + auto loadResult = stringTable_.template Load(std::move(readBarrierForLoad), hashcode, str->ToBaseString()); if (loadResult.value != nullptr) { return EcmaString::FromBaseString(loadResult.value); } JSHandle strHandle(thread, str); ThreadType* holder = GetThreadHolder(vm->GetJSThread()); + auto readBarrierForStoreOrLoad = [thread](const void *obj, size_t offset) -> TaggedObject* { + return Barriers::GetTaggedObject(thread, obj, offset); + }; BaseString* result = stringTable_.template StoreOrLoad< - true, decltype(readBarrier), common::ReadOnlyHandle>( - holder, std::move(readBarrier), hashcode, loadResult, strHandle); + true, decltype(readBarrierForStoreOrLoad), common::ReadOnlyHandle>( + holder, std::move(readBarrierForStoreOrLoad), hashcode, loadResult, strHandle); ASSERT(result != nullptr); return EcmaString::FromBaseString(result); } @@ -366,7 +372,7 @@ EcmaString *EcmaStringTableImpl::TryGetInternString(JSThread *thread, co { uint32_t hashcode = EcmaStringAccessor(*string).GetHashcode(thread); EcmaString *str = *string; - auto readBarrier = [thread](const void *obj, size_t offset) -> TaggedObject * { + auto readBarrier = [thread](const void *obj, size_t offset) -> TaggedObject* { return Barriers::GetTaggedObject(thread, obj, offset); }; return EcmaString::FromBaseString( @@ -461,7 +467,7 @@ template bool EcmaStringTableImpl::CheckStringTableValidity(JSThread *thread) { bool isValid = true; - auto readBarrier = [thread](const void *obj, size_t offset) -> TaggedObject * { + auto readBarrier = [thread](const void *obj, size_t offset) -> TaggedObject* { return Barriers::GetTaggedObject(thread, obj, offset); }; stringTable_.Range(std::move(readBarrier), isValid);