diff --git a/ecmascript/js_stable_array.cpp b/ecmascript/js_stable_array.cpp index 9ce518e462..16794a868f 100644 --- a/ecmascript/js_stable_array.cpp +++ b/ecmascript/js_stable_array.cpp @@ -78,6 +78,9 @@ JSTaggedValue JSStableArray::Pop(JSHandle receiver, EcmaRuntimeCallInfo } else { elements->Set(thread, index, JSTaggedValue::Hole()); } + } else { + JSHandle thisObjVal(receiver); + result = JSArray::FastGetPropertyByValue(thread, thisObjVal, index).GetTaggedValue(); } receiver->SetArrayLength(thread, index); return result.IsHole() ? JSTaggedValue::Undefined() : result; diff --git a/test/moduletest/BUILD.gn b/test/moduletest/BUILD.gn index 265ff8cc6b..fb26a70620 100644 --- a/test/moduletest/BUILD.gn +++ b/test/moduletest/BUILD.gn @@ -22,6 +22,7 @@ group("ark_js_moduletest") { "arrayfindindex", "arrayforeach", "arrayjoin", + "arraypop", "arraytoreversed", "arraytospliced", "arraywith", @@ -166,6 +167,7 @@ group("ark_asm_test") { "arrayfindindex", "arrayforeach", "arrayjoin", + "arraypop", "arraysort", "arrayprotochange", "asmstackoverflow", @@ -288,6 +290,7 @@ group("ark_asm_single_step_test") { "arrayflat", "arrayforeach", "arrayjoin", + "arraypop", "arrayprotochange", "asmstackoverflow", "assignproxy", diff --git a/test/moduletest/arraypop/BUILD.gn b/test/moduletest/arraypop/BUILD.gn new file mode 100644 index 0000000000..627b506ac1 --- /dev/null +++ b/test/moduletest/arraypop/BUILD.gn @@ -0,0 +1,18 @@ +# Copyright (c) 2023 Shenzhen Kaihong Digital Industry Development Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//arkcompiler/ets_runtime/test/test_helper.gni") + +host_moduletest_action("arraypop") { + deps = [] +} diff --git a/test/moduletest/arraypop/arraypop.js b/test/moduletest/arraypop/arraypop.js new file mode 100644 index 0000000000..095bdcba86 --- /dev/null +++ b/test/moduletest/arraypop/arraypop.js @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2023 Shenzhen Kaihong Digital Industry Development Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * @tc.name:arrayprotochange + * @tc.desc:test Array function when prototype changes + * @tc.type: FUNC + * @tc.require: issueI7O616 + */ + +(function () { + var array = [,]; + function pop() { + return array.pop(); + } + array.__proto__.push(6); + print(pop()); +})(); \ No newline at end of file diff --git a/test/moduletest/arraypop/expect_output.txt b/test/moduletest/arraypop/expect_output.txt new file mode 100644 index 0000000000..337be82824 --- /dev/null +++ b/test/moduletest/arraypop/expect_output.txt @@ -0,0 +1,14 @@ +# Copyright (c) 2023 Shenzhen Kaihong Digital Industry Development Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +6