diff --git a/ecmascript/serializer/base_serializer.cpp b/ecmascript/serializer/base_serializer.cpp index 44c38b1a1355b61b9a1698af09eb3d6d80e268cb..84e9d1c9850bb370fb23675a1b71db8a67ede0d8 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 8773cf217afa8c5a6181ac59257de5f9907506aa..10de953001114ad49cf86e939496a4c787df2f34 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