diff --git a/ecmascript/ecma_macros.h b/ecmascript/ecma_macros.h index 7c4d37a34debab2ee806d415856696e5073ea9a9..b13285f0a5336d52b3b38fea8a94a2285664b763 100644 --- a/ecmascript/ecma_macros.h +++ b/ecmascript/ecma_macros.h @@ -371,14 +371,14 @@ // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) #define DECL_VISIT_OBJECT(BEGIN_OFFSET, SIZE) \ - void Visitor(const EcmaObjectRangeVisitor &visitor) \ + void VisitRangeSlot(const EcmaObjectRangeVisitor &visitor) \ { \ visitor(this, ObjectSlot(ToUintPtr(this) + BEGIN_OFFSET), ObjectSlot(ToUintPtr(this) + SIZE)); \ } // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) #define DECL_VISIT_OBJECT_FOR_JS_OBJECT(PARENTCLASS, BEGIN_OFFSET, SIZE) \ - void Visitor(const EcmaObjectRangeVisitor &visitor) \ + void VisitRangeSlot(const EcmaObjectRangeVisitor &visitor) \ { \ VisitObjects(visitor); \ /* visit in object fields */ \ diff --git a/ecmascript/global_env.h b/ecmascript/global_env.h index a2d4ce9fc70c759d9325456afebc18c43d9182a6..6a9eff025f7caa0f9e8d2c21820f3f5d6270618a 100644 --- a/ecmascript/global_env.h +++ b/ecmascript/global_env.h @@ -203,7 +203,7 @@ public: DECL_DUMP() - inline void Visitor(const EcmaObjectRangeVisitor &v) + inline void VisitRangeSlot(const EcmaObjectRangeVisitor &v) { v(this, ObjectSlot(ToUintPtr(this) + HEADER_SIZE), ObjectSlot(ToUintPtr(this) + SIZE)); } diff --git a/ecmascript/global_env_constants.h b/ecmascript/global_env_constants.h index 50de7a089752a6c400013ee4b476fecd0543cc45..18393020efebe1dce4770ea6239e4554cf690bd1 100644 --- a/ecmascript/global_env_constants.h +++ b/ecmascript/global_env_constants.h @@ -350,7 +350,7 @@ public: GLOBAL_ENV_CONSTANT_ACCESSOR(DECL_GET) #undef DECL_GET - void Visitor(const RootRangeVisitor &visitor) + void VisitRangeSlot(const RootRangeVisitor &visitor) { visitor(ecmascript::Root::ROOT_VM, ObjectSlot(ToUintPtr(BeginSlot())), ObjectSlot(ToUintPtr(EndSlot()))); } diff --git a/ecmascript/js_object.h b/ecmascript/js_object.h index d0e6be3516cf7785f17b7a6918ecc73e70bcd0c3..9030b10ef678b22ae3c335ce8fd41b5e2fec85e8 100644 --- a/ecmascript/js_object.h +++ b/ecmascript/js_object.h @@ -339,13 +339,17 @@ public: void SetHash(int32_t hash); int32_t GetHash() const; + void InitializeHash() + { + Barriers::SetDynPrimitive(this, ECMAObject::HASH_OFFSET, JSTaggedValue(0).GetRawData()); + } void* GetNativePointerField(int32_t index) const; void SetNativePointerField(int32_t index, void *data); int32_t GetNativePointerFieldCount() const; void SetNativePointerFieldCount(int32_t count); - void Visitor(const EcmaObjectRangeVisitor &visitor) const + void VisitRangeSlot(const EcmaObjectRangeVisitor &visitor) const { TaggedObject *object = const_cast(reinterpret_cast(this)); visitor(object, ObjectSlot(ToUintPtr(this) + HASH_OFFSET), ObjectSlot(ToUintPtr(this) + SIZE)); @@ -354,6 +358,7 @@ public: void VisitObjects([[maybe_unused]] const EcmaObjectRangeVisitor &visitor) const { // no field in this object + VisitRangeSlot(visitor); } }; diff --git a/ecmascript/js_thread.cpp b/ecmascript/js_thread.cpp index f2352867b9ef8d99579a91b8946df96b78b13597..b364567fcc39d5add3f739255b57f41ca353c55b 100644 --- a/ecmascript/js_thread.cpp +++ b/ecmascript/js_thread.cpp @@ -88,7 +88,7 @@ void JSThread::Iterate(const RootVisitor &v0, const RootRangeVisitor &v1) } // visit global Constant - globalConst_.Visitor(v1); + globalConst_.VisitRangeSlot(v1); // visit stack roots EcmaFrameHandler(currentFrame_).Iterate(v0, v1); // visit internal call params diff --git a/ecmascript/mem/heap_roots-inl.h b/ecmascript/mem/heap_roots-inl.h index deb616d11bc6b25ac5fbe3bba16aa49f26b8be13..37bdafe1cba3aa52478065eb48af5184a0622d3d 100644 --- a/ecmascript/mem/heap_roots-inl.h +++ b/ecmascript/mem/heap_roots-inl.h @@ -79,94 +79,94 @@ void HeapRootManager::MarkObjectBody(TaggedObject *object, JSHClass *klass, cons case JSType::JS_URI_ERROR: case JSType::JS_SYNTAX_ERROR: case JSType::JS_ITERATOR: - JSObject::Cast(object)->Visitor(visitor); + JSObject::Cast(object)->VisitRangeSlot(visitor); break; case JSType::JS_GLOBAL_OBJECT: - JSGlobalObject::Cast(object)->Visitor(visitor); + JSGlobalObject::Cast(object)->VisitRangeSlot(visitor); break; case JSType::JS_FUNCTION_BASE: - JSFunctionBase::Cast(object)->Visitor(visitor); + JSFunctionBase::Cast(object)->VisitRangeSlot(visitor); break; case JSType::JS_FUNCTION: - JSFunction::Cast(object)->Visitor(visitor); + JSFunction::Cast(object)->VisitRangeSlot(visitor); break; case JSType::JS_GENERATOR_FUNCTION: - JSGeneratorFunction::Cast(object)->Visitor(visitor); + JSGeneratorFunction::Cast(object)->VisitRangeSlot(visitor); break; case JSType::JS_PROXY_REVOC_FUNCTION: - JSProxyRevocFunction::Cast(object)->Visitor(visitor); + JSProxyRevocFunction::Cast(object)->VisitRangeSlot(visitor); break; case JSType::JS_PROMISE_REACTIONS_FUNCTION: - JSPromiseReactionsFunction::Cast(object)->Visitor(visitor); + JSPromiseReactionsFunction::Cast(object)->VisitRangeSlot(visitor); break; case JSType::JS_PROMISE_EXECUTOR_FUNCTION: - JSPromiseExecutorFunction::Cast(object)->Visitor(visitor); + JSPromiseExecutorFunction::Cast(object)->VisitRangeSlot(visitor); break; case JSType::JS_PROMISE_ALL_RESOLVE_ELEMENT_FUNCTION: - JSPromiseAllResolveElementFunction::Cast(object)->Visitor(visitor); + JSPromiseAllResolveElementFunction::Cast(object)->VisitRangeSlot(visitor); break; case JSType::JS_ASYNC_FUNCTION: - JSAsyncFunction::Cast(object)->Visitor(visitor); + JSAsyncFunction::Cast(object)->VisitRangeSlot(visitor); break; case JSType::JS_ASYNC_AWAIT_STATUS_FUNCTION: - JSAsyncAwaitStatusFunction::Cast(object)->Visitor(visitor); + JSAsyncAwaitStatusFunction::Cast(object)->VisitRangeSlot(visitor); break; case JSType::JS_REG_EXP: - JSRegExp::Cast(object)->Visitor(visitor); + JSRegExp::Cast(object)->VisitRangeSlot(visitor); break; case JSType::JS_SET: - JSSet::Cast(object)->Visitor(visitor); + JSSet::Cast(object)->VisitRangeSlot(visitor); break; case JSType::JS_MAP: - JSMap::Cast(object)->Visitor(visitor); + JSMap::Cast(object)->VisitRangeSlot(visitor); break; case JSType::JS_WEAK_MAP: - JSWeakMap::Cast(object)->Visitor(visitor); + JSWeakMap::Cast(object)->VisitRangeSlot(visitor); break; case JSType::JS_WEAK_SET: - JSWeakSet::Cast(object)->Visitor(visitor); + JSWeakSet::Cast(object)->VisitRangeSlot(visitor); break; case JSType::JS_DATE: - JSDate::Cast(object)->Visitor(visitor); + JSDate::Cast(object)->VisitRangeSlot(visitor); break; case JSType::JS_FORIN_ITERATOR: - JSForInIterator::Cast(object)->Visitor(visitor); + JSForInIterator::Cast(object)->VisitRangeSlot(visitor); break; case JSType::JS_MAP_ITERATOR: - JSMapIterator::Cast(object)->Visitor(visitor); + JSMapIterator::Cast(object)->VisitRangeSlot(visitor); break; case JSType::JS_SET_ITERATOR: - JSSetIterator::Cast(object)->Visitor(visitor); + JSSetIterator::Cast(object)->VisitRangeSlot(visitor); break; case JSType::JS_ARRAY_ITERATOR: - JSArrayIterator::Cast(object)->Visitor(visitor); + JSArrayIterator::Cast(object)->VisitRangeSlot(visitor); break; case JSType::JS_STRING_ITERATOR: - JSStringIterator::Cast(object)->Visitor(visitor); + JSStringIterator::Cast(object)->VisitRangeSlot(visitor); break; case JSType::JS_ARRAY_BUFFER: - JSArrayBuffer::Cast(object)->Visitor(visitor); + JSArrayBuffer::Cast(object)->VisitRangeSlot(visitor); break; case JSType::JS_PROMISE: - JSPromise::Cast(object)->Visitor(visitor); + JSPromise::Cast(object)->VisitRangeSlot(visitor); break; case JSType::JS_DATA_VIEW: - JSDataView::Cast(object)->Visitor(visitor); + JSDataView::Cast(object)->VisitRangeSlot(visitor); break; case JSType::JS_BOUND_FUNCTION: - JSBoundFunction::Cast(object)->Visitor(visitor); + JSBoundFunction::Cast(object)->VisitRangeSlot(visitor); break; case JSType::JS_ARGUMENTS: - JSArguments::Cast(object)->Visitor(visitor); + JSArguments::Cast(object)->VisitRangeSlot(visitor); break; case JSType::JS_GENERATOR_OBJECT: - JSGeneratorObject::Cast(object)->Visitor(visitor); + JSGeneratorObject::Cast(object)->VisitRangeSlot(visitor); break; case JSType::JS_ASYNC_FUNC_OBJECT: - JSAsyncFuncObject::Cast(object)->Visitor(visitor); + JSAsyncFuncObject::Cast(object)->VisitRangeSlot(visitor); break; case JSType::JS_ARRAY: - JSArray::Cast(object)->Visitor(visitor); + JSArray::Cast(object)->VisitRangeSlot(visitor); break; case JSType::JS_TYPED_ARRAY: case JSType::JS_INT8_ARRAY: @@ -178,18 +178,18 @@ void HeapRootManager::MarkObjectBody(TaggedObject *object, JSHClass *klass, cons case JSType::JS_UINT32_ARRAY: case JSType::JS_FLOAT32_ARRAY: case JSType::JS_FLOAT64_ARRAY: - JSTypedArray::Cast(object)->Visitor(visitor); + JSTypedArray::Cast(object)->VisitRangeSlot(visitor); break; case JSType::JS_PRIMITIVE_REF: - JSPrimitiveRef::Cast(object)->Visitor(visitor); + JSPrimitiveRef::Cast(object)->VisitRangeSlot(visitor); break; case JSType::JS_PROXY: - JSProxy::Cast(object)->Visitor(visitor); + JSProxy::Cast(object)->VisitRangeSlot(visitor); break; case JSType::HCLASS: // semi gc is not needed to visit dyn class if (gc_type != GCType::SEMI_GC) { - JSHClass::Cast(object)->Visitor(visitor); + JSHClass::Cast(object)->VisitRangeSlot(visitor); } break; case JSType::STRING: @@ -197,97 +197,97 @@ void HeapRootManager::MarkObjectBody(TaggedObject *object, JSHClass *klass, cons break; case JSType::TAGGED_ARRAY: case JSType::TAGGED_DICTIONARY: - TaggedArray::Cast(object)->Visitor(visitor); + TaggedArray::Cast(object)->VisitRangeSlot(visitor); break; case JSType::GLOBAL_ENV: - GlobalEnv::Cast(object)->Visitor(visitor); + GlobalEnv::Cast(object)->VisitRangeSlot(visitor); break; case JSType::ACCESSOR_DATA: case JSType::INTERNAL_ACCESSOR: - AccessorData::Cast(object)->Visitor(visitor); + AccessorData::Cast(object)->VisitRangeSlot(visitor); break; case JSType::SYMBOL: - JSSymbol::Cast(object)->Visitor(visitor); + JSSymbol::Cast(object)->VisitRangeSlot(visitor); break; case JSType::OBJECT_WRAPPER: - ObjectWrapper::Cast(object)->Visitor(visitor); + ObjectWrapper::Cast(object)->VisitRangeSlot(visitor); break; case JSType::JS_GENERATOR_CONTEXT: - GeneratorContext::Cast(object)->Visitor(visitor); + GeneratorContext::Cast(object)->VisitRangeSlot(visitor); break; case JSType::PROTOTYPE_HANDLER: - PrototypeHandler::Cast(object)->Visitor(visitor); + PrototypeHandler::Cast(object)->VisitRangeSlot(visitor); break; case JSType::TRANSITION_HANDLER: - TransitionHandler::Cast(object)->Visitor(visitor); + TransitionHandler::Cast(object)->VisitRangeSlot(visitor); break; case JSType::PROPERTY_BOX: - PropertyBox::Cast(object)->Visitor(visitor); + PropertyBox::Cast(object)->VisitRangeSlot(visitor); break; case JSType::PROTO_CHANGE_MARKER: break; case JSType::PROTOTYPE_INFO: - ProtoChangeDetails::Cast(object)->Visitor(visitor); + ProtoChangeDetails::Cast(object)->VisitRangeSlot(visitor); break; case JSType::TEMPLATE_MAP: UNREACHABLE(); break; case JSType::PROMISE_CAPABILITY: - PromiseCapability::Cast(object)->Visitor(visitor); + PromiseCapability::Cast(object)->VisitRangeSlot(visitor); break; case JSType::PROMISE_RECORD: - PromiseRecord::Cast(object)->Visitor(visitor); + PromiseRecord::Cast(object)->VisitRangeSlot(visitor); break; case JSType::RESOLVING_FUNCTIONS_RECORD: - ResolvingFunctionsRecord::Cast(object)->Visitor(visitor); + ResolvingFunctionsRecord::Cast(object)->VisitRangeSlot(visitor); break; case JSType::PROMISE_REACTIONS: - PromiseReaction::Cast(object)->Visitor(visitor); + PromiseReaction::Cast(object)->VisitRangeSlot(visitor); break; case JSType::PROMISE_ITERATOR_RECORD: - PromiseIteratorRecord::Cast(object)->Visitor(visitor); + PromiseIteratorRecord::Cast(object)->VisitRangeSlot(visitor); break; case JSType::MICRO_JOB_QUEUE: - job::MicroJobQueue::Cast(object)->Visitor(visitor); + job::MicroJobQueue::Cast(object)->VisitRangeSlot(visitor); break; case JSType::PENDING_JOB: - job::PendingJob::Cast(object)->Visitor(visitor); + job::PendingJob::Cast(object)->VisitRangeSlot(visitor); break; case JSType::FUNCTION_EXTRA_INFO: - JSFunctionExtraInfo::Cast(object)->Visitor(visitor); + JSFunctionExtraInfo::Cast(object)->VisitRangeSlot(visitor); break; case JSType::COMPLETION_RECORD: - CompletionRecord::Cast(object)->Visitor(visitor); + CompletionRecord::Cast(object)->VisitRangeSlot(visitor); break; case JSType::ECMA_MODULE: - EcmaModule::Cast(object)->Visitor(visitor); + EcmaModule::Cast(object)->VisitRangeSlot(visitor); break; case JSType::PROGRAM: - Program::Cast(object)->Visitor(visitor); + Program::Cast(object)->VisitRangeSlot(visitor); break; case JSType::LEXICAL_FUNCTION: - LexicalFunction::Cast(object)->Visitor(visitor); + LexicalFunction::Cast(object)->VisitRangeSlot(visitor); break; case JSType::JS_INTL: - JSIntl::Cast(object)->Visitor(visitor); + JSIntl::Cast(object)->VisitRangeSlot(visitor); break; case JSType::JS_NUMBER_FORMAT: - JSNumberFormat::Cast(object)->Visitor(visitor); + JSNumberFormat::Cast(object)->VisitRangeSlot(visitor); break; case JSType::JS_LOCALE: - JSLocale::Cast(object)->Visitor(visitor); + JSLocale::Cast(object)->VisitRangeSlot(visitor); break; case JSType::JS_DATE_TIME_FORMAT: - JSDateTimeFormat::Cast(object)->Visitor(visitor); + JSDateTimeFormat::Cast(object)->VisitRangeSlot(visitor); break; case JSType::JS_RELATIVE_TIME_FORMAT: - JSRelativeTimeFormat::Cast(object)->Visitor(visitor); + JSRelativeTimeFormat::Cast(object)->VisitRangeSlot(visitor); break; case JSType::JS_INTL_BOUND_FUNCTION: - JSIntlBoundFunction::Cast(object)->Visitor(visitor); + JSIntlBoundFunction::Cast(object)->VisitRangeSlot(visitor); break; case JSType::JS_NATIVE_OBJECT: - JSNativeObject::Cast(object)->Visitor(visitor); + JSNativeObject::Cast(object)->VisitRangeSlot(visitor); break; default: UNREACHABLE(); diff --git a/ecmascript/object_factory.cpp b/ecmascript/object_factory.cpp index c44e7fe41a3f8dea465014d5414905810041c38c..0e4ed0a3000e3f2b8c446f60f5d208e1ccacdf1c 100644 --- a/ecmascript/object_factory.cpp +++ b/ecmascript/object_factory.cpp @@ -290,7 +290,7 @@ JSHandle ObjectFactory::NewJSObject(const JSHandle &jshclass NewObjectHook(); JSHandle obj(thread_, JSObject::Cast(NewDynObject(jshclass, JSHClass::DEFAULT_CAPACITY_OF_IN_OBJECTS))); JSHandle emptyArray = EmptyArray(); - Barriers::SetDynPrimitive(*obj, ECMAObject::HASH_OFFSET, JSTaggedValue(0).GetRawData()); + obj->InitializeHash(); obj->SetElements(thread_, emptyArray, SKIP_BARRIER); obj->SetProperties(thread_, emptyArray, SKIP_BARRIER); return obj; diff --git a/ecmascript/snapshot/mem/snapshot.cpp b/ecmascript/snapshot/mem/snapshot.cpp index 30c2370068d2f8faa593008da2ed447827e0b986..0d114f14c0761c59a6ab4b696e8925101897e63b 100644 --- a/ecmascript/snapshot/mem/snapshot.cpp +++ b/ecmascript/snapshot/mem/snapshot.cpp @@ -59,7 +59,7 @@ void SnapShot::MakeSnapShotProgramObject(Program *program, const panda_file::Fil // handle GlobalEnvConstants auto constant = const_cast(vm_->GetJSThread()->GlobalConstants()); - constant->Visitor([&objectQueue, &data](Root type, ObjectSlot start, ObjectSlot end) { + constant->VisitRangeSlot([&objectQueue, &data](Root type, ObjectSlot start, ObjectSlot end) { SerializeHelper::AddTaggedObjectRangeToData(start, end, &objectQueue, &data); }); diff --git a/ecmascript/tagged_array.h b/ecmascript/tagged_array.h index 56124a242864fb99efa4e3c8210e2ce87091511c..127d66ff90e87e4396b37d3521a4f6726b6b10c2 100644 --- a/ecmascript/tagged_array.h +++ b/ecmascript/tagged_array.h @@ -99,7 +99,7 @@ public: return oldLength - newLength > MAX_END_UNUSED; } inline void Trim(JSThread *thread, array_size_t newLength); - void Visitor(const EcmaObjectRangeVisitor &v) + void VisitRangeSlot(const EcmaObjectRangeVisitor &v) { uintptr_t dataAddr = ToUintPtr(this) + TaggedArray::GetDataOffset(); v(this, ObjectSlot(dataAddr), ObjectSlot(dataAddr + GetLength() * JSTaggedValue::TaggedTypeSize()));