diff --git a/ecmascript/builtins/builtins_shared_array.cpp b/ecmascript/builtins/builtins_shared_array.cpp index 947713c4ff502c2b896673678a42392d100d7d8c..b7c989669bb387d1bd77e670aec2e72831f97817 100644 --- a/ecmascript/builtins/builtins_shared_array.cpp +++ b/ecmascript/builtins/builtins_shared_array.cpp @@ -261,15 +261,6 @@ JSTaggedValue BuiltinsSharedArray::From(EcmaRuntimeCallInfo *argv) JSHandle undefined = thread->GlobalConstants()->GetHandledUndefined(); ObjectFactory *factory = thread->GetEcmaVM()->GetFactory(); if (!usingIterator->IsUndefined()) { - // Fast path for MapIterator - JSHandle iterator(thread, JSTaggedValue::Hole()); - if (!mapping && items->IsJSMapIterator()) { - iterator = JSIterator::GetIterator(thread, items, usingIterator); - if (iterator->IsJSMapIterator()) { - return JSMapIterator::MapIteratorToList(thread, iterator); - } - } - // a. If IsConstructor(C) is true, then // i. Let A be Construct(C). // b. Else, @@ -291,11 +282,10 @@ JSTaggedValue BuiltinsSharedArray::From(EcmaRuntimeCallInfo *argv) } JSHandle newArrayHandle(thread, newArray); // d. Let iterator be GetIterator(items, usingIterator). - if (iterator->IsHole()) { - iterator = JSIterator::GetIterator(thread, items, usingIterator); - // e. ReturnIfAbrupt(iterator). - RETURN_EXCEPTION_IF_ABRUPT_COMPLETION(thread); - } + JSHandle iterator(thread, JSTaggedValue::Hole()); + iterator = JSIterator::GetIterator(thread, items, usingIterator); + // e. ReturnIfAbrupt(iterator). + RETURN_EXCEPTION_IF_ABRUPT_COMPLETION(thread); // f. Let k be 0. int k = 0; // g. Repeat diff --git a/test/sharedtest/sendableobj/expect_output.txt b/test/sharedtest/sendableobj/expect_output.txt index 63ca9d9a46cd1485c878ded66cc15683423888aa..0578d756f7c1f5a9ed162e632f76835abfd7e253 100644 --- a/test/sharedtest/sendableobj/expect_output.txt +++ b/test/sharedtest/sendableobj/expect_output.txt @@ -19,4 +19,5 @@ string is sendable number is sendable bigInt is sendable function is not sendable -sendableFunc is sendable \ No newline at end of file +sendableFunc is sendable +Arr is sendable \ No newline at end of file diff --git a/test/sharedtest/sendableobj/sendable.ts b/test/sharedtest/sendableobj/sendable.ts index 70fba31267d59ecb88d83402376e9f1f6b03032e..f7cccd968bda20f440710f85911d22eae5e72e37 100644 --- a/test/sharedtest/sendableobj/sendable.ts +++ b/test/sharedtest/sendableobj/sendable.ts @@ -97,3 +97,11 @@ if (isSendable(func)) { print("sendableFunc is not sendable"); } +let sharedMap: SendableMap = new SendableMap(); +sharedMap.set(4, "value4"); +let arr = SendableArray.from(sharedMap.keys()); +if (isSendable(arr)) { + print("Arr is sendable"); +} else { + print("Arr is not sendable"); +}