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 563 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
574 } | 574 } |
575 InitializeVerifiedMapDescriptors(*map, *descriptors, *layout_descriptor); | 575 InitializeVerifiedMapDescriptors(*map, *descriptors, *layout_descriptor); |
576 | 576 |
577 // Now test LayoutDescriptor::cast_gc_safe(). | 577 // Now test LayoutDescriptor::cast_gc_safe(). |
578 Handle<LayoutDescriptor> layout_descriptor_copy = | 578 Handle<LayoutDescriptor> layout_descriptor_copy = |
579 LayoutDescriptor::New(map, descriptors, kPropsCount); | 579 LayoutDescriptor::New(map, descriptors, kPropsCount); |
580 | 580 |
581 LayoutDescriptor* layout_desc = *layout_descriptor; | 581 LayoutDescriptor* layout_desc = *layout_descriptor; |
582 CHECK_EQ(layout_desc, LayoutDescriptor::cast(layout_desc)); | 582 CHECK_EQ(layout_desc, LayoutDescriptor::cast(layout_desc)); |
583 CHECK_EQ(layout_desc, LayoutDescriptor::cast_gc_safe(layout_desc)); | 583 CHECK_EQ(layout_desc, LayoutDescriptor::cast_gc_safe(layout_desc)); |
584 CHECK(layout_descriptor->IsJSTypedArray()); | 584 CHECK(layout_descriptor->IsFixedTypedArrayBase()); |
585 // Now make it look like a forwarding pointer to layout_descriptor_copy. | 585 // Now make it look like a forwarding pointer to layout_descriptor_copy. |
586 MapWord map_word = layout_desc->map_word(); | 586 MapWord map_word = layout_desc->map_word(); |
587 CHECK(!map_word.IsForwardingAddress()); | 587 CHECK(!map_word.IsForwardingAddress()); |
588 layout_desc->set_map_word( | 588 layout_desc->set_map_word( |
589 MapWord::FromForwardingAddress(*layout_descriptor_copy)); | 589 MapWord::FromForwardingAddress(*layout_descriptor_copy)); |
590 CHECK(layout_desc->map_word().IsForwardingAddress()); | 590 CHECK(layout_desc->map_word().IsForwardingAddress()); |
591 CHECK_EQ(*layout_descriptor_copy, | 591 CHECK_EQ(*layout_descriptor_copy, |
592 LayoutDescriptor::cast_gc_safe(layout_desc)); | 592 LayoutDescriptor::cast_gc_safe(layout_desc)); |
593 | 593 |
594 // Restore it back. | 594 // Restore it back. |
(...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
928 map = Map::CopyWithField(map, MakeName("prop", i), any_type, NONE, | 928 map = Map::CopyWithField(map, MakeName("prop", i), any_type, NONE, |
929 Representation::Smi(), | 929 Representation::Smi(), |
930 INSERT_TRANSITION).ToHandleChecked(); | 930 INSERT_TRANSITION).ToHandleChecked(); |
931 } | 931 } |
932 map = Map::CopyWithField(map, MakeName("dbl", kSplitFieldIndex), any_type, | 932 map = Map::CopyWithField(map, MakeName("dbl", kSplitFieldIndex), any_type, |
933 NONE, Representation::Double(), | 933 NONE, Representation::Double(), |
934 INSERT_TRANSITION).ToHandleChecked(); | 934 INSERT_TRANSITION).ToHandleChecked(); |
935 CHECK(map->layout_descriptor()->IsConsistentWithMap(*map, true)); | 935 CHECK(map->layout_descriptor()->IsConsistentWithMap(*map, true)); |
936 CHECK(map->layout_descriptor()->IsSlowLayout()); | 936 CHECK(map->layout_descriptor()->IsSlowLayout()); |
937 CHECK(map->owns_descriptors()); | 937 CHECK(map->owns_descriptors()); |
938 CHECK_EQ(2, Smi::cast(map->layout_descriptor()->length())->value()); | 938 CHECK_EQ(2, map->layout_descriptor()->length()); |
939 | 939 |
940 { | 940 { |
941 // Add transitions to double fields. | 941 // Add transitions to double fields. |
942 v8::HandleScope scope(CcTest::isolate()); | 942 v8::HandleScope scope(CcTest::isolate()); |
943 | 943 |
944 Handle<Map> tmp_map = map; | 944 Handle<Map> tmp_map = map; |
945 for (int i = kSplitFieldIndex + 1; i < kFieldCount; i++) { | 945 for (int i = kSplitFieldIndex + 1; i < kFieldCount; i++) { |
946 tmp_map = Map::CopyWithField(tmp_map, MakeName("dbl", i), any_type, NONE, | 946 tmp_map = Map::CopyWithField(tmp_map, MakeName("dbl", i), any_type, NONE, |
947 Representation::Double(), | 947 Representation::Double(), |
948 INSERT_TRANSITION).ToHandleChecked(); | 948 INSERT_TRANSITION).ToHandleChecked(); |
949 CHECK(tmp_map->layout_descriptor()->IsConsistentWithMap(*tmp_map, true)); | 949 CHECK(tmp_map->layout_descriptor()->IsConsistentWithMap(*tmp_map, true)); |
950 } | 950 } |
951 // Check that descriptors are shared. | 951 // Check that descriptors are shared. |
952 CHECK(tmp_map->owns_descriptors()); | 952 CHECK(tmp_map->owns_descriptors()); |
953 CHECK_EQ(map->instance_descriptors(), tmp_map->instance_descriptors()); | 953 CHECK_EQ(map->instance_descriptors(), tmp_map->instance_descriptors()); |
954 CHECK_EQ(map->layout_descriptor(), tmp_map->layout_descriptor()); | 954 CHECK_EQ(map->layout_descriptor(), tmp_map->layout_descriptor()); |
955 } | 955 } |
956 CHECK(map->layout_descriptor()->IsSlowLayout()); | 956 CHECK(map->layout_descriptor()->IsSlowLayout()); |
957 CHECK_EQ(4, Smi::cast(map->layout_descriptor()->length())->value()); | 957 CHECK_EQ(4, map->layout_descriptor()->length()); |
958 | 958 |
959 // The unused tail of the layout descriptor is now "durty" because of sharing. | 959 // The unused tail of the layout descriptor is now "durty" because of sharing. |
960 CHECK(map->layout_descriptor()->IsConsistentWithMap(*map)); | 960 CHECK(map->layout_descriptor()->IsConsistentWithMap(*map)); |
961 for (int i = kSplitFieldIndex + 1; i < kTrimmedLayoutDescriptorLength; i++) { | 961 for (int i = kSplitFieldIndex + 1; i < kTrimmedLayoutDescriptorLength; i++) { |
962 CHECK(!map->layout_descriptor()->IsTagged(i)); | 962 CHECK(!map->layout_descriptor()->IsTagged(i)); |
963 } | 963 } |
964 CHECK_LT(map->NumberOfOwnDescriptors(), | 964 CHECK_LT(map->NumberOfOwnDescriptors(), |
965 map->instance_descriptors()->number_of_descriptors()); | 965 map->instance_descriptors()->number_of_descriptors()); |
966 | 966 |
967 // Call GC that should trim both |map|'s descriptor array and layout | 967 // Call GC that should trim both |map|'s descriptor array and layout |
968 // descriptor. | 968 // descriptor. |
969 CcTest::heap()->CollectAllGarbage(Heap::kNoGCFlags); | 969 CcTest::heap()->CollectAllGarbage(Heap::kNoGCFlags); |
970 | 970 |
971 // The unused tail of the layout descriptor is now "clean" again. | 971 // The unused tail of the layout descriptor is now "clean" again. |
972 CHECK(map->layout_descriptor()->IsConsistentWithMap(*map, true)); | 972 CHECK(map->layout_descriptor()->IsConsistentWithMap(*map, true)); |
973 CHECK(map->owns_descriptors()); | 973 CHECK(map->owns_descriptors()); |
974 CHECK_EQ(map->NumberOfOwnDescriptors(), | 974 CHECK_EQ(map->NumberOfOwnDescriptors(), |
975 map->instance_descriptors()->number_of_descriptors()); | 975 map->instance_descriptors()->number_of_descriptors()); |
976 CHECK(map->layout_descriptor()->IsSlowLayout()); | 976 CHECK(map->layout_descriptor()->IsSlowLayout()); |
977 CHECK_EQ(2, Smi::cast(map->layout_descriptor()->length())->value()); | 977 CHECK_EQ(2, map->layout_descriptor()->length()); |
978 | 978 |
979 { | 979 { |
980 // Add transitions to tagged fields. | 980 // Add transitions to tagged fields. |
981 v8::HandleScope scope(CcTest::isolate()); | 981 v8::HandleScope scope(CcTest::isolate()); |
982 | 982 |
983 Handle<Map> tmp_map = map; | 983 Handle<Map> tmp_map = map; |
984 for (int i = kSplitFieldIndex + 1; i < kFieldCount - 1; i++) { | 984 for (int i = kSplitFieldIndex + 1; i < kFieldCount - 1; i++) { |
985 tmp_map = Map::CopyWithField(tmp_map, MakeName("tagged", i), any_type, | 985 tmp_map = Map::CopyWithField(tmp_map, MakeName("tagged", i), any_type, |
986 NONE, Representation::Tagged(), | 986 NONE, Representation::Tagged(), |
987 INSERT_TRANSITION).ToHandleChecked(); | 987 INSERT_TRANSITION).ToHandleChecked(); |
(...skipping 693 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1681 | 1681 |
1682 // TODO(ishell): add respective tests for property kind reconfiguring from | 1682 // TODO(ishell): add respective tests for property kind reconfiguring from |
1683 // accessor field to double, once accessor fields are supported by | 1683 // accessor field to double, once accessor fields are supported by |
1684 // Map::ReconfigureProperty(). | 1684 // Map::ReconfigureProperty(). |
1685 | 1685 |
1686 | 1686 |
1687 // TODO(ishell): add respective tests for fast property removal case once | 1687 // TODO(ishell): add respective tests for fast property removal case once |
1688 // Map::ReconfigureProperty() supports that. | 1688 // Map::ReconfigureProperty() supports that. |
1689 | 1689 |
1690 #endif | 1690 #endif |
OLD | NEW |