330 auto object = Parameter<Object>(Descriptor::kReceiver);
331 auto key = Parameter<Object>(Descriptor::kKey);
332 auto context = Parameter<Context>(Descriptor::kContext);
334 Label call_runtime(
this), return_true(
this), return_false(
this),
339 Label if_objectisnotsmi(
this);
340 Branch(TaggedIsSmi(
object), &to_primitive, &if_objectisnotsmi);
341 BIND(&if_objectisnotsmi);
352 Label if_index(
this, &var_index), if_unique_name(
this),
353 if_notunique_name(
this);
354 TryToName(
key, &if_index, &var_index, &if_unique_name, &var_unique,
355 &call_runtime, &if_notunique_name);
357 BIND(&if_unique_name);
358 TryHasOwnProperty(heap_object, map, instance_type, var_unique.value(),
359 &return_true, &return_false, &call_runtime);
363 TryLookupElement(heap_object, map, instance_type, var_index.value(),
364 &return_true, &return_false, &return_false,
368 BIND(&if_notunique_name);
370 Label not_in_string_table(
this);
371 TryInternalizeString(
CAST(
key), &if_index, &var_index, &if_unique_name,
372 &var_unique, ¬_in_string_table, &call_runtime);
374 BIND(¬_in_string_table);
386 Branch(IsName(
CAST(
key)), &return_false, &call_runtime);
389 Return(TrueConstant());
392 Return(FalseConstant());
395 Return(
CallRuntime(Runtime::kObjectHasOwnProperty, context,
object,
key));
401 UncheckedParameter<Int32T>(Descriptor::kJSActualArgumentsCount));
404 auto context = Parameter<Context>(Descriptor::kContext);
415 GotoIf(UintPtrLessThanOrEqual(args_length, IntPtrConstant(1)), &done);
422 Label done_fast_path(
this), slow_path(
this);
423 GotoIfForceSlowPath(&slow_path);
425 Label fall_through_slow_path(
this);
436 GotoIfNot(IsJSObjectMap(from_map), &slow_path);
448 GotoIfNot(TaggedEqual(LoadMap(from_map), to_meta_map), &slow_path);
458 GotoIfNot(TaggedEqual(to_map, empty_object_literal_map), &slow_path);
462 LoadMapConstructorOrBackPointerOrNativeContext(
470 TNode<IntPtrT> from_inst_size = LoadMapInstanceSizeInWords(from_map);
472 GotoIfNot(IntPtrEqual(from_inst_size, to_inst_size), &slow_path);
476 constexpr uint32_t field3_exclusion_mask =
477 Map::Bits3::IsDictionaryMapBit::kMask |
478 Map::Bits3::IsDeprecatedBit::kMask |
479 Map::Bits3::IsPrototypeMapBit::kMask;
484 TNode<Uint32T> field3_descriptors_and_extensible_mask = Uint32Constant(
485 Map::Bits3::NumberOfOwnDescriptorsBits::kMask |
486 Map::Bits3::IsExtensibleBit::kMask | field3_exclusion_mask);
491 Uint32Constant(Map::Bits3::IsExtensibleBit::encode(
true)),
492 Word32And(target_field3, field3_descriptors_and_extensible_mask)),
498 Uint32Constant(field3_exclusion_mask);
500 Word32Equal(Uint32Constant(0),
501 Word32And(source_field3, field3_exclusion_mask_const)),
503 CSA_DCHECK(
this, Word32BinaryNot(IsElementsKindInRange(
504 LoadElementsKind(to_map),
511 GotoIfNot(TaggedEqual(LoadElements(
CAST(to)), EmptyFixedArrayConstant()),
515 TNode<Object> properties = LoadJSReceiverPropertiesOrHash(to);
516 GotoIf(TaggedIsSmi(properties), &slow_path);
518 Word32Or(TaggedEqual(properties, EmptyFixedArrayConstant()),
519 IsPropertyArray(
CAST(properties))));
521 Label continue_fast_path(
this), runtime_map_lookup(
this, Label::kDeferred);
535 from_map, Map::kTransitionsOrPrototypeInfoOffset);
537 GetHeapObjectIfStrong(maybe_transitions, &runtime_map_lookup);
538 GotoIfNot(IsTransitionArrayMap(LoadMap(maybe_transitions2)),
539 &runtime_map_lookup);
544 GotoIf(TaggedIsSmi(side_step_transitions), &runtime_map_lookup);
546 CAST(side_step_transitions),
549 GotoIf(TaggedEqual(maybe_target_map,
554 &runtime_map_lookup);
556 CAST(GetHeapObjectAssumeWeak(maybe_target_map, &runtime_map_lookup));
557 GotoIf(IsDeprecatedMap(target_map), &runtime_map_lookup);
559 CAST(side_step_transitions),
563 GetHeapObjectAssumeWeak(maybe_validity_cell, &runtime_map_lookup));
564 GotoIfNot(TaggedEqual(LoadCellValue(validity_cell),
566 &runtime_map_lookup);
567 clone_map = target_map;
569 Goto(&continue_fast_path);
571 BIND(&runtime_map_lookup);
573 CAST(
CallRuntime(Runtime::kObjectAssignTryFastcase, context, from, to));
574 GotoIf(TaggedEqual(maybe_clone_map, UndefinedConstant()), &slow_path);
575 GotoIf(TaggedEqual(maybe_clone_map, TrueConstant()), &done_fast_path);
577 clone_map =
CAST(maybe_clone_map);
578 Goto(&continue_fast_path);
580 BIND(&continue_fast_path);
582 IntPtrEqual(LoadMapInstanceSizeInWords(to_map),
583 LoadMapInstanceSizeInWords(clone_map.value())));
586 IntPtrEqual(LoadMapInobjectPropertiesStartInWords(to_map),
587 LoadMapInobjectPropertiesStartInWords(clone_map.value())));
589 from, from_map, clone_map.value(),
592 StoreMap(to, clone_map.value());
593 StoreJSReceiverPropertiesOrHash(to, properties);
594 StoreJSObjectElements(CAST(to), elements);
599 Goto(&done_fast_path);
600 BIND(&done_fast_path);
604 slow_path_index = IntPtrConstant(2);
605 Branch(IntPtrGreaterThan(args_length, IntPtrConstant(2)), &slow_path,
616 CallBuiltin(Builtin::kSetDataProperties, context, to, next_source);
618 slow_path_index.value());
624 args.PopAndReturn(to);
629 auto object = Parameter<Object>(Descriptor::kObject);
630 auto context = Parameter<Context>(Descriptor::kContext);
634 Label if_empty(
this, Label::kDeferred), if_empty_elements(
this),
635 if_fast(
this), if_slow(
this, Label::kDeferred), if_join(
this);
638 GotoIf(TaggedIsSmi(
object), &if_slow);
643 DecodeWordFromWord32<Map::Bits3::EnumLengthBits>(object_bit_field3);
651 GotoIf(IsEmptyFixedArray(object_elements), &if_empty_elements);
652 Branch(IsEmptySlowElementDictionary(object_elements), &if_empty_elements,
656 BIND(&if_empty_elements);
657 Branch(WordEqual(object_enum_length, IntPtrConstant(0)), &if_empty, &if_fast);
667 object_descriptors, DescriptorArray::kEnumCacheOffset);
668 auto object_enum_keys = LoadObjectField<FixedArrayBase>(
669 object_enum_cache, EnumCache::kKeysOffset);
677 TNode<IntPtrT> object_enum_length_intptr = Signed(object_enum_length);
678 TNode<Smi> array_length = SmiTag(object_enum_length_intptr);
679 std::tie(array, elements) = AllocateUninitializedJSArrayWithElements(
681 object_enum_length_intptr);
690 var_length = SmiConstant(0);
691 var_elements = EmptyFixedArrayConstant();
701 var_elements = elements;
712 AllocateJSArray(array_map, var_elements.value(), var_length.value());
749 auto object = Parameter<Object>(Descriptor::kObject);
750 auto context = Parameter<Context>(Descriptor::kContext);
754 Label if_empty(
this, Label::kDeferred), if_empty_elements(
this),
755 if_fast(
this), try_fast(
this, Label::kDeferred),
756 if_slow(
this, Label::kDeferred), if_join(
this);
760 GotoIf(TaggedIsSmi(
object), &if_slow);
766 GotoIf(IsEmptyFixedArray(object_elements), &if_empty_elements);
767 Branch(IsEmptySlowElementDictionary(object_elements), &if_empty_elements,
771 BIND(&if_empty_elements);
774 DecodeWordFromWord32<Map::Bits3::EnumLengthBits>(object_bit_field3);
781 DecodeWordFromWord32<Map::Bits3::NumberOfOwnDescriptorsBits>(
783 GotoIfNot(WordEqual(object_enum_length, number_descriptors), &if_slow);
786 Branch(WordEqual(object_enum_length, IntPtrConstant(0)), &if_empty, &if_fast);
797 object_descriptors, DescriptorArray::kEnumCacheOffset);
798 auto object_enum_keys = LoadObjectField<FixedArrayBase>(
799 object_enum_cache, EnumCache::kKeysOffset);
807 TNode<IntPtrT> object_enum_length_intptr = Signed(object_enum_length);
808 TNode<Smi> array_length = SmiTag(object_enum_length_intptr);
809 std::tie(array, elements) = AllocateUninitializedJSArrayWithElements(
811 object_enum_length_intptr);
821 Runtime::kObjectGetOwnPropertyNamesTryFast, context,
object));
823 var_elements = elements;
830 var_length = SmiConstant(0);
831 var_elements = EmptyFixedArrayConstant();
839 CAST(
CallRuntime(Runtime::kObjectGetOwnPropertyNames, context,
object));
841 var_elements = elements;
852 AllocateJSArray(array_map, var_elements.value(), var_length.value());
924 Label checkstringtag(
this), if_arguments(
this), if_array(
this),
925 if_boolean(
this), if_date(
this), if_error(
this), if_function(
this),
926 if_number(
this, Label::kDeferred), if_object(
this), if_primitive(
this),
927 if_proxy(
this, {&var_holder, &var_holder_map}, Label::kDeferred),
928 if_regexp(
this), if_string(
this), if_symbol(
this, Label::kDeferred),
929 if_value(
this), if_bigint(
this, Label::kDeferred);
931 auto receiver = Parameter<JSAny>(Descriptor::kReceiver);
932 auto context = Parameter<Context>(Descriptor::kContext);
935 GotoIf(TaggedIsSmi(
receiver), &if_number);
938 TNode<Map> receiver_map = LoadMap(receiver_heap_object);
939 var_holder = receiver_heap_object;
940 var_holder_map = receiver_map;
941 TNode<Uint16T> receiver_instance_type = LoadMapInstanceType(receiver_map);
942 GotoIf(IsPrimitiveInstanceType(receiver_instance_type), &if_primitive);
943 GotoIf(IsFunctionInstanceType(receiver_instance_type), &if_function);
947 } kJumpTable[] = {{JS_OBJECT_TYPE, &if_object},
948 {JS_ARRAY_TYPE, &if_array},
949 {JS_REG_EXP_TYPE, &if_regexp},
950 {JS_ARGUMENTS_OBJECT_TYPE, &if_arguments},
951 {JS_DATE_TYPE, &if_date},
952 {JS_API_OBJECT_TYPE, &if_object},
953 {JS_SPECIAL_API_OBJECT_TYPE, &if_object},
954 {JS_PROXY_TYPE, &if_proxy},
955 {JS_ERROR_TYPE, &if_error},
956 {JS_PRIMITIVE_WRAPPER_TYPE, &if_value}};
957 size_t const kNumCases =
arraysize(kJumpTable);
958 Label* case_labels[kNumCases];
959 int32_t case_values[kNumCases];
960 for (
size_t i = 0;
i < kNumCases; ++
i) {
961 case_labels[
i] = kJumpTable[
i].label;
962 case_values[
i] = kJumpTable[
i].value;
964 Switch(receiver_instance_type, &if_object, case_values, case_labels,
969 var_default = ArgumentsToStringConstant();
970 Goto(&checkstringtag);
975 var_default = ArrayToStringConstant();
976 Goto(&checkstringtag);
983 LoadContextElement(
native_context, Context::BOOLEAN_FUNCTION_INDEX));
984 TNode<Map> boolean_initial_map = LoadObjectField<Map>(
985 boolean_constructor, JSFunction::kPrototypeOrInitialMapOffset);
987 LoadMapPrototype(boolean_initial_map);
988 var_default = BooleanToStringConstant();
989 var_holder = boolean_prototype;
990 var_holder_map = LoadMap(boolean_prototype);
991 Goto(&checkstringtag);
996 var_default = DateToStringConstant();
997 Goto(&checkstringtag);
1002 var_default = ErrorToStringConstant();
1003 Goto(&checkstringtag);
1008 var_default = FunctionToStringConstant();
1009 Goto(&checkstringtag);
1016 LoadContextElement(
native_context, Context::NUMBER_FUNCTION_INDEX));
1017 TNode<Map> number_initial_map = LoadObjectField<Map>(
1018 number_constructor, JSFunction::kPrototypeOrInitialMapOffset);
1020 var_default = NumberToStringConstant();
1021 var_holder = number_prototype;
1022 var_holder_map = LoadMap(number_prototype);
1023 Goto(&checkstringtag);
1029 var_default = ObjectToStringConstant();
1030 Goto(&checkstringtag);
1033 BIND(&if_primitive);
1035 Label return_undefined(
this);
1037 GotoIf(IsStringInstanceType(receiver_instance_type), &if_string);
1038 GotoIf(IsBigIntInstanceType(receiver_instance_type), &if_bigint);
1040 GotoIf(IsHeapNumberMap(receiver_map), &if_number);
1041 GotoIf(IsSymbolMap(receiver_map), &if_symbol);
1042 GotoIf(IsUndefined(
receiver), &return_undefined);
1044 Return(NullToStringConstant());
1046 BIND(&return_undefined);
1047 Return(UndefinedToStringConstant());
1052 var_default = RegexpToStringConstant();
1053 Goto(&checkstringtag);
1060 LoadContextElement(
native_context, Context::STRING_FUNCTION_INDEX));
1061 TNode<Map> string_initial_map = LoadObjectField<Map>(
1062 string_constructor, JSFunction::kPrototypeOrInitialMapOffset);
1064 var_default = StringToStringConstant();
1065 var_holder = string_prototype;
1066 var_holder_map = LoadMap(string_prototype);
1067 Goto(&checkstringtag);
1074 LoadContextElement(
native_context, Context::SYMBOL_FUNCTION_INDEX));
1075 TNode<Map> symbol_initial_map = LoadObjectField<Map>(
1076 symbol_constructor, JSFunction::kPrototypeOrInitialMapOffset);
1078 var_default = ObjectToStringConstant();
1079 var_holder = symbol_prototype;
1080 var_holder_map = LoadMap(symbol_prototype);
1081 Goto(&checkstringtag);
1088 LoadContextElement(
native_context, Context::BIGINT_FUNCTION_INDEX));
1089 TNode<Map> bigint_initial_map = LoadObjectField<Map>(
1090 bigint_constructor, JSFunction::kPrototypeOrInitialMapOffset);
1092 var_default = ObjectToStringConstant();
1093 var_holder = bigint_prototype;
1094 var_holder_map = LoadMap(bigint_prototype);
1095 Goto(&checkstringtag);
1100 Label if_value_is_number(
this, Label::kDeferred),
1101 if_value_is_boolean(
this, Label::kDeferred),
1102 if_value_is_symbol(
this, Label::kDeferred),
1103 if_value_is_bigint(
this, Label::kDeferred),
1104 if_value_is_string(
this, Label::kDeferred);
1107 LoadJSPrimitiveWrapperValue(
CAST(receiver_heap_object));
1110 GotoIf(TaggedIsSmi(receiver_value), &if_value_is_number);
1112 GotoIf(IsHeapNumberMap(receiver_value_map), &if_value_is_number);
1113 GotoIf(
IsBooleanMap(receiver_value_map), &if_value_is_boolean);
1114 GotoIf(IsSymbolMap(receiver_value_map), &if_value_is_symbol);
1116 LoadMapInstanceType(receiver_value_map);
1117 GotoIf(IsBigIntInstanceType(receiver_value_instance_type),
1118 &if_value_is_bigint);
1119 CSA_DCHECK(
this, IsStringInstanceType(receiver_value_instance_type));
1120 Goto(&if_value_is_string);
1122 BIND(&if_value_is_number);
1124 var_default = NumberToStringConstant();
1125 Goto(&checkstringtag);
1128 BIND(&if_value_is_boolean);
1130 var_default = BooleanToStringConstant();
1131 Goto(&checkstringtag);
1134 BIND(&if_value_is_string);
1136 var_default = StringToStringConstant();
1137 Goto(&checkstringtag);
1140 BIND(&if_value_is_bigint);
1142 var_default = ObjectToStringConstant();
1143 Goto(&checkstringtag);
1146 BIND(&if_value_is_symbol);
1148 var_default = ObjectToStringConstant();
1149 Goto(&checkstringtag);
1153 BIND(&checkstringtag);
1155 Label return_default(
this);
1157 GetInterestingProperty(context,
receiver, &var_holder, &var_holder_map,
1158 ToStringTagSymbolConstant(), &return_default);
1159 GotoIf(TaggedIsSmi(tag), &return_default);
1160 GotoIfNot(IsString(
CAST(tag)), &return_default);
1161 ReturnToStringFormat(context,
CAST(tag));
1163 BIND(&return_default);
1164 Return(var_default.value());
1169 receiver_heap_object = var_holder.value();
1170 receiver_map = var_holder_map.value();
1172 Label throw_proxy_handler_revoked(
this, Label::kDeferred);
1174 CAST(LoadObjectField(receiver_heap_object, JSProxy::kHandlerOffset));
1175 CSA_DCHECK(
this, IsNullOrJSReceiver(handler));
1176 GotoIfNot(JSAnyIsNotPrimitive(handler), &throw_proxy_handler_revoked);
1185 CallRuntime(Runtime::kArrayIsArray, context, receiver_heap_object);
1187 IsTrue(receiver_is_array), [=,
this] {
return ArrayStringConstant(); },
1189 return Select<String>(
1190 IsCallableMap(receiver_map),
1191 [=,
this] {
return FunctionStringConstant(); },
1192 [=,
this] {
return ObjectStringConstant(); });
1197 GetProperty(context, receiver_heap_object,
1198 isolate()->factory()->to_string_tag_symbol()));
1199 Label if_tagisnotstring(
this), if_tagisstring(
this);
1200 GotoIf(TaggedIsSmi(var_tag.value()), &if_tagisnotstring);
1201 Branch(IsString(
CAST(var_tag.value())), &if_tagisstring,
1202 &if_tagisnotstring);
1203 BIND(&if_tagisnotstring);
1205 var_tag = builtin_tag;
1206 Goto(&if_tagisstring);
1208 BIND(&if_tagisstring);
1209 ReturnToStringFormat(context,
CAST(var_tag.value()));
1211 BIND(&throw_proxy_handler_revoked);
1213 ThrowTypeError(context, MessageTemplate::kProxyRevoked,
1214 "Object.prototype.toString");
1221 int const kPrototypeArg = 0;
1222 int const kPropertiesArg = 1;
1225 UncheckedParameter<Int32T>(Descriptor::kJSActualArgumentsCount));
1230 auto native_context = Parameter<NativeContext>(Descriptor::kContext);
1232 Label call_runtime(
this, Label::kDeferred), prototype_valid(
this),
1233 no_properties(
this);
1236 Comment(
"Argument 1 check: prototype");
1237 GotoIf(
IsNull(prototype), &prototype_valid);
1238 BranchIfJSReceiver(prototype, &prototype_valid, &call_runtime);
1241 BIND(&prototype_valid);
1243 Comment(
"Argument 2 check: properties");
1245 GotoIf(TaggedIsSmi(properties), &call_runtime);
1247 GotoIf(IsUndefined(properties), &no_properties);
1252 TaggedEqual(LoadElements(
CAST(properties)), EmptyFixedArrayConstant()),
1256 GotoIf(IsSetWord32<Map::Bits3::IsDictionaryMapBit>(
bit_field3),
1258 Branch(IsSetWord32<Map::Bits3::NumberOfOwnDescriptorsBits>(
bit_field3),
1259 &call_runtime, &no_properties);
1263 BIND(&no_properties);
1267 Label null_proto(
this), non_null_proto(
this), instantiate_map(
this);
1269 Branch(
IsNull(prototype), &null_proto, &non_null_proto);
1276 Goto(&instantiate_map);
1279 BIND(&non_null_proto);
1281 new_properties = EmptyFixedArrayConstant();
1283 GotoIf(TaggedEqual(prototype, LoadMapPrototype(map.value())),
1287 LoadMapPrototypeInfo(LoadMap(
CAST(prototype)), &call_runtime);
1288 Comment(
"Load ObjectCreateMap from PrototypeInfo");
1290 LoadObjectField(prototype_info, PrototypeInfo::kDerivedMapsOffset));
1293 GotoIf(TaggedEqual(derived_maps, UndefinedConstant()), &call_runtime);
1294 CSA_DCHECK(
this, InstanceTypeEqual(LoadInstanceType(derived_maps),
1295 WEAK_ARRAY_LIST_TYPE));
1297 derived_maps, IntPtrConstant(WeakArrayList::kHeaderSize)));
1298 map =
CAST(GetHeapObjectAssumeWeak(maybe_map, &call_runtime));
1299 Goto(&instantiate_map);
1302 BIND(&instantiate_map);
1305 AllocateJSObjectFromMap(map.value(), new_properties.value());
1306 args.PopAndReturn(instance);
1310 BIND(&call_runtime);
1399 auto closure = Parameter<JSFunction>(Descriptor::kClosure);
1400 auto receiver = Parameter<Object>(Descriptor::kReceiver);
1401 auto context = Parameter<Context>(Descriptor::kContext);
1405 Label done(
this), runtime(
this);
1406 GotoIfForceSlowPath(&runtime);
1407 GotoIfNot(IsFunctionWithPrototypeSlotMap(LoadMap(closure)), &runtime);
1409 closure, JSFunction::kPrototypeOrInitialMapOffset);
1410 GotoIf(DoesntHaveInstanceType(maybe_map, MAP_TYPE), &runtime);
1414 closure, JSFunction::kSharedFunctionInfoOffset);
1418 LoadSharedFunctionInfoBytecodeArray(shared);
1421 LoadBytecodeArrayParameterCountWithoutReceiver(bytecode_array)));
1424 LoadObjectField<Int32T>(bytecode_array, BytecodeArray::kFrameSizeOffset));
1430 FillFixedArrayWithValue(
HOLEY_ELEMENTS, parameters_and_registers,
1431 IntPtrConstant(0), length,
1432 RootIndex::kUndefinedValue);
1435 AllocateJSObjectFromMap(map, std::nullopt, std::nullopt,
1436 AllocationFlag::kNone, kWithSlackTracking);
1437 StoreObjectFieldNoWriteBarrier(
result, JSGeneratorObject::kFunctionOffset,
1439 StoreObjectFieldNoWriteBarrier(
result, JSGeneratorObject::kContextOffset,
1441 StoreObjectFieldNoWriteBarrier(
result, JSGeneratorObject::kReceiverOffset,
1443 StoreObjectFieldNoWriteBarrier(
1444 result, JSGeneratorObject::kParametersAndRegistersOffset,
1445 parameters_and_registers);
1447 StoreObjectFieldNoWriteBarrier(
result, JSGeneratorObject::kResumeModeOffset,
1450 StoreObjectFieldNoWriteBarrier(
result, JSGeneratorObject::kContinuationOffset,
1452 GotoIfNot(InstanceTypeEqual(LoadMapInstanceType(map),
1453 JS_ASYNC_GENERATOR_OBJECT_TYPE),
1455 StoreObjectFieldNoWriteBarrier(
1456 result, JSAsyncGeneratorObject::kIsAwaitingOffset, SmiConstant(0));
1464 Return(
CallRuntime(Runtime::kCreateJSGeneratorObject, context, closure,
1470 auto context = Parameter<Context>(Descriptor::kContext);
1471 auto object = Parameter<JSReceiver>(Descriptor::kReceiver);
1472 auto name = Parameter<Name>(Descriptor::kKey);
1474 LoadMapInstanceType(LoadMap(
object)))));
1476 Label if_notunique_name(
this), if_iskeyunique(
this), done(
this),
1477 if_keyisindex(
this), call_runtime(
this);
1483 TryToName(name, &if_keyisindex, &var_index, &if_iskeyunique, &var_name,
1484 &call_runtime, &if_notunique_name);
1486 BIND(&if_notunique_name);
1488 Label not_in_string_table(
this);
1491 TryInternalizeString(
CAST(name), &if_keyisindex, &var_index,
1492 &if_iskeyunique, &var_name, &done, &call_runtime);
1495 BIND(&if_iskeyunique);
1497 Label if_found_value(
this), if_not_found(
this);
1505 TryGetOwnProperty(context,
object,
object, map, instance_type,
1506 var_name.value(), &if_found_value, &var_value,
1507 &var_details, &var_raw_value, &done, &call_runtime,
1508 kReturnAccessorPair);
1510 BIND(&if_found_value);
1513 result = AllocatePropertyDescriptorObject(context);
1514 InitializePropertyDescriptorObject(
CAST(
result.value()), var_value.value(),
1515 var_details.value(), &call_runtime);
1522 BIND(&if_keyisindex);
1523 Goto(&call_runtime);
1525 BIND(&call_runtime);
1526 TailCallRuntime(Runtime::kGetOwnPropertyDescriptorObject, context,
object,