From 96472818c4284b9cc1bcb959c112ce5ce38d92cf Mon Sep 17 00:00:00 2001 From: xwcai98 Date: Tue, 5 Aug 2025 23:45:49 +0800 Subject: [PATCH] Fix Array flatMap Issue: Signed-off-by: xwcai98 Change-Id: Ia4773027cdc5d6a9b37a472fce5b84cf9fa446f9 --- .../compiler/builtins/builtins_array_stub_builder.cpp | 6 +++++- test/moduletest/arrayflatmap/arrayflatmap.js | 10 +++++++++- test/moduletest/arrayflatmap/expect_output.txt | 1 + 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/ecmascript/compiler/builtins/builtins_array_stub_builder.cpp b/ecmascript/compiler/builtins/builtins_array_stub_builder.cpp index 81ce3b244e..735e341971 100644 --- a/ecmascript/compiler/builtins/builtins_array_stub_builder.cpp +++ b/ecmascript/compiler/builtins/builtins_array_stub_builder.cpp @@ -5284,7 +5284,11 @@ void BuiltinsArrayStubBuilder::FlatMap(GateRef glue, GateRef thisValue, GateRef BRANCH(TaggedIsHeapObject(retValue), &retValueIsHeapObject, &loopEnd); Bind(&retValueIsHeapObject); { - BRANCH_NO_WEIGHT(IsJsArray(glue, retValue), &retValueIsJsArray, &loopEnd); + Label checkProxy(env); + Label notProxy(env); + BRANCH_NO_WEIGHT(IsJsArray(glue, retValue), &retValueIsJsArray, &checkProxy); + Bind(&checkProxy); + BRANCH_UNLIKELY(IsJsProxy(glue, retValue), slowPath, &loopEnd); } Bind(&retValueIsJsArray); { diff --git a/test/moduletest/arrayflatmap/arrayflatmap.js b/test/moduletest/arrayflatmap/arrayflatmap.js index 372ee0891f..2df83ff2f2 100644 --- a/test/moduletest/arrayflatmap/arrayflatmap.js +++ b/test/moduletest/arrayflatmap/arrayflatmap.js @@ -85,4 +85,12 @@ let res = arr.flatMap((x)=>{ print(res); print(res.length) - +{ + let arr1 = [0, 1]; + let arr2 = [1, 2]; + let proxy1 = new Proxy(arr1, {}); + let proxy2 = new Proxy(arr2, {}); + let arr3 = [proxy1, proxy2]; + let res = arr3.flatMap(x=>x); + print(res[0]); +} diff --git a/test/moduletest/arrayflatmap/expect_output.txt b/test/moduletest/arrayflatmap/expect_output.txt index d48a4bf503..137001033a 100644 --- a/test/moduletest/arrayflatmap/expect_output.txt +++ b/test/moduletest/arrayflatmap/expect_output.txt @@ -20,3 +20,4 @@ true 1,1,1,3,9,4,16,5,25 1,2,3,4,5,6,7,8 8 +0 \ No newline at end of file -- Gitee