Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 #include "src/code-stub-assembler.h" | 4 #include "src/code-stub-assembler.h" |
| 5 #include "src/code-factory.h" | 5 #include "src/code-factory.h" |
| 6 #include "src/frames-inl.h" | 6 #include "src/frames-inl.h" |
| 7 #include "src/frames.h" | 7 #include "src/frames.h" |
| 8 | 8 |
| 9 namespace v8 { | 9 namespace v8 { |
| 10 namespace internal { | 10 namespace internal { |
| (...skipping 4400 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4411 Node* entry_index = IntPtrMul(entry, IntPtrConstant(Dictionary::kEntrySize)); | 4411 Node* entry_index = IntPtrMul(entry, IntPtrConstant(Dictionary::kEntrySize)); |
| 4412 return IntPtrAdd(entry_index, IntPtrConstant(Dictionary::kElementsStartIndex + | 4412 return IntPtrAdd(entry_index, IntPtrConstant(Dictionary::kElementsStartIndex + |
| 4413 field_index)); | 4413 field_index)); |
| 4414 } | 4414 } |
| 4415 | 4415 |
| 4416 template Node* CodeStubAssembler::EntryToIndex<NameDictionary>(Node*, int); | 4416 template Node* CodeStubAssembler::EntryToIndex<NameDictionary>(Node*, int); |
| 4417 template Node* CodeStubAssembler::EntryToIndex<GlobalDictionary>(Node*, int); | 4417 template Node* CodeStubAssembler::EntryToIndex<GlobalDictionary>(Node*, int); |
| 4418 template Node* CodeStubAssembler::EntryToIndex<SeededNumberDictionary>(Node*, | 4418 template Node* CodeStubAssembler::EntryToIndex<SeededNumberDictionary>(Node*, |
| 4419 int); | 4419 int); |
| 4420 | 4420 |
| 4421 template <class ContainerType> | |
| 4422 Node* CodeStubAssembler::LoadDetailsForKeyIndex(Node* container, | |
|
Igor Sheludko
2017/02/09 09:14:09
WDYT about s/For/By/ here and below?
I'd just inl
Jakob Kummerow
2017/02/09 22:21:28
Done.
| |
| 4423 Node* key_index) { | |
| 4424 const int kKeyToDetailsOffset = | |
| 4425 (ContainerType::kEntryDetailsIndex - ContainerType::kEntryKeyIndex) * | |
| 4426 kPointerSize; | |
| 4427 return LoadAndUntagToWord32FixedArrayElement(container, key_index, | |
| 4428 kKeyToDetailsOffset); | |
| 4429 } | |
| 4430 | |
| 4431 template Node* CodeStubAssembler::LoadDetailsForKeyIndex<DescriptorArray>( | |
| 4432 Node*, Node*); | |
| 4433 template Node* CodeStubAssembler::LoadDetailsForKeyIndex<NameDictionary>(Node*, | |
| 4434 Node*); | |
| 4435 template Node* | |
| 4436 CodeStubAssembler::LoadDetailsForKeyIndex<SeededNumberDictionary>(Node*, Node*); | |
| 4437 | |
| 4438 template <class ContainerType> | |
| 4439 Node* CodeStubAssembler::LoadValueForKeyIndex(Node* container, | |
| 4440 Node* key_index) { | |
| 4441 const int kKeyToValueOffset = | |
| 4442 (ContainerType::kEntryValueIndex - ContainerType::kEntryKeyIndex) * | |
| 4443 kPointerSize; | |
| 4444 return LoadFixedArrayElement(container, key_index, kKeyToValueOffset); | |
| 4445 } | |
| 4446 | |
| 4447 template Node* CodeStubAssembler::LoadValueForKeyIndex<GlobalDictionary>(Node*, | |
| 4448 Node*); | |
| 4449 template Node* CodeStubAssembler::LoadValueForKeyIndex<NameDictionary>(Node*, | |
| 4450 Node*); | |
| 4451 template Node* CodeStubAssembler::LoadValueForKeyIndex<SeededNumberDictionary>( | |
| 4452 Node*, Node*); | |
| 4453 | |
| 4454 template <class ContainerType> | |
| 4455 void CodeStubAssembler::StoreDetailsForKeyIndex(Node* container, | |
| 4456 Node* key_index, | |
| 4457 Node* details) { | |
| 4458 const int kKeyToDetailsOffset = | |
| 4459 (ContainerType::kEntryDetailsIndex - ContainerType::kEntryKeyIndex) * | |
| 4460 kPointerSize; | |
| 4461 StoreFixedArrayElement(container, key_index, details, SKIP_WRITE_BARRIER, | |
| 4462 kKeyToDetailsOffset); | |
| 4463 } | |
| 4464 | |
| 4465 template <class ContainerType> | |
| 4466 void CodeStubAssembler::StoreValueForKeyIndex(Node* container, Node* key_index, | |
| 4467 Node* value) { | |
| 4468 const int kKeyToValueOffset = | |
| 4469 (ContainerType::kEntryValueIndex - ContainerType::kEntryKeyIndex) * | |
| 4470 kPointerSize; | |
| 4471 StoreFixedArrayElement(container, key_index, value, UPDATE_WRITE_BARRIER, | |
| 4472 kKeyToValueOffset); | |
| 4473 } | |
| 4474 | |
| 4475 template void CodeStubAssembler::StoreValueForKeyIndex<NameDictionary>(Node*, | |
| 4476 Node*, | |
| 4477 Node*); | |
| 4478 | |
| 4421 Node* CodeStubAssembler::HashTableComputeCapacity(Node* at_least_space_for) { | 4479 Node* CodeStubAssembler::HashTableComputeCapacity(Node* at_least_space_for) { |
| 4422 Node* capacity = IntPtrRoundUpToPowerOfTwo32( | 4480 Node* capacity = IntPtrRoundUpToPowerOfTwo32( |
| 4423 WordShl(at_least_space_for, IntPtrConstant(1))); | 4481 WordShl(at_least_space_for, IntPtrConstant(1))); |
| 4424 return IntPtrMax(capacity, IntPtrConstant(HashTableBase::kMinCapacity)); | 4482 return IntPtrMax(capacity, IntPtrConstant(HashTableBase::kMinCapacity)); |
| 4425 } | 4483 } |
| 4426 | 4484 |
| 4427 Node* CodeStubAssembler::IntPtrMax(Node* left, Node* right) { | 4485 Node* CodeStubAssembler::IntPtrMax(Node* left, Node* right) { |
| 4428 return SelectConstant(IntPtrGreaterThanOrEqual(left, right), left, right, | 4486 return SelectConstant(IntPtrGreaterThanOrEqual(left, right), left, right, |
| 4429 MachineType::PointerRepresentation()); | 4487 MachineType::PointerRepresentation()); |
| 4430 } | 4488 } |
| (...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4651 UNREACHABLE(); // Use specializations instead. | 4709 UNREACHABLE(); // Use specializations instead. |
| 4652 } | 4710 } |
| 4653 | 4711 |
| 4654 template <> | 4712 template <> |
| 4655 void CodeStubAssembler::InsertEntry<NameDictionary>(Node* dictionary, | 4713 void CodeStubAssembler::InsertEntry<NameDictionary>(Node* dictionary, |
| 4656 Node* name, Node* value, | 4714 Node* name, Node* value, |
| 4657 Node* index, | 4715 Node* index, |
| 4658 Node* enum_index) { | 4716 Node* enum_index) { |
| 4659 // Store name and value. | 4717 // Store name and value. |
| 4660 StoreFixedArrayElement(dictionary, index, name); | 4718 StoreFixedArrayElement(dictionary, index, name); |
| 4661 const int kNameToValueOffset = | 4719 StoreValueForKeyIndex<NameDictionary>(dictionary, index, value); |
| 4662 (NameDictionary::kEntryValueIndex - NameDictionary::kEntryKeyIndex) * | |
| 4663 kPointerSize; | |
| 4664 StoreFixedArrayElement(dictionary, index, value, UPDATE_WRITE_BARRIER, | |
| 4665 kNameToValueOffset); | |
| 4666 | 4720 |
| 4667 // Prepare details of the new property. | 4721 // Prepare details of the new property. |
| 4668 const int kInitialIndex = 0; | 4722 const int kInitialIndex = 0; |
| 4669 PropertyDetails d(kData, NONE, kInitialIndex, PropertyCellType::kNoCell); | 4723 PropertyDetails d(kData, NONE, kInitialIndex, PropertyCellType::kNoCell); |
| 4670 enum_index = | 4724 enum_index = |
| 4671 SmiShl(enum_index, PropertyDetails::DictionaryStorageField::kShift); | 4725 SmiShl(enum_index, PropertyDetails::DictionaryStorageField::kShift); |
| 4672 STATIC_ASSERT(kInitialIndex == 0); | 4726 STATIC_ASSERT(kInitialIndex == 0); |
| 4673 Variable var_details(this, MachineRepresentation::kTaggedSigned, | 4727 Variable var_details(this, MachineRepresentation::kTaggedSigned, |
| 4674 SmiOr(SmiConstant(d.AsSmi()), enum_index)); | 4728 SmiOr(SmiConstant(d.AsSmi()), enum_index)); |
| 4675 | 4729 |
| 4676 // Private names must be marked non-enumerable. | 4730 // Private names must be marked non-enumerable. |
| 4677 Label not_private(this, &var_details); | 4731 Label not_private(this, &var_details); |
| 4678 GotoUnless(IsSymbolMap(LoadMap(name)), ¬_private); | 4732 GotoUnless(IsSymbolMap(LoadMap(name)), ¬_private); |
| 4679 Node* flags = SmiToWord32(LoadObjectField(name, Symbol::kFlagsOffset)); | 4733 Node* flags = SmiToWord32(LoadObjectField(name, Symbol::kFlagsOffset)); |
| 4680 const int kPrivateMask = 1 << Symbol::kPrivateBit; | 4734 const int kPrivateMask = 1 << Symbol::kPrivateBit; |
| 4681 GotoUnless(IsSetWord32(flags, kPrivateMask), ¬_private); | 4735 GotoUnless(IsSetWord32(flags, kPrivateMask), ¬_private); |
| 4682 Node* dont_enum = | 4736 Node* dont_enum = |
| 4683 SmiShl(SmiConstant(DONT_ENUM), PropertyDetails::AttributesField::kShift); | 4737 SmiShl(SmiConstant(DONT_ENUM), PropertyDetails::AttributesField::kShift); |
| 4684 var_details.Bind(SmiOr(var_details.value(), dont_enum)); | 4738 var_details.Bind(SmiOr(var_details.value(), dont_enum)); |
| 4685 Goto(¬_private); | 4739 Goto(¬_private); |
| 4686 Bind(¬_private); | 4740 Bind(¬_private); |
| 4687 | 4741 |
| 4688 // Finally, store the details. | 4742 // Finally, store the details. |
| 4689 const int kNameToDetailsOffset = | 4743 StoreDetailsForKeyIndex<NameDictionary>(dictionary, index, |
| 4690 (NameDictionary::kEntryDetailsIndex - NameDictionary::kEntryKeyIndex) * | 4744 var_details.value()); |
| 4691 kPointerSize; | |
| 4692 StoreFixedArrayElement(dictionary, index, var_details.value(), | |
| 4693 SKIP_WRITE_BARRIER, kNameToDetailsOffset); | |
| 4694 } | 4745 } |
| 4695 | 4746 |
| 4696 template <> | 4747 template <> |
| 4697 void CodeStubAssembler::InsertEntry<GlobalDictionary>(Node* dictionary, | 4748 void CodeStubAssembler::InsertEntry<GlobalDictionary>(Node* dictionary, |
| 4698 Node* key, Node* value, | 4749 Node* key, Node* value, |
| 4699 Node* index, | 4750 Node* index, |
| 4700 Node* enum_index) { | 4751 Node* enum_index) { |
| 4701 UNIMPLEMENTED(); | 4752 UNIMPLEMENTED(); |
| 4702 } | 4753 } |
| 4703 | 4754 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4742 | 4793 |
| 4743 template void CodeStubAssembler::Add<NameDictionary>(Node*, Node*, Node*, | 4794 template void CodeStubAssembler::Add<NameDictionary>(Node*, Node*, Node*, |
| 4744 Label*); | 4795 Label*); |
| 4745 | 4796 |
| 4746 void CodeStubAssembler::DescriptorLookupLinear(Node* unique_name, | 4797 void CodeStubAssembler::DescriptorLookupLinear(Node* unique_name, |
| 4747 Node* descriptors, Node* nof, | 4798 Node* descriptors, Node* nof, |
| 4748 Label* if_found, | 4799 Label* if_found, |
| 4749 Variable* var_name_index, | 4800 Variable* var_name_index, |
| 4750 Label* if_not_found) { | 4801 Label* if_not_found) { |
| 4751 Node* first_inclusive = IntPtrConstant(DescriptorArray::ToKeyIndex(0)); | 4802 Node* first_inclusive = IntPtrConstant(DescriptorArray::ToKeyIndex(0)); |
| 4752 Node* factor = IntPtrConstant(DescriptorArray::kDescriptorSize); | 4803 Node* factor = IntPtrConstant(DescriptorArray::kEntrySize); |
| 4753 Node* last_exclusive = IntPtrAdd(first_inclusive, IntPtrMul(nof, factor)); | 4804 Node* last_exclusive = IntPtrAdd(first_inclusive, IntPtrMul(nof, factor)); |
| 4754 | 4805 |
| 4755 BuildFastLoop(last_exclusive, first_inclusive, | 4806 BuildFastLoop(last_exclusive, first_inclusive, |
| 4756 [this, descriptors, unique_name, if_found, | 4807 [this, descriptors, unique_name, if_found, |
| 4757 var_name_index](Node* name_index) { | 4808 var_name_index](Node* name_index) { |
| 4758 Node* candidate_name = | 4809 Node* candidate_name = |
| 4759 LoadFixedArrayElement(descriptors, name_index); | 4810 LoadFixedArrayElement(descriptors, name_index); |
| 4760 var_name_index->Bind(name_index); | 4811 var_name_index->Bind(name_index); |
| 4761 GotoIf(WordEqual(candidate_name, unique_name), if_found); | 4812 GotoIf(WordEqual(candidate_name, unique_name), if_found); |
| 4762 }, | 4813 }, |
| 4763 -DescriptorArray::kDescriptorSize, INTPTR_PARAMETERS, | 4814 -DescriptorArray::kEntrySize, INTPTR_PARAMETERS, |
| 4764 IndexAdvanceMode::kPre); | 4815 IndexAdvanceMode::kPre); |
| 4765 Goto(if_not_found); | 4816 Goto(if_not_found); |
| 4766 } | 4817 } |
| 4767 | 4818 |
| 4768 void CodeStubAssembler::TryLookupProperty( | 4819 void CodeStubAssembler::TryLookupProperty( |
| 4769 Node* object, Node* map, Node* instance_type, Node* unique_name, | 4820 Node* object, Node* map, Node* instance_type, Node* unique_name, |
| 4770 Label* if_found_fast, Label* if_found_dict, Label* if_found_global, | 4821 Label* if_found_fast, Label* if_found_dict, Label* if_found_global, |
| 4771 Variable* var_meta_storage, Variable* var_name_index, Label* if_not_found, | 4822 Variable* var_meta_storage, Variable* var_name_index, Label* if_not_found, |
| 4772 Label* if_bailout) { | 4823 Label* if_bailout) { |
| 4773 DCHECK_EQ(MachineRepresentation::kTagged, var_meta_storage->rep()); | 4824 DCHECK_EQ(MachineRepresentation::kTagged, var_meta_storage->rep()); |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4861 | 4912 |
| 4862 void CodeStubAssembler::LoadPropertyFromFastObject(Node* object, Node* map, | 4913 void CodeStubAssembler::LoadPropertyFromFastObject(Node* object, Node* map, |
| 4863 Node* descriptors, | 4914 Node* descriptors, |
| 4864 Node* name_index, | 4915 Node* name_index, |
| 4865 Variable* var_details, | 4916 Variable* var_details, |
| 4866 Variable* var_value) { | 4917 Variable* var_value) { |
| 4867 DCHECK_EQ(MachineRepresentation::kWord32, var_details->rep()); | 4918 DCHECK_EQ(MachineRepresentation::kWord32, var_details->rep()); |
| 4868 DCHECK_EQ(MachineRepresentation::kTagged, var_value->rep()); | 4919 DCHECK_EQ(MachineRepresentation::kTagged, var_value->rep()); |
| 4869 Comment("[ LoadPropertyFromFastObject"); | 4920 Comment("[ LoadPropertyFromFastObject"); |
| 4870 | 4921 |
| 4871 const int name_to_details_offset = | 4922 Node* details = |
| 4872 (DescriptorArray::kDescriptorDetails - DescriptorArray::kDescriptorKey) * | 4923 LoadDetailsForKeyIndex<DescriptorArray>(descriptors, name_index); |
| 4873 kPointerSize; | |
| 4874 const int name_to_value_offset = | |
| 4875 (DescriptorArray::kDescriptorValue - DescriptorArray::kDescriptorKey) * | |
| 4876 kPointerSize; | |
| 4877 | |
| 4878 Node* details = LoadAndUntagToWord32FixedArrayElement(descriptors, name_index, | |
| 4879 name_to_details_offset); | |
| 4880 var_details->Bind(details); | 4924 var_details->Bind(details); |
| 4881 | 4925 |
| 4882 Node* location = DecodeWord32<PropertyDetails::LocationField>(details); | 4926 Node* location = DecodeWord32<PropertyDetails::LocationField>(details); |
| 4883 | 4927 |
| 4884 Label if_in_field(this), if_in_descriptor(this), done(this); | 4928 Label if_in_field(this), if_in_descriptor(this), done(this); |
| 4885 Branch(Word32Equal(location, Int32Constant(kField)), &if_in_field, | 4929 Branch(Word32Equal(location, Int32Constant(kField)), &if_in_field, |
| 4886 &if_in_descriptor); | 4930 &if_in_descriptor); |
| 4887 Bind(&if_in_field); | 4931 Bind(&if_in_field); |
| 4888 { | 4932 { |
| 4889 Node* field_index = | 4933 Node* field_index = |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4952 Bind(&rebox_double); | 4996 Bind(&rebox_double); |
| 4953 { | 4997 { |
| 4954 Comment("rebox_double"); | 4998 Comment("rebox_double"); |
| 4955 Node* heap_number = AllocateHeapNumberWithValue(var_double_value.value()); | 4999 Node* heap_number = AllocateHeapNumberWithValue(var_double_value.value()); |
| 4956 var_value->Bind(heap_number); | 5000 var_value->Bind(heap_number); |
| 4957 Goto(&done); | 5001 Goto(&done); |
| 4958 } | 5002 } |
| 4959 } | 5003 } |
| 4960 Bind(&if_in_descriptor); | 5004 Bind(&if_in_descriptor); |
| 4961 { | 5005 { |
| 4962 Node* value = | 5006 var_value->Bind( |
| 4963 LoadFixedArrayElement(descriptors, name_index, name_to_value_offset); | 5007 LoadValueForKeyIndex<DescriptorArray>(descriptors, name_index)); |
| 4964 var_value->Bind(value); | |
| 4965 Goto(&done); | 5008 Goto(&done); |
| 4966 } | 5009 } |
| 4967 Bind(&done); | 5010 Bind(&done); |
| 4968 | 5011 |
| 4969 Comment("] LoadPropertyFromFastObject"); | 5012 Comment("] LoadPropertyFromFastObject"); |
| 4970 } | 5013 } |
| 4971 | 5014 |
| 4972 void CodeStubAssembler::LoadPropertyFromNameDictionary(Node* dictionary, | 5015 void CodeStubAssembler::LoadPropertyFromNameDictionary(Node* dictionary, |
| 4973 Node* name_index, | 5016 Node* name_index, |
| 4974 Variable* var_details, | 5017 Variable* var_details, |
| 4975 Variable* var_value) { | 5018 Variable* var_value) { |
| 4976 Comment("LoadPropertyFromNameDictionary"); | 5019 Comment("LoadPropertyFromNameDictionary"); |
| 4977 CSA_ASSERT(this, IsDictionary(dictionary)); | 5020 CSA_ASSERT(this, IsDictionary(dictionary)); |
| 4978 const int name_to_details_offset = | |
| 4979 (NameDictionary::kEntryDetailsIndex - NameDictionary::kEntryKeyIndex) * | |
| 4980 kPointerSize; | |
| 4981 const int name_to_value_offset = | |
| 4982 (NameDictionary::kEntryValueIndex - NameDictionary::kEntryKeyIndex) * | |
| 4983 kPointerSize; | |
| 4984 | 5021 |
| 4985 Node* details = LoadAndUntagToWord32FixedArrayElement(dictionary, name_index, | 5022 var_details->Bind( |
| 4986 name_to_details_offset); | 5023 LoadDetailsForKeyIndex<NameDictionary>(dictionary, name_index)); |
| 4987 | 5024 var_value->Bind(LoadValueForKeyIndex<NameDictionary>(dictionary, name_index)); |
| 4988 var_details->Bind(details); | |
| 4989 var_value->Bind( | |
| 4990 LoadFixedArrayElement(dictionary, name_index, name_to_value_offset)); | |
| 4991 | 5025 |
| 4992 Comment("] LoadPropertyFromNameDictionary"); | 5026 Comment("] LoadPropertyFromNameDictionary"); |
| 4993 } | 5027 } |
| 4994 | 5028 |
| 4995 void CodeStubAssembler::LoadPropertyFromGlobalDictionary(Node* dictionary, | 5029 void CodeStubAssembler::LoadPropertyFromGlobalDictionary(Node* dictionary, |
| 4996 Node* name_index, | 5030 Node* name_index, |
| 4997 Variable* var_details, | 5031 Variable* var_details, |
| 4998 Variable* var_value, | 5032 Variable* var_value, |
| 4999 Label* if_deleted) { | 5033 Label* if_deleted) { |
| 5000 Comment("[ LoadPropertyFromGlobalDictionary"); | 5034 Comment("[ LoadPropertyFromGlobalDictionary"); |
| 5001 CSA_ASSERT(this, IsDictionary(dictionary)); | 5035 CSA_ASSERT(this, IsDictionary(dictionary)); |
| 5002 | 5036 |
| 5003 const int name_to_value_offset = | |
| 5004 (GlobalDictionary::kEntryValueIndex - GlobalDictionary::kEntryKeyIndex) * | |
| 5005 kPointerSize; | |
| 5006 | |
| 5007 Node* property_cell = | 5037 Node* property_cell = |
| 5008 LoadFixedArrayElement(dictionary, name_index, name_to_value_offset); | 5038 LoadValueForKeyIndex<GlobalDictionary>(dictionary, name_index); |
| 5009 | 5039 |
| 5010 Node* value = LoadObjectField(property_cell, PropertyCell::kValueOffset); | 5040 Node* value = LoadObjectField(property_cell, PropertyCell::kValueOffset); |
| 5011 GotoIf(WordEqual(value, TheHoleConstant()), if_deleted); | 5041 GotoIf(WordEqual(value, TheHoleConstant()), if_deleted); |
| 5012 | 5042 |
| 5013 var_value->Bind(value); | 5043 var_value->Bind(value); |
| 5014 | 5044 |
| 5015 Node* details = LoadAndUntagToWord32ObjectField(property_cell, | 5045 Node* details = LoadAndUntagToWord32ObjectField(property_cell, |
| 5016 PropertyCell::kDetailsOffset); | 5046 PropertyCell::kDetailsOffset); |
| 5017 var_details->Bind(details); | 5047 var_details->Bind(details); |
| 5018 | 5048 |
| (...skipping 3355 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 8374 formatted.c_str(), TENURED); | 8404 formatted.c_str(), TENURED); |
| 8375 CallRuntime(Runtime::kGlobalPrint, NoContextConstant(), | 8405 CallRuntime(Runtime::kGlobalPrint, NoContextConstant(), |
| 8376 HeapConstant(string)); | 8406 HeapConstant(string)); |
| 8377 } | 8407 } |
| 8378 CallRuntime(Runtime::kDebugPrint, NoContextConstant(), tagged_value); | 8408 CallRuntime(Runtime::kDebugPrint, NoContextConstant(), tagged_value); |
| 8379 #endif | 8409 #endif |
| 8380 } | 8410 } |
| 8381 | 8411 |
| 8382 } // namespace internal | 8412 } // namespace internal |
| 8383 } // namespace v8 | 8413 } // namespace v8 |
| OLD | NEW |