From 34022477fef905740476af5b055ed26dbcacce1b Mon Sep 17 00:00:00 2001 From: duomingliang Date: Thu, 4 Sep 2025 15:21:01 +0800 Subject: [PATCH] fix lazy deopt dependentInfos serializer errror Issue: https://gitee.com/openharmony/arkcompiler_ets_frontend/issues/ICWD74 Description: fix lazy deopt dependentInfos serializer errror Signed-off-by: duomingliang Change-Id: I59e862164aee1c56bb3d3c3f893aaec0603b64f7 --- ecmascript/serializer/base_serializer.cpp | 3 +- .../serializer/tests/serializer_test.cpp | 33 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/ecmascript/serializer/base_serializer.cpp b/ecmascript/serializer/base_serializer.cpp index 44c38b1a13..84e9d1c985 100644 --- a/ecmascript/serializer/base_serializer.cpp +++ b/ecmascript/serializer/base_serializer.cpp @@ -161,7 +161,8 @@ void BaseSerializer::SerializeHClassFieldIndividually(TaggedObject *root, Object break; } case JSHClass::TRANSTIONS_OFFSET: - case JSHClass::PARENT_OFFSET: { + case JSHClass::PARENT_OFFSET: + case JSHClass::DEPENDENT_INFOS_OFFSET: { data_->WriteEncodeFlag(EncodeFlag::PRIMITIVE); data_->WriteJSTaggedValue(JSTaggedValue::Undefined()); slot++; diff --git a/ecmascript/serializer/tests/serializer_test.cpp b/ecmascript/serializer/tests/serializer_test.cpp index 8773cf217a..10de953001 100644 --- a/ecmascript/serializer/tests/serializer_test.cpp +++ b/ecmascript/serializer/tests/serializer_test.cpp @@ -3071,4 +3071,37 @@ HWTEST_F_L0(JSSerializerTest, SerializeSourceTextModuleBinding) } delete serializer; }; + +HWTEST_F_L0(JSSerializerTest, SerializeJSHClass) +{ + ObjectFactory *factory = thread->GetEcmaVM()->GetFactory(); + JSHandle env = thread->GetEcmaVM()->GetGlobalEnv(); + JSHandle func = factory->NewJSFunction(env, nullptr, FunctionKind::NORMAL_FUNCTION); + JSHandle hclass = + factory->NewEcmaHClass(JSObject::SIZE, JSType::JS_OBJECT, env->GetObjectFunctionPrototype()); + // set proto change marker + JSHandle markerHandle = factory->NewProtoChangeMarker(); + markerHandle->SetHasChanged(false); + markerHandle->SetNotFoundHasChanged(false); + hclass->SetProtoChangeMarker(thread, markerHandle.GetTaggedValue()); + // set proto change details + JSHandle protoDetailsHandle = factory->NewProtoChangeDetails(); + hclass->SetProtoChangeDetails(thread, protoDetailsHandle); + // set enum cache + JSHandle enumCache = factory->NewEnumCache(); + hclass->SetEnumCache(thread, enumCache); + // set dependentinfos + auto dependentInfos = factory->NewTaggedArray(2); + dependentInfos->Set(thread, 0, func.GetTaggedValue()); + dependentInfos->Set(thread, 1, func.GetTaggedValue()); + hclass->SetDependentInfos(thread, dependentInfos.GetTaggedValue()); + // serialize check + ValueSerializer *serializer = new ModuleSerializer(thread); + bool success = serializer->WriteValue(thread, JSHandle(hclass), + JSHandle(thread, JSTaggedValue::Undefined()), + JSHandle(thread, JSTaggedValue::Undefined())); + EXPECT_TRUE(success) << "Serialize js hclass fail"; + std::unique_ptr data = serializer->Release(); + delete serializer; +} } // namespace panda::test -- Gitee