From 91899d84703336e89c00546e0fd299a59eab3bf8 Mon Sep 17 00:00:00 2001 From: wuxiesaber Date: Thu, 11 Sep 2025 16:45:30 +0800 Subject: [PATCH] fix repeat using of std::move Issue: https://gitee.com/openharmony/arkcompiler_ets_runtime/issues/ICXKER Signed-off-by: wuxiesaber Change-Id: I47d6cc11239e84c9f9cc4abfd88db4af7373a52c --- ecmascript/ecma_string_table_optimization.cpp | 32 +++++++++++-------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/ecmascript/ecma_string_table_optimization.cpp b/ecmascript/ecma_string_table_optimization.cpp index 615cd3d83e..d0af0de0db 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); -- Gitee