%PDF- %PDF-
| Direktori : /home/vacivi36/vittasync.vacivitta.com.br/vittasync/node/deps/v8/src/builtins/ |
| Current File : /home/vacivi36/vittasync.vacivitta.com.br/vittasync/node/deps/v8/src/builtins/map-groupby.tq |
// Copyright 2023 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
transitioning javascript builtin MapGroupBy(
js-implicit context: NativeContext, receiver: JSAny)(items: JSAny,
callback: JSAny): JSAny {
// 1. Let groups be ? GroupBy(items, callbackfn, zero).
const groups: OrderedHashMap =
GroupByImpl(items, callback, /* coerceToProperty */ False, 'Map.groupBy');
// 2. Let map be ! Construct(%Map%).
// 3. For each Record { [[Key]], [[Elements]] } g of groups, do
// a. Let elements be CreateArrayFromList(g.[[Elements]]).
// b. Let entry be the Record { [[Key]]: g.[[Key]], [[Value]]: elements }.
// c. Append entry to map.[[MapData]].
// TODO(v8:12499): Determine more specific elements map if worth it.
try {
let iter = collections::NewUnmodifiedOrderedHashMapIterator(groups);
const arrayMap = GetFastPackedElementsJSArrayMap();
while (true) {
const entry = iter.Next() otherwise Done;
const elements = ArrayListElements(UnsafeCast<ArrayList>(entry.value));
const array = NewJSArray(arrayMap, elements);
iter.UnsafeStoreValueAtCurrentEntry(array);
}
} label Done {}
// 4. Return map.
return new JSMap{
map: *NativeContextSlot(ContextSlot::JS_MAP_MAP_INDEX),
properties_or_hash: kEmptyFixedArray,
elements: kEmptyFixedArray,
table: groups
};
}