OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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 <vector> | 5 #include <vector> |
6 | 6 |
7 #include "src/hydrogen-types.h" | 7 #include "src/hydrogen-types.h" |
8 #include "src/isolate-inl.h" | 8 #include "src/isolate-inl.h" |
9 #include "src/types.h" | 9 #include "src/types.h" |
10 #include "test/cctest/cctest.h" | 10 #include "test/cctest/cctest.h" |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
102 | 102 |
103 Isolate* isolate; | 103 Isolate* isolate; |
104 HandleScope scope; | 104 HandleScope scope; |
105 Zone zone; | 105 Zone zone; |
106 TypesInstance T; | 106 TypesInstance T; |
107 | 107 |
108 Tests() | 108 Tests() |
109 : isolate(CcTest::i_isolate()), | 109 : isolate(CcTest::i_isolate()), |
110 scope(isolate), | 110 scope(isolate), |
111 zone(), | 111 zone(), |
112 T(Rep::ToRegion(&zone, isolate), isolate) {} | 112 T(Rep::ToRegion(&zone, isolate), isolate, |
| 113 isolate->random_number_generator()) {} |
113 | 114 |
114 bool Equal(TypeHandle type1, TypeHandle type2) { | 115 bool Equal(TypeHandle type1, TypeHandle type2) { |
115 return | 116 return |
116 type1->Equals(type2) && | 117 type1->Equals(type2) && |
117 this->IsBitset(type1) == this->IsBitset(type2) && | 118 this->IsBitset(type1) == this->IsBitset(type2) && |
118 this->IsUnion(type1) == this->IsUnion(type2) && | 119 this->IsUnion(type1) == this->IsUnion(type2) && |
119 type1->NumClasses() == type2->NumClasses() && | 120 type1->NumClasses() == type2->NumClasses() && |
120 type1->NumConstants() == type2->NumConstants() && | 121 type1->NumConstants() == type2->NumConstants() && |
121 (!this->IsBitset(type1) || | 122 (!this->IsBitset(type1) || |
122 this->AsBitset(type1) == this->AsBitset(type2)) && | 123 this->AsBitset(type1) == this->AsBitset(type2)) && |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
227 this->AsBitset(union12)); | 228 this->AsBitset(union12)); |
228 } | 229 } |
229 } | 230 } |
230 } | 231 } |
231 | 232 |
232 // Intersect(T1, T2) is bitwise conjunction for bitsets T1,T2 (modulo None) | 233 // Intersect(T1, T2) is bitwise conjunction for bitsets T1,T2 (modulo None) |
233 for (TypeIterator it1 = T.types.begin(); it1 != T.types.end(); ++it1) { | 234 for (TypeIterator it1 = T.types.begin(); it1 != T.types.end(); ++it1) { |
234 for (TypeIterator it2 = T.types.begin(); it2 != T.types.end(); ++it2) { | 235 for (TypeIterator it2 = T.types.begin(); it2 != T.types.end(); ++it2) { |
235 TypeHandle type1 = *it1; | 236 TypeHandle type1 = *it1; |
236 TypeHandle type2 = *it2; | 237 TypeHandle type2 = *it2; |
237 TypeHandle intersect12 = T.Intersect(type1, type2); | |
238 if (this->IsBitset(type1) && this->IsBitset(type2)) { | 238 if (this->IsBitset(type1) && this->IsBitset(type2)) { |
| 239 TypeHandle intersect12 = T.Intersect(type1, type2); |
239 bitset bits = this->AsBitset(type1) & this->AsBitset(type2); | 240 bitset bits = this->AsBitset(type1) & this->AsBitset(type2); |
240 CHECK( | 241 CHECK(bits == this->AsBitset(intersect12)); |
241 (Rep::BitsetType::IsInhabited(bits) ? bits : 0) == | |
242 this->AsBitset(intersect12)); | |
243 } | 242 } |
244 } | 243 } |
245 } | 244 } |
246 } | 245 } |
247 | 246 |
| 247 void PointwiseRepresentation() { |
| 248 // Check we can decompose type into semantics and representation and |
| 249 // then compose it back to get an equivalent type. |
| 250 int counter = 0; |
| 251 for (TypeIterator it1 = T.types.begin(); it1 != T.types.end(); ++it1) { |
| 252 counter++; |
| 253 printf("Counter: %i\n", counter); |
| 254 fflush(stdout); |
| 255 TypeHandle type1 = *it1; |
| 256 TypeHandle representation = T.Representation(type1); |
| 257 TypeHandle semantic = T.Semantic(type1); |
| 258 TypeHandle composed = T.Union(representation, semantic); |
| 259 CHECK(type1->Equals(composed)); |
| 260 } |
| 261 |
| 262 // Pointwiseness of Union. |
| 263 for (TypeIterator it1 = T.types.begin(); it1 != T.types.end(); ++it1) { |
| 264 for (TypeIterator it2 = T.types.begin(); it2 != T.types.end(); ++it2) { |
| 265 TypeHandle type1 = *it1; |
| 266 TypeHandle type2 = *it2; |
| 267 TypeHandle representation1 = T.Representation(type1); |
| 268 TypeHandle semantic1 = T.Semantic(type1); |
| 269 TypeHandle representation2 = T.Representation(type2); |
| 270 TypeHandle semantic2 = T.Semantic(type2); |
| 271 TypeHandle direct_union = T.Union(type1, type2); |
| 272 TypeHandle representation_union = |
| 273 T.Union(representation1, representation2); |
| 274 TypeHandle semantic_union = T.Union(semantic1, semantic2); |
| 275 TypeHandle composed_union = |
| 276 T.Union(representation_union, semantic_union); |
| 277 CHECK(direct_union->Equals(composed_union)); |
| 278 } |
| 279 } |
| 280 |
| 281 // Pointwiseness of Intersect. |
| 282 for (TypeIterator it1 = T.types.begin(); it1 != T.types.end(); ++it1) { |
| 283 for (TypeIterator it2 = T.types.begin(); it2 != T.types.end(); ++it2) { |
| 284 TypeHandle type1 = *it1; |
| 285 TypeHandle type2 = *it2; |
| 286 TypeHandle representation1 = T.Representation(type1); |
| 287 TypeHandle semantic1 = T.Semantic(type1); |
| 288 TypeHandle representation2 = T.Representation(type2); |
| 289 TypeHandle semantic2 = T.Semantic(type2); |
| 290 TypeHandle direct_intersection = T.Intersect(type1, type2); |
| 291 TypeHandle representation_intersection = |
| 292 T.Intersect(representation1, representation2); |
| 293 TypeHandle semantic_intersection = T.Intersect(semantic1, semantic2); |
| 294 TypeHandle composed_intersection = |
| 295 T.Union(representation_intersection, semantic_intersection); |
| 296 CHECK(direct_intersection->Equals(composed_intersection)); |
| 297 } |
| 298 } |
| 299 |
| 300 // Pointwiseness of Is. |
| 301 for (TypeIterator it1 = T.types.begin(); it1 != T.types.end(); ++it1) { |
| 302 for (TypeIterator it2 = T.types.begin(); it2 != T.types.end(); ++it2) { |
| 303 TypeHandle type1 = *it1; |
| 304 TypeHandle type2 = *it2; |
| 305 TypeHandle representation1 = T.Representation(type1); |
| 306 TypeHandle semantic1 = T.Semantic(type1); |
| 307 TypeHandle representation2 = T.Representation(type2); |
| 308 TypeHandle semantic2 = T.Semantic(type2); |
| 309 bool representation_is = representation1->Is(representation2); |
| 310 bool semantic_is = semantic1->Is(semantic2); |
| 311 bool direct_is = type1->Is(type2); |
| 312 CHECK(direct_is == (semantic_is && representation_is)); |
| 313 } |
| 314 } |
| 315 } |
| 316 |
248 void Class() { | 317 void Class() { |
249 // Constructor | 318 // Constructor |
250 for (MapIterator mt = T.maps.begin(); mt != T.maps.end(); ++mt) { | 319 for (MapIterator mt = T.maps.begin(); mt != T.maps.end(); ++mt) { |
251 Handle<i::Map> map = *mt; | 320 Handle<i::Map> map = *mt; |
252 TypeHandle type = T.Class(map); | 321 TypeHandle type = T.Class(map); |
253 CHECK(type->IsClass()); | 322 CHECK(type->IsClass()); |
254 } | 323 } |
255 | 324 |
256 // Map attribute | 325 // Map attribute |
257 for (MapIterator mt = T.maps.begin(); mt != T.maps.end(); ++mt) { | 326 for (MapIterator mt = T.maps.begin(); mt != T.maps.end(); ++mt) { |
(...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
650 // Lub(Range(x,y))->Min() <= x and y <= Lub(Range(x,y))->Max() | 719 // Lub(Range(x,y))->Min() <= x and y <= Lub(Range(x,y))->Max() |
651 for (TypeIterator it = T.types.begin(); it != T.types.end(); ++it) { | 720 for (TypeIterator it = T.types.begin(); it != T.types.end(); ++it) { |
652 TypeHandle type = *it; | 721 TypeHandle type = *it; |
653 if (type->IsRange()) { | 722 if (type->IsRange()) { |
654 TypeHandle lub = Rep::BitsetType::New( | 723 TypeHandle lub = Rep::BitsetType::New( |
655 Rep::BitsetType::Lub(type), T.region()); | 724 Rep::BitsetType::Lub(type), T.region()); |
656 CHECK(lub->Min() <= type->Min() && type->Max() <= lub->Max()); | 725 CHECK(lub->Min() <= type->Min() && type->Max() <= lub->Max()); |
657 } | 726 } |
658 } | 727 } |
659 | 728 |
660 // Rangification: If T->Is(Range(-inf,+inf)) and !T->Is(None), then | 729 // Rangification: If T->Is(Range(-inf,+inf)) and T is inhabited, then |
661 // T->Is(Range(T->Min(), T->Max())). | 730 // T->Is(Range(T->Min(), T->Max())). |
662 for (TypeIterator it = T.types.begin(); it != T.types.end(); ++it) { | 731 for (TypeIterator it = T.types.begin(); it != T.types.end(); ++it) { |
663 TypeHandle type = *it; | 732 TypeHandle type = *it; |
664 CHECK(!(type->Is(T.Integer) && !type->Is(T.None)) || | 733 CHECK(!type->Is(T.Integer) || !type->IsInhabited() || |
665 type->Is(T.Range(type->Min(), type->Max()))); | 734 type->Is(T.Range(type->Min(), type->Max()))); |
666 } | 735 } |
667 } | 736 } |
668 | 737 |
669 void BitsetGlb() { | 738 void BitsetGlb() { |
670 // Lower: (T->BitsetGlb())->Is(T) | 739 // Lower: (T->BitsetGlb())->Is(T) |
671 for (TypeIterator it = T.types.begin(); it != T.types.end(); ++it) { | 740 for (TypeIterator it = T.types.begin(); it != T.types.end(); ++it) { |
672 TypeHandle type = *it; | 741 TypeHandle type = *it; |
673 TypeHandle glb = | 742 TypeHandle glb = |
674 Rep::BitsetType::New(Rep::BitsetType::Glb(type), T.region()); | 743 Rep::BitsetType::New(Rep::BitsetType::Glb(type), T.region()); |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
794 CHECK(!type1->Is(type2) || this->IsBitset(type2) || | 863 CHECK(!type1->Is(type2) || this->IsBitset(type2) || |
795 this->IsUnion(type2) || this->IsUnion(type1) || | 864 this->IsUnion(type2) || this->IsUnion(type1) || |
796 (type1->IsClass() && type2->IsClass()) || | 865 (type1->IsClass() && type2->IsClass()) || |
797 (type1->IsConstant() && type2->IsConstant()) || | 866 (type1->IsConstant() && type2->IsConstant()) || |
798 (type1->IsConstant() && type2->IsRange()) || | 867 (type1->IsConstant() && type2->IsRange()) || |
799 (this->IsBitset(type1) && type2->IsRange()) || | 868 (this->IsBitset(type1) && type2->IsRange()) || |
800 (type1->IsRange() && type2->IsRange()) || | 869 (type1->IsRange() && type2->IsRange()) || |
801 (type1->IsContext() && type2->IsContext()) || | 870 (type1->IsContext() && type2->IsContext()) || |
802 (type1->IsArray() && type2->IsArray()) || | 871 (type1->IsArray() && type2->IsArray()) || |
803 (type1->IsFunction() && type2->IsFunction()) || | 872 (type1->IsFunction() && type2->IsFunction()) || |
804 type1->Equals(T.None)); | 873 !type1->IsInhabited()); |
805 } | 874 } |
806 } | 875 } |
807 } | 876 } |
808 | 877 |
809 void Is2() { | 878 void Is2() { |
810 // Class(M1)->Is(Class(M2)) iff M1 = M2 | 879 // Class(M1)->Is(Class(M2)) iff M1 = M2 |
811 for (MapIterator mt1 = T.maps.begin(); mt1 != T.maps.end(); ++mt1) { | 880 for (MapIterator mt1 = T.maps.begin(); mt1 != T.maps.end(); ++mt1) { |
812 for (MapIterator mt2 = T.maps.begin(); mt2 != T.maps.end(); ++mt2) { | 881 for (MapIterator mt2 = T.maps.begin(); mt2 != T.maps.end(); ++mt2) { |
813 Handle<i::Map> map1 = *mt1; | 882 Handle<i::Map> map1 = *mt1; |
814 Handle<i::Map> map2 = *mt2; | 883 Handle<i::Map> map2 = *mt2; |
(...skipping 483 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1298 CheckOverlap(T.NumberArray, T.Array); | 1367 CheckOverlap(T.NumberArray, T.Array); |
1299 CheckDisjoint(T.NumberArray, T.AnyArray); | 1368 CheckDisjoint(T.NumberArray, T.AnyArray); |
1300 CheckDisjoint(T.NumberArray, T.StringArray); | 1369 CheckDisjoint(T.NumberArray, T.StringArray); |
1301 CheckOverlap(T.MethodFunction, T.Object); | 1370 CheckOverlap(T.MethodFunction, T.Object); |
1302 CheckDisjoint(T.SignedFunction1, T.NumberFunction1); | 1371 CheckDisjoint(T.SignedFunction1, T.NumberFunction1); |
1303 CheckDisjoint(T.SignedFunction1, T.NumberFunction2); | 1372 CheckDisjoint(T.SignedFunction1, T.NumberFunction2); |
1304 CheckDisjoint(T.NumberFunction1, T.NumberFunction2); | 1373 CheckDisjoint(T.NumberFunction1, T.NumberFunction2); |
1305 CheckDisjoint(T.SignedFunction1, T.MethodFunction); | 1374 CheckDisjoint(T.SignedFunction1, T.MethodFunction); |
1306 CheckOverlap(T.ObjectConstant1, T.ObjectClass); // !!! | 1375 CheckOverlap(T.ObjectConstant1, T.ObjectClass); // !!! |
1307 CheckOverlap(T.ObjectConstant2, T.ObjectClass); // !!! | 1376 CheckOverlap(T.ObjectConstant2, T.ObjectClass); // !!! |
1308 CheckOverlap(T.NumberClass, T.Intersect(T.Number, T.Untagged)); // !!! | 1377 CheckOverlap(T.NumberClass, T.Intersect(T.Number, T.Tagged)); // !!! |
1309 } | 1378 } |
1310 | 1379 |
1311 void Union1() { | 1380 void Union1() { |
1312 // Identity: Union(T, None) = T | 1381 // Identity: Union(T, None) = T |
1313 for (TypeIterator it = T.types.begin(); it != T.types.end(); ++it) { | 1382 for (TypeIterator it = T.types.begin(); it != T.types.end(); ++it) { |
1314 TypeHandle type = *it; | 1383 TypeHandle type = *it; |
1315 TypeHandle union_type = T.Union(type, T.None); | 1384 TypeHandle union_type = T.Union(type, T.None); |
1316 CheckEqual(union_type, type); | 1385 CheckEqual(union_type, type); |
1317 } | 1386 } |
1318 | 1387 |
(...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1687 TypeHandle type3 = *it3; | 1756 TypeHandle type3 = *it3; |
1688 TypeHandle intersect23 = T.Intersect(type2, type3); | 1757 TypeHandle intersect23 = T.Intersect(type2, type3); |
1689 CHECK(!(type1->Is(type2) && type1->Is(type3)) || | 1758 CHECK(!(type1->Is(type2) && type1->Is(type3)) || |
1690 type1->Is(intersect23)); | 1759 type1->Is(intersect23)); |
1691 } | 1760 } |
1692 } | 1761 } |
1693 } | 1762 } |
1694 | 1763 |
1695 // Bitset-class | 1764 // Bitset-class |
1696 CheckEqual(T.Intersect(T.ObjectClass, T.Object), T.ObjectClass); | 1765 CheckEqual(T.Intersect(T.ObjectClass, T.Object), T.ObjectClass); |
1697 CheckEqual(T.Intersect(T.ObjectClass, T.Array), T.None); | 1766 CheckEqual(T.Semantic(T.Intersect(T.ObjectClass, T.Array)), T.None); |
1698 CheckEqual(T.Intersect(T.ObjectClass, T.Number), T.None); | 1767 CheckEqual(T.Semantic(T.Intersect(T.ObjectClass, T.Number)), T.None); |
1699 | 1768 |
1700 // Bitset-array | 1769 // Bitset-array |
1701 CheckEqual(T.Intersect(T.NumberArray, T.Object), T.NumberArray); | 1770 CheckEqual(T.Intersect(T.NumberArray, T.Object), T.NumberArray); |
1702 CheckEqual(T.Intersect(T.AnyArray, T.Proxy), T.None); | 1771 CheckEqual(T.Semantic(T.Intersect(T.AnyArray, T.Proxy)), T.None); |
1703 | 1772 |
1704 // Bitset-function | 1773 // Bitset-function |
1705 CheckEqual(T.Intersect(T.MethodFunction, T.Object), T.MethodFunction); | 1774 CheckEqual(T.Intersect(T.MethodFunction, T.Object), T.MethodFunction); |
1706 CheckEqual(T.Intersect(T.NumberFunction1, T.Proxy), T.None); | 1775 CheckEqual(T.Semantic(T.Intersect(T.NumberFunction1, T.Proxy)), T.None); |
1707 | 1776 |
1708 // Bitset-union | 1777 // Bitset-union |
1709 CheckEqual( | 1778 CheckEqual( |
1710 T.Intersect(T.Object, T.Union(T.ObjectConstant1, T.ObjectClass)), | 1779 T.Intersect(T.Object, T.Union(T.ObjectConstant1, T.ObjectClass)), |
1711 T.Union(T.ObjectConstant1, T.ObjectClass)); | 1780 T.Union(T.ObjectConstant1, T.ObjectClass)); |
1712 CHECK( | 1781 CheckEqual(T.Semantic(T.Intersect(T.Union(T.ArrayClass, T.ObjectConstant1), |
1713 !T.Intersect(T.Union(T.ArrayClass, T.ObjectConstant1), T.Number) | 1782 T.Number)), |
1714 ->IsInhabited()); | 1783 T.None); |
1715 | 1784 |
1716 // Class-constant | 1785 // Class-constant |
1717 CHECK(T.Intersect(T.ObjectConstant1, T.ObjectClass)->IsInhabited()); // !!! | 1786 CHECK(T.Intersect(T.ObjectConstant1, T.ObjectClass)->IsInhabited()); // !!! |
1718 CHECK(!T.Intersect(T.ArrayClass, T.ObjectConstant2)->IsInhabited()); | 1787 CHECK(!T.Intersect(T.ArrayClass, T.ObjectConstant2)->IsInhabited()); |
1719 | 1788 |
1720 // Array-union | 1789 // Array-union |
1721 CheckEqual( | 1790 CheckEqual( |
1722 T.Intersect(T.NumberArray, T.Union(T.NumberArray, T.ArrayClass)), | 1791 T.Intersect(T.NumberArray, T.Union(T.NumberArray, T.ArrayClass)), |
1723 T.NumberArray); | 1792 T.NumberArray); |
1724 CheckEqual( | 1793 CheckEqual( |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1860 | 1929 |
1861 CHECK(type2->Min() == u->GetRange()->Min()); | 1930 CHECK(type2->Min() == u->GetRange()->Min()); |
1862 CHECK(type2->Max() == u->GetRange()->Max()); | 1931 CHECK(type2->Max() == u->GetRange()->Max()); |
1863 } | 1932 } |
1864 } | 1933 } |
1865 } | 1934 } |
1866 } | 1935 } |
1867 | 1936 |
1868 template<class Type2, class TypeHandle2, class Region2, class Rep2> | 1937 template<class Type2, class TypeHandle2, class Region2, class Rep2> |
1869 void Convert() { | 1938 void Convert() { |
1870 Types<Type2, TypeHandle2, Region2> T2( | 1939 Types<Type2, TypeHandle2, Region2> T2(Rep2::ToRegion(&zone, isolate), |
1871 Rep2::ToRegion(&zone, isolate), isolate); | 1940 isolate, |
| 1941 isolate->random_number_generator()); |
1872 for (TypeIterator it = T.types.begin(); it != T.types.end(); ++it) { | 1942 for (TypeIterator it = T.types.begin(); it != T.types.end(); ++it) { |
1873 TypeHandle type1 = *it; | 1943 TypeHandle type1 = *it; |
1874 TypeHandle2 type2 = T2.template Convert<Type>(type1); | 1944 TypeHandle2 type2 = T2.template Convert<Type>(type1); |
1875 TypeHandle type3 = T.template Convert<Type2>(type2); | 1945 TypeHandle type3 = T.template Convert<Type2>(type2); |
1876 CheckEqual(type1, type3); | 1946 CheckEqual(type1, type3); |
1877 } | 1947 } |
1878 } | 1948 } |
1879 | 1949 |
1880 void HTypeFromType() { | 1950 void HTypeFromType() { |
1881 for (TypeIterator it1 = T.types.begin(); it1 != T.types.end(); ++it1) { | 1951 for (TypeIterator it1 = T.types.begin(); it1 != T.types.end(); ++it1) { |
(...skipping 12 matching lines...) Expand all Loading... |
1894 typedef Tests<HeapType, Handle<HeapType>, Isolate, HeapRep> HeapTests; | 1964 typedef Tests<HeapType, Handle<HeapType>, Isolate, HeapRep> HeapTests; |
1895 | 1965 |
1896 | 1966 |
1897 TEST(IsSomeType) { | 1967 TEST(IsSomeType) { |
1898 CcTest::InitializeVM(); | 1968 CcTest::InitializeVM(); |
1899 ZoneTests().IsSomeType(); | 1969 ZoneTests().IsSomeType(); |
1900 HeapTests().IsSomeType(); | 1970 HeapTests().IsSomeType(); |
1901 } | 1971 } |
1902 | 1972 |
1903 | 1973 |
| 1974 TEST(PointwiseRepresentation) { |
| 1975 CcTest::InitializeVM(); |
| 1976 // ZoneTests().PointwiseRepresentation(); |
| 1977 HeapTests().PointwiseRepresentation(); |
| 1978 } |
| 1979 |
| 1980 |
1904 TEST(BitsetType) { | 1981 TEST(BitsetType) { |
1905 CcTest::InitializeVM(); | 1982 CcTest::InitializeVM(); |
1906 ZoneTests().Bitset(); | 1983 ZoneTests().Bitset(); |
1907 HeapTests().Bitset(); | 1984 HeapTests().Bitset(); |
1908 } | 1985 } |
1909 | 1986 |
1910 | 1987 |
1911 TEST(ClassType) { | 1988 TEST(ClassType) { |
1912 CcTest::InitializeVM(); | 1989 CcTest::InitializeVM(); |
1913 ZoneTests().Class(); | 1990 ZoneTests().Class(); |
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2076 ZoneTests().Convert<HeapType, Handle<HeapType>, Isolate, HeapRep>(); | 2153 ZoneTests().Convert<HeapType, Handle<HeapType>, Isolate, HeapRep>(); |
2077 HeapTests().Convert<Type, Type*, Zone, ZoneRep>(); | 2154 HeapTests().Convert<Type, Type*, Zone, ZoneRep>(); |
2078 } | 2155 } |
2079 | 2156 |
2080 | 2157 |
2081 TEST(HTypeFromType) { | 2158 TEST(HTypeFromType) { |
2082 CcTest::InitializeVM(); | 2159 CcTest::InitializeVM(); |
2083 ZoneTests().HTypeFromType(); | 2160 ZoneTests().HTypeFromType(); |
2084 HeapTests().HTypeFromType(); | 2161 HeapTests().HTypeFromType(); |
2085 } | 2162 } |
OLD | NEW |