| 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 916 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 927 CheckSub(T.InternalizedString, T.UniqueName); | 927 CheckSub(T.InternalizedString, T.UniqueName); |
| 928 CheckSub(T.InternalizedString, T.Name); | 928 CheckSub(T.InternalizedString, T.Name); |
| 929 CheckSub(T.Symbol, T.UniqueName); | 929 CheckSub(T.Symbol, T.UniqueName); |
| 930 CheckSub(T.Symbol, T.Name); | 930 CheckSub(T.Symbol, T.Name); |
| 931 CheckUnordered(T.String, T.UniqueName); | 931 CheckUnordered(T.String, T.UniqueName); |
| 932 CheckUnordered(T.String, T.Symbol); | 932 CheckUnordered(T.String, T.Symbol); |
| 933 CheckUnordered(T.InternalizedString, T.Symbol); | 933 CheckUnordered(T.InternalizedString, T.Symbol); |
| 934 | 934 |
| 935 CheckSub(T.Object, T.Receiver); | 935 CheckSub(T.Object, T.Receiver); |
| 936 CheckSub(T.Array, T.Object); | 936 CheckSub(T.Array, T.Object); |
| 937 CheckSub(T.Function, T.Object); | |
| 938 CheckSub(T.Proxy, T.Receiver); | 937 CheckSub(T.Proxy, T.Receiver); |
| 939 CheckUnordered(T.Object, T.Proxy); | 938 CheckUnordered(T.Object, T.Proxy); |
| 940 CheckUnordered(T.Array, T.Function); | |
| 941 | 939 |
| 942 | 940 |
| 943 // Subtyping between concrete structural types | 941 // Subtyping between concrete structural types |
| 944 | 942 |
| 945 CheckSub(T.ObjectClass, T.Object); | 943 CheckSub(T.ObjectClass, T.Object); |
| 946 CheckSub(T.ArrayClass, T.Object); | 944 CheckSub(T.ArrayClass, T.Object); |
| 947 CheckSub(T.ArrayClass, T.Array); | 945 CheckSub(T.ArrayClass, T.Array); |
| 948 CheckSub(T.UninitializedClass, T.Internal); | 946 CheckSub(T.UninitializedClass, T.Internal); |
| 949 CheckUnordered(T.ObjectClass, T.ArrayClass); | 947 CheckUnordered(T.ObjectClass, T.ArrayClass); |
| 950 CheckUnordered(T.UninitializedClass, T.Null); | 948 CheckUnordered(T.UninitializedClass, T.Null); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 966 CheckUnordered(T.ObjectConstant1, T.ObjectClass); | 964 CheckUnordered(T.ObjectConstant1, T.ObjectClass); |
| 967 CheckUnordered(T.ObjectConstant2, T.ObjectClass); | 965 CheckUnordered(T.ObjectConstant2, T.ObjectClass); |
| 968 CheckUnordered(T.ObjectConstant1, T.ArrayClass); | 966 CheckUnordered(T.ObjectConstant1, T.ArrayClass); |
| 969 CheckUnordered(T.ObjectConstant2, T.ArrayClass); | 967 CheckUnordered(T.ObjectConstant2, T.ArrayClass); |
| 970 CheckUnordered(T.ArrayConstant, T.ObjectClass); | 968 CheckUnordered(T.ArrayConstant, T.ObjectClass); |
| 971 | 969 |
| 972 CheckSub(T.NumberArray, T.Array); | 970 CheckSub(T.NumberArray, T.Array); |
| 973 CheckSub(T.NumberArray, T.Object); | 971 CheckSub(T.NumberArray, T.Object); |
| 974 CheckUnordered(T.StringArray, T.AnyArray); | 972 CheckUnordered(T.StringArray, T.AnyArray); |
| 975 | 973 |
| 976 CheckSub(T.MethodFunction, T.Function); | 974 CheckSub(T.MethodFunction, T.Object); |
| 977 CheckSub(T.NumberFunction1, T.Object); | 975 CheckSub(T.NumberFunction1, T.Object); |
| 978 CheckUnordered(T.SignedFunction1, T.NumberFunction1); | 976 CheckUnordered(T.SignedFunction1, T.NumberFunction1); |
| 979 CheckUnordered(T.NumberFunction1, T.NumberFunction2); | 977 CheckUnordered(T.NumberFunction1, T.NumberFunction2); |
| 980 } | 978 } |
| 981 | 979 |
| 982 void NowIs() { | 980 void NowIs() { |
| 983 // Least Element (Bottom): None->NowIs(T) | 981 // Least Element (Bottom): None->NowIs(T) |
| 984 for (TypeIterator it = T.types.begin(); it != T.types.end(); ++it) { | 982 for (TypeIterator it = T.types.begin(); it != T.types.end(); ++it) { |
| 985 TypeHandle type = *it; | 983 TypeHandle type = *it; |
| 986 CHECK(T.None->NowIs(type)); | 984 CHECK(T.None->NowIs(type)); |
| (...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1252 CheckOverlap(T.InternalizedString, T.String); | 1250 CheckOverlap(T.InternalizedString, T.String); |
| 1253 CheckOverlap(T.InternalizedString, T.UniqueName); | 1251 CheckOverlap(T.InternalizedString, T.UniqueName); |
| 1254 CheckOverlap(T.InternalizedString, T.Name); | 1252 CheckOverlap(T.InternalizedString, T.Name); |
| 1255 CheckOverlap(T.Symbol, T.UniqueName); | 1253 CheckOverlap(T.Symbol, T.UniqueName); |
| 1256 CheckOverlap(T.Symbol, T.Name); | 1254 CheckOverlap(T.Symbol, T.Name); |
| 1257 CheckOverlap(T.String, T.UniqueName); | 1255 CheckOverlap(T.String, T.UniqueName); |
| 1258 CheckDisjoint(T.String, T.Symbol); | 1256 CheckDisjoint(T.String, T.Symbol); |
| 1259 CheckDisjoint(T.InternalizedString, T.Symbol); | 1257 CheckDisjoint(T.InternalizedString, T.Symbol); |
| 1260 CheckOverlap(T.Object, T.Receiver); | 1258 CheckOverlap(T.Object, T.Receiver); |
| 1261 CheckOverlap(T.Array, T.Object); | 1259 CheckOverlap(T.Array, T.Object); |
| 1262 CheckOverlap(T.Function, T.Object); | |
| 1263 CheckOverlap(T.Proxy, T.Receiver); | 1260 CheckOverlap(T.Proxy, T.Receiver); |
| 1264 CheckDisjoint(T.Object, T.Proxy); | 1261 CheckDisjoint(T.Object, T.Proxy); |
| 1265 CheckDisjoint(T.Array, T.Function); | |
| 1266 | 1262 |
| 1267 // Structural types | 1263 // Structural types |
| 1268 CheckOverlap(T.ObjectClass, T.Object); | 1264 CheckOverlap(T.ObjectClass, T.Object); |
| 1269 CheckOverlap(T.ArrayClass, T.Object); | 1265 CheckOverlap(T.ArrayClass, T.Object); |
| 1270 CheckOverlap(T.ObjectClass, T.ObjectClass); | 1266 CheckOverlap(T.ObjectClass, T.ObjectClass); |
| 1271 CheckOverlap(T.ArrayClass, T.ArrayClass); | 1267 CheckOverlap(T.ArrayClass, T.ArrayClass); |
| 1272 CheckDisjoint(T.ObjectClass, T.ArrayClass); | 1268 CheckDisjoint(T.ObjectClass, T.ArrayClass); |
| 1273 CheckOverlap(T.SmiConstant, T.SignedSmall); | 1269 CheckOverlap(T.SmiConstant, T.SignedSmall); |
| 1274 CheckOverlap(T.SmiConstant, T.Signed32); | 1270 CheckOverlap(T.SmiConstant, T.Signed32); |
| 1275 CheckOverlap(T.SmiConstant, T.Number); | 1271 CheckOverlap(T.SmiConstant, T.Number); |
| 1276 CheckOverlap(T.ObjectConstant1, T.Object); | 1272 CheckOverlap(T.ObjectConstant1, T.Object); |
| 1277 CheckOverlap(T.ObjectConstant2, T.Object); | 1273 CheckOverlap(T.ObjectConstant2, T.Object); |
| 1278 CheckOverlap(T.ArrayConstant, T.Object); | 1274 CheckOverlap(T.ArrayConstant, T.Object); |
| 1279 CheckOverlap(T.ArrayConstant, T.Array); | 1275 CheckOverlap(T.ArrayConstant, T.Array); |
| 1280 CheckOverlap(T.ObjectConstant1, T.ObjectConstant1); | 1276 CheckOverlap(T.ObjectConstant1, T.ObjectConstant1); |
| 1281 CheckDisjoint(T.ObjectConstant1, T.ObjectConstant2); | 1277 CheckDisjoint(T.ObjectConstant1, T.ObjectConstant2); |
| 1282 CheckDisjoint(T.ObjectConstant1, T.ArrayConstant); | 1278 CheckDisjoint(T.ObjectConstant1, T.ArrayConstant); |
| 1283 CheckDisjoint(T.ObjectConstant1, T.ArrayClass); | 1279 CheckDisjoint(T.ObjectConstant1, T.ArrayClass); |
| 1284 CheckDisjoint(T.ObjectConstant2, T.ArrayClass); | 1280 CheckDisjoint(T.ObjectConstant2, T.ArrayClass); |
| 1285 CheckDisjoint(T.ArrayConstant, T.ObjectClass); | 1281 CheckDisjoint(T.ArrayConstant, T.ObjectClass); |
| 1286 CheckOverlap(T.NumberArray, T.Array); | 1282 CheckOverlap(T.NumberArray, T.Array); |
| 1287 CheckDisjoint(T.NumberArray, T.AnyArray); | 1283 CheckDisjoint(T.NumberArray, T.AnyArray); |
| 1288 CheckDisjoint(T.NumberArray, T.StringArray); | 1284 CheckDisjoint(T.NumberArray, T.StringArray); |
| 1289 CheckOverlap(T.MethodFunction, T.Function); | 1285 CheckOverlap(T.MethodFunction, T.Object); |
| 1290 CheckDisjoint(T.SignedFunction1, T.NumberFunction1); | 1286 CheckDisjoint(T.SignedFunction1, T.NumberFunction1); |
| 1291 CheckDisjoint(T.SignedFunction1, T.NumberFunction2); | 1287 CheckDisjoint(T.SignedFunction1, T.NumberFunction2); |
| 1292 CheckDisjoint(T.NumberFunction1, T.NumberFunction2); | 1288 CheckDisjoint(T.NumberFunction1, T.NumberFunction2); |
| 1293 CheckDisjoint(T.SignedFunction1, T.MethodFunction); | 1289 CheckDisjoint(T.SignedFunction1, T.MethodFunction); |
| 1294 CheckOverlap(T.ObjectConstant1, T.ObjectClass); // !!! | 1290 CheckOverlap(T.ObjectConstant1, T.ObjectClass); // !!! |
| 1295 CheckOverlap(T.ObjectConstant2, T.ObjectClass); // !!! | 1291 CheckOverlap(T.ObjectConstant2, T.ObjectClass); // !!! |
| 1296 CheckOverlap(T.NumberClass, T.Intersect(T.Number, T.Untagged)); // !!! | 1292 CheckOverlap(T.NumberClass, T.Intersect(T.Number, T.Untagged)); // !!! |
| 1297 } | 1293 } |
| 1298 | 1294 |
| 1299 void Union1() { | 1295 void Union1() { |
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1449 // Bitset-array | 1445 // Bitset-array |
| 1450 CHECK(this->IsBitset(T.Union(T.AnyArray, T.Array))); | 1446 CHECK(this->IsBitset(T.Union(T.AnyArray, T.Array))); |
| 1451 CHECK(this->IsUnion(T.Union(T.NumberArray, T.Number))); | 1447 CHECK(this->IsUnion(T.Union(T.NumberArray, T.Number))); |
| 1452 | 1448 |
| 1453 CheckEqual(T.Union(T.AnyArray, T.Array), T.Array); | 1449 CheckEqual(T.Union(T.AnyArray, T.Array), T.Array); |
| 1454 CheckUnordered(T.Union(T.AnyArray, T.String), T.Array); | 1450 CheckUnordered(T.Union(T.AnyArray, T.String), T.Array); |
| 1455 CheckOverlap(T.Union(T.NumberArray, T.String), T.Object); | 1451 CheckOverlap(T.Union(T.NumberArray, T.String), T.Object); |
| 1456 CheckDisjoint(T.Union(T.NumberArray, T.String), T.Number); | 1452 CheckDisjoint(T.Union(T.NumberArray, T.String), T.Number); |
| 1457 | 1453 |
| 1458 // Bitset-function | 1454 // Bitset-function |
| 1459 CHECK(this->IsBitset(T.Union(T.MethodFunction, T.Function))); | 1455 CHECK(this->IsBitset(T.Union(T.MethodFunction, T.Object))); |
| 1460 CHECK(this->IsUnion(T.Union(T.NumberFunction1, T.Number))); | 1456 CHECK(this->IsUnion(T.Union(T.NumberFunction1, T.Number))); |
| 1461 | 1457 |
| 1462 CheckEqual(T.Union(T.MethodFunction, T.Function), T.Function); | 1458 CheckEqual(T.Union(T.MethodFunction, T.Object), T.Object); |
| 1463 CheckUnordered(T.Union(T.NumberFunction1, T.String), T.Function); | 1459 CheckUnordered(T.Union(T.NumberFunction1, T.String), T.Object); |
| 1464 CheckOverlap(T.Union(T.NumberFunction2, T.String), T.Object); | 1460 CheckOverlap(T.Union(T.NumberFunction2, T.String), T.Object); |
| 1465 CheckDisjoint(T.Union(T.NumberFunction1, T.String), T.Number); | 1461 CheckDisjoint(T.Union(T.NumberFunction1, T.String), T.Number); |
| 1466 | 1462 |
| 1467 // Bitset-class | 1463 // Bitset-class |
| 1468 CheckSub( | 1464 CheckSub( |
| 1469 T.Union(T.ObjectClass, T.SignedSmall), T.Union(T.Object, T.Number)); | 1465 T.Union(T.ObjectClass, T.SignedSmall), T.Union(T.Object, T.Number)); |
| 1470 CheckSub(T.Union(T.ObjectClass, T.Array), T.Object); | 1466 CheckSub(T.Union(T.ObjectClass, T.Array), T.Object); |
| 1471 CheckUnordered(T.Union(T.ObjectClass, T.String), T.Array); | 1467 CheckUnordered(T.Union(T.ObjectClass, T.String), T.Array); |
| 1472 CheckOverlap(T.Union(T.ObjectClass, T.String), T.Object); | 1468 CheckOverlap(T.Union(T.ObjectClass, T.String), T.Object); |
| 1473 CheckDisjoint(T.Union(T.ObjectClass, T.String), T.Number); | 1469 CheckDisjoint(T.Union(T.ObjectClass, T.String), T.Number); |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1521 // Array-union | 1517 // Array-union |
| 1522 CheckEqual( | 1518 CheckEqual( |
| 1523 T.Union(T.AnyArray, T.Union(T.NumberArray, T.AnyArray)), | 1519 T.Union(T.AnyArray, T.Union(T.NumberArray, T.AnyArray)), |
| 1524 T.Union(T.AnyArray, T.NumberArray)); | 1520 T.Union(T.AnyArray, T.NumberArray)); |
| 1525 CheckSub(T.Union(T.AnyArray, T.NumberArray), T.Array); | 1521 CheckSub(T.Union(T.AnyArray, T.NumberArray), T.Array); |
| 1526 | 1522 |
| 1527 // Function-union | 1523 // Function-union |
| 1528 CheckEqual( | 1524 CheckEqual( |
| 1529 T.Union(T.NumberFunction1, T.NumberFunction2), | 1525 T.Union(T.NumberFunction1, T.NumberFunction2), |
| 1530 T.Union(T.NumberFunction2, T.NumberFunction1)); | 1526 T.Union(T.NumberFunction2, T.NumberFunction1)); |
| 1531 CheckSub(T.Union(T.SignedFunction1, T.MethodFunction), T.Function); | 1527 CheckSub(T.Union(T.SignedFunction1, T.MethodFunction), T.Object); |
| 1532 | 1528 |
| 1533 // Union-union | 1529 // Union-union |
| 1534 CheckEqual( | 1530 CheckEqual( |
| 1535 T.Union( | 1531 T.Union( |
| 1536 T.Union(T.ObjectConstant2, T.ObjectConstant1), | 1532 T.Union(T.ObjectConstant2, T.ObjectConstant1), |
| 1537 T.Union(T.ObjectConstant1, T.ObjectConstant2)), | 1533 T.Union(T.ObjectConstant1, T.ObjectConstant2)), |
| 1538 T.Union(T.ObjectConstant2, T.ObjectConstant1)); | 1534 T.Union(T.ObjectConstant2, T.ObjectConstant1)); |
| 1539 CheckEqual( | 1535 CheckEqual( |
| 1540 T.Union( | 1536 T.Union( |
| 1541 T.Union(T.Number, T.ArrayClass), | 1537 T.Union(T.Number, T.ArrayClass), |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1682 } | 1678 } |
| 1683 } | 1679 } |
| 1684 | 1680 |
| 1685 // Bitset-class | 1681 // Bitset-class |
| 1686 CheckEqual(T.Intersect(T.ObjectClass, T.Object), T.ObjectClass); | 1682 CheckEqual(T.Intersect(T.ObjectClass, T.Object), T.ObjectClass); |
| 1687 CheckEqual(T.Intersect(T.ObjectClass, T.Array), T.None); | 1683 CheckEqual(T.Intersect(T.ObjectClass, T.Array), T.None); |
| 1688 CheckEqual(T.Intersect(T.ObjectClass, T.Number), T.None); | 1684 CheckEqual(T.Intersect(T.ObjectClass, T.Number), T.None); |
| 1689 | 1685 |
| 1690 // Bitset-array | 1686 // Bitset-array |
| 1691 CheckEqual(T.Intersect(T.NumberArray, T.Object), T.NumberArray); | 1687 CheckEqual(T.Intersect(T.NumberArray, T.Object), T.NumberArray); |
| 1692 CheckEqual(T.Intersect(T.AnyArray, T.Function), T.None); | 1688 CheckEqual(T.Intersect(T.AnyArray, T.Proxy), T.None); |
| 1693 | 1689 |
| 1694 // Bitset-function | 1690 // Bitset-function |
| 1695 CheckEqual(T.Intersect(T.MethodFunction, T.Object), T.MethodFunction); | 1691 CheckEqual(T.Intersect(T.MethodFunction, T.Object), T.MethodFunction); |
| 1696 CheckEqual(T.Intersect(T.NumberFunction1, T.Array), T.None); | 1692 CheckEqual(T.Intersect(T.NumberFunction1, T.Proxy), T.None); |
| 1697 | 1693 |
| 1698 // Bitset-union | 1694 // Bitset-union |
| 1699 CheckEqual( | 1695 CheckEqual( |
| 1700 T.Intersect(T.Object, T.Union(T.ObjectConstant1, T.ObjectClass)), | 1696 T.Intersect(T.Object, T.Union(T.ObjectConstant1, T.ObjectClass)), |
| 1701 T.Union(T.ObjectConstant1, T.ObjectClass)); | 1697 T.Union(T.ObjectConstant1, T.ObjectClass)); |
| 1702 CHECK( | 1698 CHECK( |
| 1703 !T.Intersect(T.Union(T.ArrayClass, T.ObjectConstant1), T.Number) | 1699 !T.Intersect(T.Union(T.ArrayClass, T.ObjectConstant1), T.Number) |
| 1704 ->IsInhabited()); | 1700 ->IsInhabited()); |
| 1705 | 1701 |
| 1706 // Class-constant | 1702 // Class-constant |
| (...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2068 ZoneTests().Convert<HeapType, Handle<HeapType>, Isolate, HeapRep>(); | 2064 ZoneTests().Convert<HeapType, Handle<HeapType>, Isolate, HeapRep>(); |
| 2069 HeapTests().Convert<Type, Type*, Zone, ZoneRep>(); | 2065 HeapTests().Convert<Type, Type*, Zone, ZoneRep>(); |
| 2070 } | 2066 } |
| 2071 | 2067 |
| 2072 | 2068 |
| 2073 TEST(HTypeFromType) { | 2069 TEST(HTypeFromType) { |
| 2074 CcTest::InitializeVM(); | 2070 CcTest::InitializeVM(); |
| 2075 ZoneTests().HTypeFromType(); | 2071 ZoneTests().HTypeFromType(); |
| 2076 HeapTests().HTypeFromType(); | 2072 HeapTests().HTypeFromType(); |
| 2077 } | 2073 } |
| OLD | NEW |