Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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 | 4 |
| 5 #include "src/objects.h" | 5 #include "src/objects.h" |
| 6 | 6 |
| 7 #include <cmath> | 7 #include <cmath> |
| 8 #include <iomanip> | 8 #include <iomanip> |
| 9 #include <sstream> | 9 #include <sstream> |
| 10 | 10 |
| (...skipping 1669 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1680 bool is_one_byte = this->IsOneByteRepresentation(); | 1680 bool is_one_byte = this->IsOneByteRepresentation(); |
| 1681 bool is_internalized = this->IsInternalizedString(); | 1681 bool is_internalized = this->IsInternalizedString(); |
| 1682 | 1682 |
| 1683 // Morph the string to an external string by replacing the map and | 1683 // Morph the string to an external string by replacing the map and |
| 1684 // reinitializing the fields. This won't work if the space the existing | 1684 // reinitializing the fields. This won't work if the space the existing |
| 1685 // string occupies is too small for a regular external string. | 1685 // string occupies is too small for a regular external string. |
| 1686 // Instead, we resort to a short external string instead, omitting | 1686 // Instead, we resort to a short external string instead, omitting |
| 1687 // the field caching the address of the backing store. When we encounter | 1687 // the field caching the address of the backing store. When we encounter |
| 1688 // short external strings in generated code, we need to bailout to runtime. | 1688 // short external strings in generated code, we need to bailout to runtime. |
| 1689 Map* new_map; | 1689 Map* new_map; |
| 1690 if (size < ExternalString::kSize) { | 1690 if (size < ExternalString::kSize || resource->isCompressible()) { |
|
Yang
2015/12/17 11:41:53
Is this necessary? For source strings, we always c
hajimehoshi
2016/01/05 08:07:44
I meant compressible string should use short_*_map
| |
| 1691 new_map = is_internalized | 1691 new_map = is_internalized |
| 1692 ? (is_one_byte | 1692 ? (is_one_byte |
| 1693 ? heap->short_external_internalized_string_with_one_byte_data_map() | 1693 ? heap->short_external_internalized_string_with_one_byte_data_map() |
| 1694 : heap->short_external_internalized_string_map()) | 1694 : heap->short_external_internalized_string_map()) |
| 1695 : (is_one_byte ? heap->short_external_string_with_one_byte_data_map() | 1695 : (is_one_byte ? heap->short_external_string_with_one_byte_data_map() |
| 1696 : heap->short_external_string_map()); | 1696 : heap->short_external_string_map()); |
| 1697 } else { | 1697 } else { |
| 1698 new_map = is_internalized | 1698 new_map = is_internalized |
| 1699 ? (is_one_byte | 1699 ? (is_one_byte |
| 1700 ? heap->external_internalized_string_with_one_byte_data_map() | 1700 ? heap->external_internalized_string_with_one_byte_data_map() |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1746 Heap* heap = GetHeap(); | 1746 Heap* heap = GetHeap(); |
| 1747 bool is_internalized = this->IsInternalizedString(); | 1747 bool is_internalized = this->IsInternalizedString(); |
| 1748 | 1748 |
| 1749 // Morph the string to an external string by replacing the map and | 1749 // Morph the string to an external string by replacing the map and |
| 1750 // reinitializing the fields. This won't work if the space the existing | 1750 // reinitializing the fields. This won't work if the space the existing |
| 1751 // string occupies is too small for a regular external string. | 1751 // string occupies is too small for a regular external string. |
| 1752 // Instead, we resort to a short external string instead, omitting | 1752 // Instead, we resort to a short external string instead, omitting |
| 1753 // the field caching the address of the backing store. When we encounter | 1753 // the field caching the address of the backing store. When we encounter |
| 1754 // short external strings in generated code, we need to bailout to runtime. | 1754 // short external strings in generated code, we need to bailout to runtime. |
| 1755 Map* new_map; | 1755 Map* new_map; |
| 1756 if (size < ExternalString::kSize) { | 1756 if (size < ExternalString::kSize || resource->isCompressible()) { |
| 1757 new_map = is_internalized | 1757 new_map = is_internalized |
| 1758 ? heap->short_external_one_byte_internalized_string_map() | 1758 ? heap->short_external_one_byte_internalized_string_map() |
| 1759 : heap->short_external_one_byte_string_map(); | 1759 : heap->short_external_one_byte_string_map(); |
| 1760 } else { | 1760 } else { |
| 1761 new_map = is_internalized | 1761 new_map = is_internalized |
| 1762 ? heap->external_one_byte_internalized_string_map() | 1762 ? heap->external_one_byte_internalized_string_map() |
| 1763 : heap->external_one_byte_string_map(); | 1763 : heap->external_one_byte_string_map(); |
| 1764 } | 1764 } |
| 1765 | 1765 |
| 1766 // Byte size of the external String object. | 1766 // Byte size of the external String object. |
| (...skipping 17598 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 19365 if (cell->value() != *new_value) { | 19365 if (cell->value() != *new_value) { |
| 19366 cell->set_value(*new_value); | 19366 cell->set_value(*new_value); |
| 19367 Isolate* isolate = cell->GetIsolate(); | 19367 Isolate* isolate = cell->GetIsolate(); |
| 19368 cell->dependent_code()->DeoptimizeDependentCodeGroup( | 19368 cell->dependent_code()->DeoptimizeDependentCodeGroup( |
| 19369 isolate, DependentCode::kPropertyCellChangedGroup); | 19369 isolate, DependentCode::kPropertyCellChangedGroup); |
| 19370 } | 19370 } |
| 19371 } | 19371 } |
| 19372 | 19372 |
| 19373 } // namespace internal | 19373 } // namespace internal |
| 19374 } // namespace v8 | 19374 } // namespace v8 |
| OLD | NEW |