| 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 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 287 TypeHandle type2 = T.Constant(value2); | 287 TypeHandle type2 = T.Constant(value2); |
| 288 CHECK(Equal(type1, type2) == (*value1 == *value2)); | 288 CHECK(Equal(type1, type2) == (*value1 == *value2)); |
| 289 } | 289 } |
| 290 } | 290 } |
| 291 | 291 |
| 292 // Typing of numbers | 292 // Typing of numbers |
| 293 Factory* fac = isolate->factory(); | 293 Factory* fac = isolate->factory(); |
| 294 CHECK(T.Constant(fac->NewNumber(0))->Is(T.UnsignedSmall)); | 294 CHECK(T.Constant(fac->NewNumber(0))->Is(T.UnsignedSmall)); |
| 295 CHECK(T.Constant(fac->NewNumber(1))->Is(T.UnsignedSmall)); | 295 CHECK(T.Constant(fac->NewNumber(1))->Is(T.UnsignedSmall)); |
| 296 CHECK(T.Constant(fac->NewNumber(0x3fffffff))->Is(T.UnsignedSmall)); | 296 CHECK(T.Constant(fac->NewNumber(0x3fffffff))->Is(T.UnsignedSmall)); |
| 297 CHECK(T.Constant(fac->NewNumber(-1))->Is(T.OtherSignedSmall)); | 297 CHECK(T.Constant(fac->NewNumber(-1))->Is(T.NegativeSignedSmall)); |
| 298 CHECK(T.Constant(fac->NewNumber(-0x3fffffff))->Is(T.OtherSignedSmall)); | 298 CHECK(T.Constant(fac->NewNumber(-0x3fffffff))->Is(T.NegativeSignedSmall)); |
| 299 CHECK(T.Constant(fac->NewNumber(-0x40000000))->Is(T.OtherSignedSmall)); | 299 CHECK(T.Constant(fac->NewNumber(-0x40000000))->Is(T.NegativeSignedSmall)); |
| 300 if (SmiValuesAre31Bits()) { | 300 if (SmiValuesAre31Bits()) { |
| 301 CHECK(T.Constant(fac->NewNumber(0x40000000))->Is(T.OtherUnsigned31)); | 301 CHECK(T.Constant(fac->NewNumber(0x40000000))->Is(T.NonNegativeSigned32)); |
| 302 CHECK(T.Constant(fac->NewNumber(0x7fffffff))->Is(T.OtherUnsigned31)); | 302 CHECK(!T.Constant(fac->NewNumber(0x40000000))->Is(T.UnsignedSmall)); |
| 303 CHECK(T.Constant(fac->NewNumber(-0x40000001))->Is(T.OtherSigned32)); | 303 CHECK(T.Constant(fac->NewNumber(0x7fffffff))->Is(T.NonNegativeSigned32)); |
| 304 CHECK(T.Constant(fac->NewNumber(-0x7fffffff))->Is(T.OtherSigned32)); | 304 CHECK(!T.Constant(fac->NewNumber(0x7fffffff))->Is(T.UnsignedSmall)); |
| 305 CHECK(T.Constant(fac->NewNumber(-0x7fffffff-1))->Is(T.OtherSigned32)); | 305 CHECK(T.Constant(fac->NewNumber(-0x40000001))->Is(T.NegativeSigned32)); |
| 306 CHECK( |
| 307 !T.Constant(fac->NewNumber(-0x40000001))->Is(T.NegativeSignedSmall)); |
| 308 CHECK(T.Constant(fac->NewNumber(-0x7fffffff))->Is(T.NegativeSigned32)); |
| 309 CHECK(!T.Constant(fac->NewNumber(-0x7fffffff - 1)) |
| 310 ->Is(T.NegativeSignedSmall)); |
| 306 } else { | 311 } else { |
| 307 CHECK(SmiValuesAre32Bits()); | 312 CHECK(SmiValuesAre32Bits()); |
| 308 CHECK(T.Constant(fac->NewNumber(0x40000000))->Is(T.UnsignedSmall)); | 313 CHECK(T.Constant(fac->NewNumber(0x40000000))->Is(T.UnsignedSmall)); |
| 309 CHECK(T.Constant(fac->NewNumber(0x7fffffff))->Is(T.UnsignedSmall)); | 314 CHECK(T.Constant(fac->NewNumber(0x7fffffff))->Is(T.UnsignedSmall)); |
| 310 CHECK(!T.Constant(fac->NewNumber(0x40000000))->Is(T.OtherUnsigned31)); | 315 CHECK(T.Constant(fac->NewNumber(0x40000000))->Is(T.NonNegativeSigned32)); |
| 311 CHECK(!T.Constant(fac->NewNumber(0x7fffffff))->Is(T.OtherUnsigned31)); | 316 CHECK(T.Constant(fac->NewNumber(0x7fffffff))->Is(T.NonNegativeSigned32)); |
| 312 CHECK(T.Constant(fac->NewNumber(-0x40000001))->Is(T.OtherSignedSmall)); | 317 CHECK(T.Constant(fac->NewNumber(-0x40000001))->Is(T.NegativeSignedSmall)); |
| 313 CHECK(T.Constant(fac->NewNumber(-0x7fffffff))->Is(T.OtherSignedSmall)); | 318 CHECK(T.Constant(fac->NewNumber(-0x7fffffff))->Is(T.NegativeSignedSmall)); |
| 314 CHECK(T.Constant(fac->NewNumber(-0x7fffffff-1))->Is(T.OtherSignedSmall)); | 319 CHECK(T.Constant(fac->NewNumber(-0x7fffffff - 1)) |
| 315 CHECK(!T.Constant(fac->NewNumber(-0x40000001))->Is(T.OtherSigned32)); | 320 ->Is(T.NegativeSignedSmall)); |
| 316 CHECK(!T.Constant(fac->NewNumber(-0x7fffffff))->Is(T.OtherSigned32)); | 321 CHECK(T.Constant(fac->NewNumber(-0x40000001))->Is(T.NegativeSigned32)); |
| 317 CHECK(!T.Constant(fac->NewNumber(-0x7fffffff-1))->Is(T.OtherSigned32)); | 322 CHECK(T.Constant(fac->NewNumber(-0x7fffffff))->Is(T.NegativeSigned32)); |
| 323 CHECK( |
| 324 T.Constant(fac->NewNumber(-0x7fffffff - 1))->Is(T.NegativeSigned32)); |
| 318 } | 325 } |
| 319 CHECK(T.Constant(fac->NewNumber(0x80000000u))->Is(T.OtherUnsigned32)); | 326 CHECK(T.Constant(fac->NewNumber(0x80000000u))->Is(T.Unsigned32)); |
| 320 CHECK(T.Constant(fac->NewNumber(0xffffffffu))->Is(T.OtherUnsigned32)); | 327 CHECK(!T.Constant(fac->NewNumber(0x80000000u))->Is(T.NonNegativeSigned32)); |
| 321 CHECK(T.Constant(fac->NewNumber(0xffffffffu+1.0))->Is(T.OtherNumber)); | 328 CHECK(T.Constant(fac->NewNumber(0xffffffffu))->Is(T.Unsigned32)); |
| 322 CHECK(T.Constant(fac->NewNumber(-0x7fffffff-2.0))->Is(T.OtherNumber)); | 329 CHECK(!T.Constant(fac->NewNumber(0xffffffffu))->Is(T.NonNegativeSigned32)); |
| 323 CHECK(T.Constant(fac->NewNumber(0.1))->Is(T.OtherNumber)); | 330 CHECK(T.Constant(fac->NewNumber(0xffffffffu + 1.0))->Is(T.PlainNumber)); |
| 324 CHECK(T.Constant(fac->NewNumber(-10.1))->Is(T.OtherNumber)); | 331 CHECK(!T.Constant(fac->NewNumber(0xffffffffu + 1.0))->Is(T.Integral32)); |
| 325 CHECK(T.Constant(fac->NewNumber(10e60))->Is(T.OtherNumber)); | 332 CHECK(T.Constant(fac->NewNumber(-0x7fffffff - 2.0))->Is(T.PlainNumber)); |
| 333 CHECK(!T.Constant(fac->NewNumber(-0x7fffffff - 2.0))->Is(T.Integral32)); |
| 334 CHECK(T.Constant(fac->NewNumber(0.1))->Is(T.PlainNumber)); |
| 335 CHECK(!T.Constant(fac->NewNumber(0.1))->Is(T.Integral32)); |
| 336 CHECK(T.Constant(fac->NewNumber(-10.1))->Is(T.PlainNumber)); |
| 337 CHECK(!T.Constant(fac->NewNumber(-10.1))->Is(T.Integral32)); |
| 338 CHECK(T.Constant(fac->NewNumber(10e60))->Is(T.PlainNumber)); |
| 339 CHECK(!T.Constant(fac->NewNumber(10e60))->Is(T.Integral32)); |
| 326 CHECK(T.Constant(fac->NewNumber(-1.0*0.0))->Is(T.MinusZero)); | 340 CHECK(T.Constant(fac->NewNumber(-1.0*0.0))->Is(T.MinusZero)); |
| 327 CHECK(T.Constant(fac->NewNumber(v8::base::OS::nan_value()))->Is(T.NaN)); | 341 CHECK(T.Constant(fac->NewNumber(v8::base::OS::nan_value()))->Is(T.NaN)); |
| 328 CHECK(T.Constant(fac->NewNumber(V8_INFINITY))->Is(T.OtherNumber)); | 342 CHECK(T.Constant(fac->NewNumber(V8_INFINITY))->Is(T.PlainNumber)); |
| 329 CHECK(T.Constant(fac->NewNumber(-V8_INFINITY))->Is(T.OtherNumber)); | 343 CHECK(!T.Constant(fac->NewNumber(V8_INFINITY))->Is(T.Integral32)); |
| 344 CHECK(T.Constant(fac->NewNumber(-V8_INFINITY))->Is(T.PlainNumber)); |
| 345 CHECK(!T.Constant(fac->NewNumber(-V8_INFINITY))->Is(T.Integral32)); |
| 330 } | 346 } |
| 331 | 347 |
| 332 void Range() { | 348 void Range() { |
| 333 // Constructor | 349 // Constructor |
| 334 for (ValueIterator i = T.integers.begin(); i != T.integers.end(); ++i) { | 350 for (ValueIterator i = T.integers.begin(); i != T.integers.end(); ++i) { |
| 335 for (ValueIterator j = T.integers.begin(); j != T.integers.end(); ++j) { | 351 for (ValueIterator j = T.integers.begin(); j != T.integers.end(); ++j) { |
| 336 i::Handle<i::Object> min = *i; | 352 i::Handle<i::Object> min = *i; |
| 337 i::Handle<i::Object> max = *j; | 353 i::Handle<i::Object> max = *j; |
| 338 if (min->Number() > max->Number()) std::swap(min, max); | 354 if (min->Number() > max->Number()) std::swap(min, max); |
| 339 TypeHandle type = T.Range(min, max); | 355 TypeHandle type = T.Range(min, max); |
| (...skipping 557 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 897 } | 913 } |
| 898 } | 914 } |
| 899 } | 915 } |
| 900 | 916 |
| 901 // Lub(Range(x,y))->Is(T.Union(T.Integral32, T.OtherNumber)) | 917 // Lub(Range(x,y))->Is(T.Union(T.Integral32, T.OtherNumber)) |
| 902 for (TypeIterator it = T.types.begin(); it != T.types.end(); ++it) { | 918 for (TypeIterator it = T.types.begin(); it != T.types.end(); ++it) { |
| 903 TypeHandle type = *it; | 919 TypeHandle type = *it; |
| 904 if (type->IsRange()) { | 920 if (type->IsRange()) { |
| 905 TypeHandle lub = Rep::BitsetType::New( | 921 TypeHandle lub = Rep::BitsetType::New( |
| 906 Rep::BitsetType::Lub(type), T.region()); | 922 Rep::BitsetType::Lub(type), T.region()); |
| 907 CHECK(lub->Is(T.Union(T.Integral32, T.OtherNumber))); | 923 CHECK(lub->Is(T.PlainNumber)); |
| 908 } | 924 } |
| 909 } | 925 } |
| 910 | 926 |
| 911 | 927 |
| 912 // Subtyping between concrete basic types | 928 // Subtyping between concrete basic types |
| 913 | 929 |
| 914 CheckUnordered(T.Boolean, T.Null); | 930 CheckUnordered(T.Boolean, T.Null); |
| 915 CheckUnordered(T.Undefined, T.Null); | 931 CheckUnordered(T.Undefined, T.Null); |
| 916 CheckUnordered(T.Boolean, T.Undefined); | 932 CheckUnordered(T.Boolean, T.Undefined); |
| 917 | 933 |
| (...skipping 1150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2068 ZoneTests().Convert<HeapType, Handle<HeapType>, Isolate, HeapRep>(); | 2084 ZoneTests().Convert<HeapType, Handle<HeapType>, Isolate, HeapRep>(); |
| 2069 HeapTests().Convert<Type, Type*, Zone, ZoneRep>(); | 2085 HeapTests().Convert<Type, Type*, Zone, ZoneRep>(); |
| 2070 } | 2086 } |
| 2071 | 2087 |
| 2072 | 2088 |
| 2073 TEST(HTypeFromType) { | 2089 TEST(HTypeFromType) { |
| 2074 CcTest::InitializeVM(); | 2090 CcTest::InitializeVM(); |
| 2075 ZoneTests().HTypeFromType(); | 2091 ZoneTests().HTypeFromType(); |
| 2076 HeapTests().HTypeFromType(); | 2092 HeapTests().HTypeFromType(); |
| 2077 } | 2093 } |
| OLD | NEW |