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