| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 1795 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1806 // transitions with the same key. | 1806 // transitions with the same key. |
| 1807 | 1807 |
| 1808 if (old_map->owns_descriptors()) { | 1808 if (old_map->owns_descriptors()) { |
| 1809 // If the old map owns its own descriptors, transfer ownership to the | 1809 // If the old map owns its own descriptors, transfer ownership to the |
| 1810 // new_map and install its descriptors in the old_map. Since the old_map | 1810 // new_map and install its descriptors in the old_map. Since the old_map |
| 1811 // stores the descriptors for the new_map, remove the transition array of | 1811 // stores the descriptors for the new_map, remove the transition array of |
| 1812 // the new_map that is only in place to store the descriptors. | 1812 // the new_map that is only in place to store the descriptors. |
| 1813 old_map->transitions()->set_descriptors(new_map->instance_descriptors()); | 1813 old_map->transitions()->set_descriptors(new_map->instance_descriptors()); |
| 1814 new_map->ClearTransitions(GetHeap()); | 1814 new_map->ClearTransitions(GetHeap()); |
| 1815 old_map->set_owns_descriptors(false); | 1815 old_map->set_owns_descriptors(false); |
| 1816 Map* map; |
| 1817 JSGlobalPropertyCell* pointer = |
| 1818 old_map->transitions()->descriptors_pointer(); |
| 1819 for (Object* current = old_map; |
| 1820 !current->IsUndefined(); |
| 1821 current = map->GetBackPointer()) { |
| 1822 map = Map::cast(current); |
| 1823 if (!map->HasTransitionArray()) break; |
| 1824 TransitionArray* transitions = map->transitions(); |
| 1825 if (transitions->descriptors_pointer() != pointer) break; |
| 1826 map->SetEnumLength(Map::kInvalidEnumCache); |
| 1827 } |
| 1816 } else if (old_target->instance_descriptors() == | 1828 } else if (old_target->instance_descriptors() == |
| 1817 old_map->instance_descriptors()) { | 1829 old_map->instance_descriptors()) { |
| 1818 // Since the conversion above generated a new fast map with an additional | 1830 // Since the conversion above generated a new fast map with an additional |
| 1819 // property which can be shared as well, install this descriptor pointer | 1831 // property which can be shared as well, install this descriptor pointer |
| 1820 // along the entire chain of smaller maps; and remove the transition array | 1832 // along the entire chain of smaller maps; and remove the transition array |
| 1821 // that is only in place to hold the descriptor array in the new map. | 1833 // that is only in place to hold the descriptor array in the new map. |
| 1822 Map* map; | 1834 Map* map; |
| 1823 JSGlobalPropertyCell* new_pointer = | 1835 JSGlobalPropertyCell* new_pointer = |
| 1824 new_map->transitions()->descriptors_pointer(); | 1836 new_map->transitions()->descriptors_pointer(); |
| 1825 JSGlobalPropertyCell* old_pointer = | 1837 JSGlobalPropertyCell* old_pointer = |
| 1826 old_map->transitions()->descriptors_pointer(); | 1838 old_map->transitions()->descriptors_pointer(); |
| 1827 for (Object* current = old_map; | 1839 for (Object* current = old_map; |
| 1828 !current->IsUndefined(); | 1840 !current->IsUndefined(); |
| 1829 current = map->GetBackPointer()) { | 1841 current = map->GetBackPointer()) { |
| 1830 map = Map::cast(current); | 1842 map = Map::cast(current); |
| 1831 if (!map->HasTransitionArray()) break; | 1843 if (!map->HasTransitionArray()) break; |
| 1832 TransitionArray* transitions = map->transitions(); | 1844 TransitionArray* transitions = map->transitions(); |
| 1833 if (transitions->descriptors_pointer() != old_pointer) break; | 1845 if (transitions->descriptors_pointer() != old_pointer) break; |
| 1846 map->SetEnumLength(Map::kInvalidEnumCache); |
| 1834 transitions->set_descriptors_pointer(new_pointer); | 1847 transitions->set_descriptors_pointer(new_pointer); |
| 1835 } | 1848 } |
| 1836 new_map->ClearTransitions(GetHeap()); | 1849 new_map->ClearTransitions(GetHeap()); |
| 1837 } | 1850 } |
| 1838 | 1851 |
| 1839 old_map->SetTransition(transition_index, new_map); | 1852 old_map->SetTransition(transition_index, new_map); |
| 1840 new_map->SetBackPointer(old_map); | 1853 new_map->SetBackPointer(old_map); |
| 1841 return result; | 1854 return result; |
| 1842 } | 1855 } |
| 1843 | 1856 |
| (...skipping 11634 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 13478 set_year(Smi::FromInt(year), SKIP_WRITE_BARRIER); | 13491 set_year(Smi::FromInt(year), SKIP_WRITE_BARRIER); |
| 13479 set_month(Smi::FromInt(month), SKIP_WRITE_BARRIER); | 13492 set_month(Smi::FromInt(month), SKIP_WRITE_BARRIER); |
| 13480 set_day(Smi::FromInt(day), SKIP_WRITE_BARRIER); | 13493 set_day(Smi::FromInt(day), SKIP_WRITE_BARRIER); |
| 13481 set_weekday(Smi::FromInt(weekday), SKIP_WRITE_BARRIER); | 13494 set_weekday(Smi::FromInt(weekday), SKIP_WRITE_BARRIER); |
| 13482 set_hour(Smi::FromInt(hour), SKIP_WRITE_BARRIER); | 13495 set_hour(Smi::FromInt(hour), SKIP_WRITE_BARRIER); |
| 13483 set_min(Smi::FromInt(min), SKIP_WRITE_BARRIER); | 13496 set_min(Smi::FromInt(min), SKIP_WRITE_BARRIER); |
| 13484 set_sec(Smi::FromInt(sec), SKIP_WRITE_BARRIER); | 13497 set_sec(Smi::FromInt(sec), SKIP_WRITE_BARRIER); |
| 13485 } | 13498 } |
| 13486 | 13499 |
| 13487 } } // namespace v8::internal | 13500 } } // namespace v8::internal |
| OLD | NEW |