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 <stdlib.h> | 5 #include <stdlib.h> |
6 #include <utility> | 6 #include <utility> |
7 | 7 |
8 #include "test/cctest/test-api.h" | 8 #include "test/cctest/test-api.h" |
9 | 9 |
10 #include "src/v8.h" | 10 #include "src/v8.h" |
(...skipping 437 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
448 // Create a map, add required properties to it and initialize expectations. | 448 // Create a map, add required properties to it and initialize expectations. |
449 Handle<Map> initial_map = Map::Create(isolate, 0); | 449 Handle<Map> initial_map = Map::Create(isolate, 0); |
450 Handle<Map> map = initial_map; | 450 Handle<Map> map = initial_map; |
451 map = expectations.AddAccessorConstant(map, NONE, pair); | 451 map = expectations.AddAccessorConstant(map, NONE, pair); |
452 | 452 |
453 CHECK(!map->is_deprecated()); | 453 CHECK(!map->is_deprecated()); |
454 CHECK(map->is_stable()); | 454 CHECK(map->is_stable()); |
455 CHECK(expectations.Check(*map)); | 455 CHECK(expectations.Check(*map)); |
456 | 456 |
457 Handle<Map> new_map = Map::ReconfigureProperty( | 457 Handle<Map> new_map = Map::ReconfigureProperty( |
458 map, 0, kData, NONE, Representation::None(), none_type, FORCE_FIELD); | 458 map, 0, kData, NONE, Representation::None(), none_type); |
459 // |map| did not change except marked unstable. | 459 // |map| did not change except marked unstable. |
460 CHECK(!map->is_deprecated()); | 460 CHECK(!map->is_deprecated()); |
461 CHECK(!map->is_stable()); | 461 CHECK(!map->is_stable()); |
462 CHECK(expectations.Check(*map)); | 462 CHECK(expectations.Check(*map)); |
463 | 463 |
464 expectations.SetDataField(0, NONE, Representation::None(), none_type); | 464 expectations.SetDataField(0, NONE, Representation::None(), none_type); |
465 | 465 |
466 CHECK(!new_map->is_deprecated()); | 466 CHECK(!new_map->is_deprecated()); |
467 CHECK(new_map->is_stable()); | 467 CHECK(new_map->is_stable()); |
468 CHECK(expectations.Check(*new_map)); | 468 CHECK(expectations.Check(*new_map)); |
469 | 469 |
470 Handle<Map> new_map2 = Map::ReconfigureProperty( | 470 Handle<Map> new_map2 = Map::ReconfigureProperty( |
471 map, 0, kData, NONE, Representation::None(), none_type, FORCE_FIELD); | 471 map, 0, kData, NONE, Representation::None(), none_type); |
472 CHECK_EQ(*new_map, *new_map2); | 472 CHECK_EQ(*new_map, *new_map2); |
473 | 473 |
474 Handle<Object> value(Smi::kZero, isolate); | 474 Handle<Object> value(Smi::kZero, isolate); |
475 Handle<Map> prepared_map = Map::PrepareForDataProperty(new_map, 0, value); | 475 Handle<Map> prepared_map = Map::PrepareForDataProperty(new_map, 0, value); |
476 // None to Smi generalization is trivial, map does not change. | 476 // None to Smi generalization is trivial, map does not change. |
477 CHECK_EQ(*new_map, *prepared_map); | 477 CHECK_EQ(*new_map, *prepared_map); |
478 | 478 |
479 expectations.SetDataField(0, NONE, Representation::Smi(), any_type); | 479 expectations.SetDataField(0, NONE, Representation::Smi(), any_type); |
480 CHECK(prepared_map->is_stable()); | 480 CHECK(prepared_map->is_stable()); |
481 CHECK(expectations.Check(*prepared_map)); | 481 CHECK(expectations.Check(*prepared_map)); |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
585 } | 585 } |
586 CHECK(!map->is_deprecated()); | 586 CHECK(!map->is_deprecated()); |
587 CHECK(map->is_stable()); | 587 CHECK(map->is_stable()); |
588 CHECK(expectations.Check(*map)); | 588 CHECK(expectations.Check(*map)); |
589 | 589 |
590 Zone zone(isolate->allocator(), ZONE_NAME); | 590 Zone zone(isolate->allocator(), ZONE_NAME); |
591 | 591 |
592 if (is_detached_map) { | 592 if (is_detached_map) { |
593 detach_point_map = Map::ReconfigureProperty( | 593 detach_point_map = Map::ReconfigureProperty( |
594 detach_point_map, detach_property_at_index, kData, NONE, | 594 detach_point_map, detach_property_at_index, kData, NONE, |
595 Representation::Tagged(), any_type, FORCE_FIELD); | 595 Representation::Tagged(), any_type); |
596 expectations.SetDataField(detach_property_at_index, | 596 expectations.SetDataField(detach_property_at_index, |
597 Representation::Tagged(), any_type); | 597 Representation::Tagged(), any_type); |
598 CHECK(map->is_deprecated()); | 598 CHECK(map->is_deprecated()); |
599 CHECK(expectations.Check(*detach_point_map, | 599 CHECK(expectations.Check(*detach_point_map, |
600 detach_point_map->NumberOfOwnDescriptors())); | 600 detach_point_map->NumberOfOwnDescriptors())); |
601 } | 601 } |
602 | 602 |
603 // Create new maps by generalizing representation of propX field. | 603 // Create new maps by generalizing representation of propX field. |
604 Handle<Map> field_owner(map->FindFieldOwner(property_index), isolate); | 604 Handle<Map> field_owner(map->FindFieldOwner(property_index), isolate); |
605 CompilationDependencies dependencies(isolate, &zone); | 605 CompilationDependencies dependencies(isolate, &zone); |
606 CHECK(!dependencies.HasAborted()); | 606 CHECK(!dependencies.HasAborted()); |
607 | 607 |
608 dependencies.AssumeFieldOwner(field_owner); | 608 dependencies.AssumeFieldOwner(field_owner); |
609 | 609 |
610 Handle<Map> new_map = | 610 Handle<Map> new_map = Map::ReconfigureProperty( |
611 Map::ReconfigureProperty(map, property_index, kData, NONE, | 611 map, property_index, kData, NONE, to_representation, to_type); |
612 to_representation, to_type, FORCE_FIELD); | |
613 | 612 |
614 expectations.SetDataField(property_index, expected_representation, | 613 expectations.SetDataField(property_index, expected_representation, |
615 expected_type); | 614 expected_type); |
616 | 615 |
617 CHECK(!new_map->is_deprecated()); | 616 CHECK(!new_map->is_deprecated()); |
618 CHECK(expectations.Check(*new_map)); | 617 CHECK(expectations.Check(*new_map)); |
619 | 618 |
620 if (is_detached_map) { | 619 if (is_detached_map) { |
621 CHECK(!map->is_stable()); | 620 CHECK(!map->is_stable()); |
622 CHECK(map->is_deprecated()); | 621 CHECK(map->is_deprecated()); |
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
893 | 892 |
894 // Create new maps by generalizing representation of propX field. | 893 // Create new maps by generalizing representation of propX field. |
895 Handle<Map> maps[kPropCount]; | 894 Handle<Map> maps[kPropCount]; |
896 for (int i = 0; i < kPropCount; i++) { | 895 for (int i = 0; i < kPropCount; i++) { |
897 if (i == kAccessorProp) { | 896 if (i == kAccessorProp) { |
898 // Skip accessor property reconfiguration. | 897 // Skip accessor property reconfiguration. |
899 maps[i] = maps[i - 1]; | 898 maps[i] = maps[i - 1]; |
900 continue; | 899 continue; |
901 } | 900 } |
902 Handle<Map> new_map = Map::ReconfigureProperty( | 901 Handle<Map> new_map = Map::ReconfigureProperty( |
903 map, i, kData, NONE, Representation::Double(), any_type, FORCE_FIELD); | 902 map, i, kData, NONE, Representation::Double(), any_type); |
904 maps[i] = new_map; | 903 maps[i] = new_map; |
905 | 904 |
906 expectations.SetDataField(i, Representation::Double(), any_type); | 905 expectations.SetDataField(i, Representation::Double(), any_type); |
907 | 906 |
908 CHECK(!map->is_stable()); | 907 CHECK(!map->is_stable()); |
909 CHECK(map->is_deprecated()); | 908 CHECK(map->is_deprecated()); |
910 CHECK_NE(*map, *new_map); | 909 CHECK_NE(*map, *new_map); |
911 CHECK(i == 0 || maps[i - 1]->is_deprecated()); | 910 CHECK(i == 0 || maps[i - 1]->is_deprecated()); |
912 | 911 |
913 CHECK(!new_map->is_deprecated()); | 912 CHECK(!new_map->is_deprecated()); |
(...skipping 933 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1847 } | 1846 } |
1848 | 1847 |
1849 Handle<String> name = MakeName("prop", i); | 1848 Handle<String> name = MakeName("prop", i); |
1850 Map* target = | 1849 Map* target = |
1851 TransitionArray::SearchTransition(*map2, kData, *name, NONE); | 1850 TransitionArray::SearchTransition(*map2, kData, *name, NONE); |
1852 CHECK(target != NULL); | 1851 CHECK(target != NULL); |
1853 map2 = handle(target); | 1852 map2 = handle(target); |
1854 } | 1853 } |
1855 | 1854 |
1856 map2 = Map::ReconfigureProperty(map2, kSplitProp, kData, NONE, | 1855 map2 = Map::ReconfigureProperty(map2, kSplitProp, kData, NONE, |
1857 Representation::Double(), any_type, | 1856 Representation::Double(), any_type); |
1858 FORCE_FIELD); | |
1859 expectations.SetDataField(kSplitProp, Representation::Double(), any_type); | 1857 expectations.SetDataField(kSplitProp, Representation::Double(), any_type); |
1860 | 1858 |
1861 CHECK(expectations.Check(*split_map, kSplitProp)); | 1859 CHECK(expectations.Check(*split_map, kSplitProp)); |
1862 CHECK(expectations.Check(*map2, kSplitProp + 1)); | 1860 CHECK(expectations.Check(*map2, kSplitProp + 1)); |
1863 } | 1861 } |
1864 | 1862 |
1865 // At this point |map| should be deprecated and disconnected from the | 1863 // At this point |map| should be deprecated and disconnected from the |
1866 // transition tree. | 1864 // transition tree. |
1867 CHECK(map->is_deprecated()); | 1865 CHECK(map->is_deprecated()); |
1868 CHECK(!split_map->is_deprecated()); | 1866 CHECK(!split_map->is_deprecated()); |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1947 } | 1945 } |
1948 } | 1946 } |
1949 | 1947 |
1950 CHECK(!map2->is_deprecated()); | 1948 CHECK(!map2->is_deprecated()); |
1951 CHECK(map2->is_stable()); | 1949 CHECK(map2->is_stable()); |
1952 CHECK(expectations2.Check(*map2)); | 1950 CHECK(expectations2.Check(*map2)); |
1953 | 1951 |
1954 // Create new maps by generalizing representation of propX field. | 1952 // Create new maps by generalizing representation of propX field. |
1955 Handle<Map> maps[kPropCount]; | 1953 Handle<Map> maps[kPropCount]; |
1956 for (int i = 0; i < kPropCount; i++) { | 1954 for (int i = 0; i < kPropCount; i++) { |
1957 Handle<Map> new_map = Map::ReconfigureProperty( | 1955 Handle<Map> new_map = Map::ReconfigureProperty(map, i, kData, NONE, |
1958 map, i, kData, NONE, to_representation, to_type, FORCE_FIELD); | 1956 to_representation, to_type); |
1959 maps[i] = new_map; | 1957 maps[i] = new_map; |
1960 | 1958 |
1961 expectations.SetDataField(i, expected_representation, expected_type); | 1959 expectations.SetDataField(i, expected_representation, expected_type); |
1962 | 1960 |
1963 CHECK(map->is_deprecated()); | 1961 CHECK(map->is_deprecated()); |
1964 CHECK_NE(*map, *new_map); | 1962 CHECK_NE(*map, *new_map); |
1965 CHECK(i == 0 || maps[i - 1]->is_deprecated()); | 1963 CHECK(i == 0 || maps[i - 1]->is_deprecated()); |
1966 CHECK(expectations.Check(*new_map)); | 1964 CHECK(expectations.Check(*new_map)); |
1967 | 1965 |
1968 Handle<Map> new_map2 = Map::Update(map2); | 1966 Handle<Map> new_map2 = Map::Update(map2); |
(...skipping 462 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2431 Isolate* isolate = CcTest::i_isolate(); | 2429 Isolate* isolate = CcTest::i_isolate(); |
2432 | 2430 |
2433 Zone zone(isolate->allocator(), ZONE_NAME); | 2431 Zone zone(isolate->allocator(), ZONE_NAME); |
2434 | 2432 |
2435 CHECK_EQ(FieldType::Any()->Convert(&zone), AstType::NonInternal()); | 2433 CHECK_EQ(FieldType::Any()->Convert(&zone), AstType::NonInternal()); |
2436 CHECK_EQ(FieldType::None()->Convert(&zone), AstType::None()); | 2434 CHECK_EQ(FieldType::None()->Convert(&zone), AstType::None()); |
2437 } | 2435 } |
2438 | 2436 |
2439 // TODO(ishell): add this test once IS_ACCESSOR_FIELD_SUPPORTED is supported. | 2437 // TODO(ishell): add this test once IS_ACCESSOR_FIELD_SUPPORTED is supported. |
2440 // TEST(TransitionAccessorConstantToAnotherAccessorConstant) | 2438 // TEST(TransitionAccessorConstantToAnotherAccessorConstant) |
OLD | NEW |