11cb0ef41Sopenharmony_ci// Copyright 2018 the V8 project authors. All rights reserved.
21cb0ef41Sopenharmony_ci// Use of this source code is governed by a BSD-style license that can be
31cb0ef41Sopenharmony_ci// found in the LICENSE file.
41cb0ef41Sopenharmony_ci
51cb0ef41Sopenharmony_ci#include 'src/builtins/builtins-collections-gen.h'
61cb0ef41Sopenharmony_ci
71cb0ef41Sopenharmony_cinamespace collections {
81cb0ef41Sopenharmony_ci@export
91cb0ef41Sopenharmony_cimacro LoadKeyValuePairNoSideEffects(implicit context: Context)(o: JSAny):
101cb0ef41Sopenharmony_ci    KeyValuePair labels MayHaveSideEffects {
111cb0ef41Sopenharmony_ci  typeswitch (o) {
121cb0ef41Sopenharmony_ci    case (a: FastJSArray): {
131cb0ef41Sopenharmony_ci      const length: Smi = a.length;
141cb0ef41Sopenharmony_ci      typeswitch (a.elements) {
151cb0ef41Sopenharmony_ci        case (elements: FixedArray): {
161cb0ef41Sopenharmony_ci          return KeyValuePair{
171cb0ef41Sopenharmony_ci            key: length > 0 ? array::LoadElementOrUndefined(elements, 0) :
181cb0ef41Sopenharmony_ci                              Undefined,
191cb0ef41Sopenharmony_ci            value: length > 1 ? array::LoadElementOrUndefined(elements, 1) :
201cb0ef41Sopenharmony_ci                                Undefined
211cb0ef41Sopenharmony_ci          };
221cb0ef41Sopenharmony_ci        }
231cb0ef41Sopenharmony_ci        case (elements: FixedDoubleArray): {
241cb0ef41Sopenharmony_ci          return KeyValuePair{
251cb0ef41Sopenharmony_ci            key: length > 0 ? array::LoadElementOrUndefined(elements, 0) :
261cb0ef41Sopenharmony_ci                              Undefined,
271cb0ef41Sopenharmony_ci            value: length > 1 ? array::LoadElementOrUndefined(elements, 1) :
281cb0ef41Sopenharmony_ci                                Undefined
291cb0ef41Sopenharmony_ci          };
301cb0ef41Sopenharmony_ci        }
311cb0ef41Sopenharmony_ci        case (FixedArrayBase): deferred {
321cb0ef41Sopenharmony_ci          unreachable;
331cb0ef41Sopenharmony_ci        }
341cb0ef41Sopenharmony_ci      }
351cb0ef41Sopenharmony_ci    }
361cb0ef41Sopenharmony_ci    case (JSAny): {
371cb0ef41Sopenharmony_ci      goto MayHaveSideEffects;
381cb0ef41Sopenharmony_ci    }
391cb0ef41Sopenharmony_ci  }
401cb0ef41Sopenharmony_ci}
411cb0ef41Sopenharmony_ci
421cb0ef41Sopenharmony_ci@export
431cb0ef41Sopenharmony_citransitioning macro LoadKeyValuePair(implicit context: Context)(o: JSAny):
441cb0ef41Sopenharmony_ci    KeyValuePair {
451cb0ef41Sopenharmony_ci  try {
461cb0ef41Sopenharmony_ci    return LoadKeyValuePairNoSideEffects(o) otherwise Generic;
471cb0ef41Sopenharmony_ci  } label Generic {
481cb0ef41Sopenharmony_ci    const o = Cast<JSReceiver>(o)
491cb0ef41Sopenharmony_ci        otherwise ThrowTypeError(MessageTemplate::kIteratorValueNotAnObject, o);
501cb0ef41Sopenharmony_ci    return KeyValuePair{
511cb0ef41Sopenharmony_ci      key: GetProperty(o, Convert<Smi>(0)),
521cb0ef41Sopenharmony_ci      value: GetProperty(o, Convert<Smi>(1))
531cb0ef41Sopenharmony_ci    };
541cb0ef41Sopenharmony_ci  }
551cb0ef41Sopenharmony_ci}
561cb0ef41Sopenharmony_ci}
57