diff --git a/ecmascript/js_hclass.cpp b/ecmascript/js_hclass.cpp index 2f2755cfb23ed3b6b7d01a60b977a5e1a79e2552..4a8248213ecd04e57b39a7e8bc20d0f549c66b1a 100644 --- a/ecmascript/js_hclass.cpp +++ b/ecmascript/js_hclass.cpp @@ -1097,8 +1097,9 @@ void JSHClass::RefreshUsers(const JSThread *thread, const JSHandle &ol if (!newHclass->GetProtoChangeDetails().IsProtoChangeDetails()) { newHclass->SetProtoChangeDetails(thread, oldHclass->GetProtoChangeDetails()); } - oldHclass->SetProtoChangeDetails(thread, JSTaggedValue::Undefined()); if (onceRegistered) { + ProtoChangeDetails::Cast(oldHclass->GetProtoChangeDetails().GetTaggedObject()) + ->SetRegisterIndex(ProtoChangeDetails::UNREGISTERED); if (newHclass->GetProtoChangeDetails().IsProtoChangeDetails()) { ProtoChangeDetails::Cast(newHclass->GetProtoChangeDetails().GetTaggedObject()) ->SetRegisterIndex(ProtoChangeDetails::UNREGISTERED); diff --git a/test/moduletest/propertydetector/expect_output.txt b/test/moduletest/propertydetector/expect_output.txt index d6ce59a8ef1f343d3e9dd396a5482c06e190bfd9..3fad04a91928a4a67ad4e68f2dc62b6050efa29c 100644 --- a/test/moduletest/propertydetector/expect_output.txt +++ b/test/moduletest/propertydetector/expect_output.txt @@ -25,3 +25,4 @@ false false true false +RegisterOnProtoChain success diff --git a/test/moduletest/propertydetector/propertydetector.js b/test/moduletest/propertydetector/propertydetector.js index 9475f0dfe57bc25754bb3ee8185656477c4bda37..104f971e81d8d830146514f7b5adc2cd9679dfb8 100644 --- a/test/moduletest/propertydetector/propertydetector.js +++ b/test/moduletest/propertydetector/propertydetector.js @@ -60,4 +60,11 @@ print(ArkTools.isRegExpReplaceDetectorValid()) print(ArkTools.isNumberStringNotRegexpLikeDetectorValid()); String.prototype[Symbol.matchAll] = function () {return "aaa"} -print(ArkTools.isNumberStringNotRegexpLikeDetectorValid()); \ No newline at end of file +print(ArkTools.isNumberStringNotRegexpLikeDetectorValid()); + +for (let i = 0; i < 15; i++) { + let __proto__ = ['a', 'b']; + 0x3fffffff.__proto__.__proto__ = [1, 2, 3]; + __proto__.var06 = 1; +} +print("RegisterOnProtoChain success");