diff --git a/ecmascript/base/config.h b/ecmascript/base/config.h index a269f314..cc5553cd 100644 --- a/ecmascript/base/config.h +++ b/ecmascript/base/config.h @@ -21,6 +21,7 @@ namespace panda::ecmascript { #define ARK_NOINLINE __attribute__((noinline)) #define ECMASCRIPT_ENABLE_DEBUG_MODE 0 +#define ECMASCRIPT_ENABLE_ARK_CONTAINER 0 #define ECMASCRIPT_ENABLE_RUNTIME_STAT 0 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) /* diff --git a/ecmascript/builtins.cpp b/ecmascript/builtins.cpp index b23c4d65..a4112f31 100644 --- a/ecmascript/builtins.cpp +++ b/ecmascript/builtins.cpp @@ -313,9 +313,11 @@ void Builtins::InitializeGlobalObject(const JSHandle &env, const JSHa SetConstantObject(globalObject, "ArkTools", arkTools); } +#if ECMASCRIPT_ENABLE_ARK_CONTAINER // Set ArkPrivate JSHandle arkPrivate(InitializeArkPrivate(env)); SetConstantObject(globalObject, "ArkPrivate", arkPrivate); +#endif // Global object function SetFunction(env, globalObject, "eval", Global::NotSupportEval, FunctionLength::ONE); @@ -2769,6 +2771,19 @@ JSHandle Builtins::InitializeArkPrivate(const JSHandle &env JSHandle arkPrivate = factory_->NewEmptyJSObject(); SetFrozenFunction(env, arkPrivate, "Load", ContainersPrivate::Load, FunctionLength::ZERO); SetConstant(arkPrivate, "ArrayList", JSTaggedValue(static_cast(containers::ContainerTag::ArrayList))); + SetConstant(arkPrivate, "Queue", JSTaggedValue(static_cast(containers::ContainerTag::Queue))); + SetConstant(arkPrivate, "Deque", JSTaggedValue(static_cast(containers::ContainerTag::Deque))); + SetConstant(arkPrivate, "Stack", JSTaggedValue(static_cast(containers::ContainerTag::Stack))); + SetConstant(arkPrivate, "Vector", JSTaggedValue(static_cast(containers::ContainerTag::Vector))); + SetConstant(arkPrivate, "List", JSTaggedValue(static_cast(containers::ContainerTag::List))); + SetConstant(arkPrivate, "LinkedList", JSTaggedValue(static_cast(containers::ContainerTag::LinkedList))); + SetConstant(arkPrivate, "TreeMap", JSTaggedValue(static_cast(containers::ContainerTag::TreeMap))); + SetConstant(arkPrivate, "TreeSet", JSTaggedValue(static_cast(containers::ContainerTag::TreeSet))); + SetConstant(arkPrivate, "HashMap", JSTaggedValue(static_cast(containers::ContainerTag::HashMap))); + SetConstant(arkPrivate, "HashSet", JSTaggedValue(static_cast(containers::ContainerTag::HashSet))); + SetConstant(arkPrivate, "LightWightMap", JSTaggedValue(static_cast(containers::ContainerTag::LightWightMap))); + SetConstant(arkPrivate, "LightWightSet", JSTaggedValue(static_cast(containers::ContainerTag::LightWightSet))); + SetConstant(arkPrivate, "PlainArray", JSTaggedValue(static_cast(containers::ContainerTag::PlainArray))); return arkPrivate; } } // namespace panda::ecmascript diff --git a/ecmascript/containers/containers_private.h b/ecmascript/containers/containers_private.h index 2950ed48..ac830631 100644 --- a/ecmascript/containers/containers_private.h +++ b/ecmascript/containers/containers_private.h @@ -20,7 +20,23 @@ namespace panda::ecmascript::containers { enum FuncLength : uint8_t { ZERO = 0, ONE, TWO, THREE, FOUR }; -enum ContainerTag : uint8_t { ArrayList = 0, Queue, END }; +enum ContainerTag : uint8_t { + ArrayList = 0, + Queue, + Deque, + Stack, + Vector, + List, + LinkedList, + TreeMap, + TreeSet, + HashMap, + HashSet, + LightWightMap, + LightWightSet, + PlainArray, + END +}; // Using Lazy-loading container, including ArrayList, Queue, Stack, Vector, List, LinkedList, Deque, // TreeMap, TreeSet, HashMap, HashSet, LightWightMap, LightWightSet, PlainArray. // Use through ArkPrivate.Load([ContainerTag]) in js, ContainTag was declaerd in ArkPrivate like ArkPrivate::ArrayList. diff --git a/ecmascript/runtime_call_id.h b/ecmascript/runtime_call_id.h index e606a8fc..8937473c 100644 --- a/ecmascript/runtime_call_id.h +++ b/ecmascript/runtime_call_id.h @@ -516,7 +516,10 @@ namespace panda::ecmascript { V(WeakSet, Constructor) \ V(WeakSet, Delete) \ V(WeakSet, Add) \ - V(WeakSet, Has) + V(WeakSet, Has) \ + V(ArrayList, Constructor) \ + V(ArrayList, Add) \ + V(ArrayList, Iterator) #define ABSTRACT_OPERATION_LIST(V) \ V(JSTaggedValue, ToString) \ diff --git a/test/moduletest/container/container_arraylist.js b/test/moduletest/container/container_arraylist.js index b89ed726..76e41970 100644 --- a/test/moduletest/container/container_arraylist.js +++ b/test/moduletest/container/container_arraylist.js @@ -16,15 +16,15 @@ var fastarray = undefined; if (globalThis["ArkPrivate"] != undefined) { fastarray = ArkPrivate.Load(ArkPrivate.ArrayList); + let arr = new fastarray(); + arr.add(1); + arr.add(2); + print(arr[0]); + + try { + arr["aa"] = 3; + } catch (e) { + print(e); + } } -let arr = new fastarray(); -arr.add(1); -arr.add(2); -print(arr[0]); - -try { - arr["aa"] = 3; -} catch (e) { - print(e); -} \ No newline at end of file diff --git a/test/moduletest/container/expect_output.txt b/test/moduletest/container/expect_output.txt index 895975c3..d178c81f 100644 --- a/test/moduletest/container/expect_output.txt +++ b/test/moduletest/container/expect_output.txt @@ -12,5 +12,3 @@ # limitations under the License. container test start -1 -TypeError: Cannot set property on Container