OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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 <stdlib.h> | 5 #include <stdlib.h> |
6 #include <utility> | 6 #include <utility> |
7 | 7 |
8 #include "src/v8.h" | 8 #include "src/v8.h" |
9 | 9 |
10 #include "src/compilation-cache.h" | 10 #include "src/compilation-cache.h" |
(...skipping 741 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
752 // This method calls LayoutDescriptor::AppendIfFastOrUseFull() internally | 752 // This method calls LayoutDescriptor::AppendIfFastOrUseFull() internally |
753 // and does all the required map-descriptors related book keeping. | 753 // and does all the required map-descriptors related book keeping. |
754 Handle<Map> last_map = Map::AddMissingTransitionsForTesting( | 754 Handle<Map> last_map = Map::AddMissingTransitionsForTesting( |
755 initial_map, descriptors, full_layout_descriptor); | 755 initial_map, descriptors, full_layout_descriptor); |
756 | 756 |
757 // Follow back pointers to construct a sequence of maps from |map| | 757 // Follow back pointers to construct a sequence of maps from |map| |
758 // to |last_map|. | 758 // to |last_map|. |
759 int descriptors_length = descriptors->number_of_descriptors(); | 759 int descriptors_length = descriptors->number_of_descriptors(); |
760 std::vector<Handle<Map>> maps(descriptors_length); | 760 std::vector<Handle<Map>> maps(descriptors_length); |
761 { | 761 { |
| 762 CHECK(last_map->is_stable()); |
762 Map* map = *last_map; | 763 Map* map = *last_map; |
763 for (int i = 0; i < descriptors_length; i++) { | 764 for (int i = 0; i < descriptors_length; i++) { |
764 maps[descriptors_length - 1 - i] = handle(map, isolate); | 765 maps[descriptors_length - 1 - i] = handle(map, isolate); |
765 Object* maybe_map = map->GetBackPointer(); | 766 Object* maybe_map = map->GetBackPointer(); |
766 CHECK(maybe_map->IsMap()); | 767 CHECK(maybe_map->IsMap()); |
767 map = Map::cast(maybe_map); | 768 map = Map::cast(maybe_map); |
| 769 CHECK(!map->is_stable()); |
768 } | 770 } |
769 CHECK_EQ(1, maps[0]->NumberOfOwnDescriptors()); | 771 CHECK_EQ(1, maps[0]->NumberOfOwnDescriptors()); |
770 } | 772 } |
771 | 773 |
772 Handle<Map> map; | 774 Handle<Map> map; |
773 // Now check layout descriptors of all intermediate maps. | 775 // Now check layout descriptors of all intermediate maps. |
774 for (int i = 0; i < number_of_descriptors; i++) { | 776 for (int i = 0; i < number_of_descriptors; i++) { |
775 PropertyDetails details = descriptors->GetDetails(i); | 777 PropertyDetails details = descriptors->GetDetails(i); |
776 map = maps[i]; | 778 map = maps[i]; |
777 LayoutDescriptor* layout_desc = map->layout_descriptor(); | 779 LayoutDescriptor* layout_desc = map->layout_descriptor(); |
(...skipping 842 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1620 | 1622 |
1621 // TODO(ishell): add respective tests for property kind reconfiguring from | 1623 // TODO(ishell): add respective tests for property kind reconfiguring from |
1622 // accessor field to double, once accessor fields are supported by | 1624 // accessor field to double, once accessor fields are supported by |
1623 // Map::ReconfigureProperty(). | 1625 // Map::ReconfigureProperty(). |
1624 | 1626 |
1625 | 1627 |
1626 // TODO(ishell): add respective tests for fast property removal case once | 1628 // TODO(ishell): add respective tests for fast property removal case once |
1627 // Map::ReconfigureProperty() supports that. | 1629 // Map::ReconfigureProperty() supports that. |
1628 | 1630 |
1629 #endif | 1631 #endif |
OLD | NEW |