OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 25 matching lines...) Expand all Loading... |
36 // Testing auxiliaries (breaking the Type abstraction). | 36 // Testing auxiliaries (breaking the Type abstraction). |
37 struct ZoneRep { | 37 struct ZoneRep { |
38 typedef void* Struct; | 38 typedef void* Struct; |
39 | 39 |
40 static bool IsStruct(Type* t, int tag) { | 40 static bool IsStruct(Type* t, int tag) { |
41 return !IsBitset(t) && reinterpret_cast<intptr_t>(AsStruct(t)[0]) == tag; | 41 return !IsBitset(t) && reinterpret_cast<intptr_t>(AsStruct(t)[0]) == tag; |
42 } | 42 } |
43 static bool IsBitset(Type* t) { return reinterpret_cast<intptr_t>(t) & 1; } | 43 static bool IsBitset(Type* t) { return reinterpret_cast<intptr_t>(t) & 1; } |
44 static bool IsClass(Type* t) { return IsStruct(t, 0); } | 44 static bool IsClass(Type* t) { return IsStruct(t, 0); } |
45 static bool IsConstant(Type* t) { return IsStruct(t, 1); } | 45 static bool IsConstant(Type* t) { return IsStruct(t, 1); } |
46 static bool IsArray(Type* t) { return IsStruct(t, 2); } | 46 static bool IsContext(Type* t) { return IsStruct(t, 2); } |
47 static bool IsFunction(Type* t) { return IsStruct(t, 3); } | 47 static bool IsArray(Type* t) { return IsStruct(t, 3); } |
48 static bool IsUnion(Type* t) { return IsStruct(t, 4); } | 48 static bool IsFunction(Type* t) { return IsStruct(t, 4); } |
| 49 static bool IsUnion(Type* t) { return IsStruct(t, 5); } |
49 | 50 |
50 static Struct* AsStruct(Type* t) { | 51 static Struct* AsStruct(Type* t) { |
51 return reinterpret_cast<Struct*>(t); | 52 return reinterpret_cast<Struct*>(t); |
52 } | 53 } |
53 static int AsBitset(Type* t) { | 54 static int AsBitset(Type* t) { |
54 return static_cast<int>(reinterpret_cast<intptr_t>(t) >> 1); | 55 return static_cast<int>(reinterpret_cast<intptr_t>(t) >> 1); |
55 } | 56 } |
56 static Map* AsClass(Type* t) { | 57 static Map* AsClass(Type* t) { |
57 return *static_cast<Map**>(AsStruct(t)[3]); | 58 return *static_cast<Map**>(AsStruct(t)[3]); |
58 } | 59 } |
59 static Object* AsConstant(Type* t) { | 60 static Object* AsConstant(Type* t) { |
60 return *static_cast<Object**>(AsStruct(t)[3]); | 61 return *static_cast<Object**>(AsStruct(t)[3]); |
61 } | 62 } |
| 63 static Type* AsContext(Type* t) { |
| 64 return *static_cast<Type**>(AsStruct(t)[2]); |
| 65 } |
62 static Struct* AsUnion(Type* t) { | 66 static Struct* AsUnion(Type* t) { |
63 return AsStruct(t); | 67 return AsStruct(t); |
64 } | 68 } |
65 static int Length(Struct* structured) { | 69 static int Length(Struct* structured) { |
66 return static_cast<int>(reinterpret_cast<intptr_t>(structured[1])); | 70 return static_cast<int>(reinterpret_cast<intptr_t>(structured[1])); |
67 } | 71 } |
68 | 72 |
69 static Zone* ToRegion(Zone* zone, Isolate* isolate) { return zone; } | 73 static Zone* ToRegion(Zone* zone, Isolate* isolate) { return zone; } |
70 }; | 74 }; |
71 | 75 |
72 | 76 |
73 struct HeapRep { | 77 struct HeapRep { |
74 typedef FixedArray Struct; | 78 typedef FixedArray Struct; |
75 | 79 |
76 static bool IsStruct(Handle<HeapType> t, int tag) { | 80 static bool IsStruct(Handle<HeapType> t, int tag) { |
77 return t->IsFixedArray() && Smi::cast(AsStruct(t)->get(0))->value() == tag; | 81 return t->IsFixedArray() && Smi::cast(AsStruct(t)->get(0))->value() == tag; |
78 } | 82 } |
79 static bool IsBitset(Handle<HeapType> t) { return t->IsSmi(); } | 83 static bool IsBitset(Handle<HeapType> t) { return t->IsSmi(); } |
80 static bool IsClass(Handle<HeapType> t) { return t->IsMap(); } | 84 static bool IsClass(Handle<HeapType> t) { return t->IsMap(); } |
81 static bool IsConstant(Handle<HeapType> t) { return t->IsBox(); } | 85 static bool IsConstant(Handle<HeapType> t) { return t->IsBox(); } |
82 static bool IsArray(Handle<HeapType> t) { return IsStruct(t, 2); } | 86 static bool IsContext(Handle<HeapType> t) { return IsStruct(t, 2); } |
83 static bool IsFunction(Handle<HeapType> t) { return IsStruct(t, 3); } | 87 static bool IsArray(Handle<HeapType> t) { return IsStruct(t, 3); } |
84 static bool IsUnion(Handle<HeapType> t) { return IsStruct(t, 4); } | 88 static bool IsFunction(Handle<HeapType> t) { return IsStruct(t, 4); } |
| 89 static bool IsUnion(Handle<HeapType> t) { return IsStruct(t, 5); } |
85 | 90 |
86 static Struct* AsStruct(Handle<HeapType> t) { return FixedArray::cast(*t); } | 91 static Struct* AsStruct(Handle<HeapType> t) { return FixedArray::cast(*t); } |
87 static int AsBitset(Handle<HeapType> t) { return Smi::cast(*t)->value(); } | 92 static int AsBitset(Handle<HeapType> t) { return Smi::cast(*t)->value(); } |
88 static Map* AsClass(Handle<HeapType> t) { return Map::cast(*t); } | 93 static Map* AsClass(Handle<HeapType> t) { return Map::cast(*t); } |
89 static Object* AsConstant(Handle<HeapType> t) { | 94 static Object* AsConstant(Handle<HeapType> t) { |
90 return Box::cast(*t)->value(); | 95 return Box::cast(*t)->value(); |
91 } | 96 } |
| 97 static HeapType* AsContext(Handle<HeapType> t) { |
| 98 return HeapType::cast(AsStruct(t)->get(1)); |
| 99 } |
92 static Struct* AsUnion(Handle<HeapType> t) { return AsStruct(t); } | 100 static Struct* AsUnion(Handle<HeapType> t) { return AsStruct(t); } |
93 static int Length(Struct* structured) { return structured->length() - 1; } | 101 static int Length(Struct* structured) { return structured->length() - 1; } |
94 | 102 |
95 static Isolate* ToRegion(Zone* zone, Isolate* isolate) { return isolate; } | 103 static Isolate* ToRegion(Zone* zone, Isolate* isolate) { return isolate; } |
96 }; | 104 }; |
97 | 105 |
98 | 106 |
99 template<class Type, class TypeHandle, class Region> | 107 template<class Type, class TypeHandle, class Region> |
100 class Types { | 108 class Types { |
101 public: | 109 public: |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
136 values.push_back(smi); | 144 values.push_back(smi); |
137 values.push_back(signed32); | 145 values.push_back(signed32); |
138 values.push_back(object1); | 146 values.push_back(object1); |
139 values.push_back(object2); | 147 values.push_back(object2); |
140 values.push_back(array); | 148 values.push_back(array); |
141 values.push_back(uninitialized); | 149 values.push_back(uninitialized); |
142 for (ValueVector::iterator it = values.begin(); it != values.end(); ++it) { | 150 for (ValueVector::iterator it = values.begin(); it != values.end(); ++it) { |
143 types.push_back(Type::Constant(*it, region)); | 151 types.push_back(Type::Constant(*it, region)); |
144 } | 152 } |
145 | 153 |
146 FloatArray = Type::Array(Float, region); | 154 NumberArray = Type::Array(Number, region); |
147 StringArray = Type::Array(String, region); | 155 StringArray = Type::Array(String, region); |
148 AnyArray = Type::Array(Any, region); | 156 AnyArray = Type::Array(Any, region); |
149 | 157 |
150 SignedFunction1 = Type::Function(SignedSmall, SignedSmall, region); | 158 SignedFunction1 = Type::Function(SignedSmall, SignedSmall, region); |
151 NumberFunction1 = Type::Function(Number, Number, region); | 159 NumberFunction1 = Type::Function(Number, Number, region); |
152 NumberFunction2 = Type::Function(Number, Number, Number, region); | 160 NumberFunction2 = Type::Function(Number, Number, Number, region); |
153 MethodFunction = Type::Function(String, Object, 0, region); | 161 MethodFunction = Type::Function(String, Object, 0, region); |
154 | 162 |
155 for (int i = 0; i < 50; ++i) { | 163 for (int i = 0; i < 50; ++i) { |
156 types.push_back(Fuzz()); | 164 types.push_back(Fuzz()); |
(...skipping 19 matching lines...) Expand all Loading... |
176 TypeHandle ArrayClass; | 184 TypeHandle ArrayClass; |
177 TypeHandle UninitializedClass; | 185 TypeHandle UninitializedClass; |
178 | 186 |
179 TypeHandle SmiConstant; | 187 TypeHandle SmiConstant; |
180 TypeHandle Signed32Constant; | 188 TypeHandle Signed32Constant; |
181 TypeHandle ObjectConstant1; | 189 TypeHandle ObjectConstant1; |
182 TypeHandle ObjectConstant2; | 190 TypeHandle ObjectConstant2; |
183 TypeHandle ArrayConstant; | 191 TypeHandle ArrayConstant; |
184 TypeHandle UninitializedConstant; | 192 TypeHandle UninitializedConstant; |
185 | 193 |
186 TypeHandle FloatArray; | 194 TypeHandle NumberArray; |
187 TypeHandle StringArray; | 195 TypeHandle StringArray; |
188 TypeHandle AnyArray; | 196 TypeHandle AnyArray; |
189 | 197 |
190 TypeHandle SignedFunction1; | 198 TypeHandle SignedFunction1; |
191 TypeHandle NumberFunction1; | 199 TypeHandle NumberFunction1; |
192 TypeHandle NumberFunction2; | 200 TypeHandle NumberFunction2; |
193 TypeHandle MethodFunction; | 201 TypeHandle MethodFunction; |
194 | 202 |
195 typedef std::vector<TypeHandle> TypeVector; | 203 typedef std::vector<TypeHandle> TypeVector; |
196 typedef std::vector<Handle<i::Map> > MapVector; | 204 typedef std::vector<Handle<i::Map> > MapVector; |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
265 UNREACHABLE(); | 273 UNREACHABLE(); |
266 } | 274 } |
267 case 1: { // class | 275 case 1: { // class |
268 int i = rng_.NextInt(static_cast<int>(maps.size())); | 276 int i = rng_.NextInt(static_cast<int>(maps.size())); |
269 return Type::Class(maps[i], region_); | 277 return Type::Class(maps[i], region_); |
270 } | 278 } |
271 case 2: { // constant | 279 case 2: { // constant |
272 int i = rng_.NextInt(static_cast<int>(values.size())); | 280 int i = rng_.NextInt(static_cast<int>(values.size())); |
273 return Type::Constant(values[i], region_); | 281 return Type::Constant(values[i], region_); |
274 } | 282 } |
275 case 3: { // array | 283 case 3: { // context |
| 284 int depth = rng_.NextInt(3); |
| 285 TypeHandle type = Type::Internal(region_); |
| 286 for (int i = 0; i < depth; ++i) type = Type::Context(type, region_); |
| 287 return type; |
| 288 } |
| 289 case 4: { // array |
276 TypeHandle element = Fuzz(depth / 2); | 290 TypeHandle element = Fuzz(depth / 2); |
277 return Type::Array(element, region_); | 291 return Type::Array(element, region_); |
278 } | 292 } |
279 case 4: | |
280 case 5: | 293 case 5: |
281 case 6: { // function | 294 case 6: |
| 295 case 7: { // function |
282 TypeHandle result = Fuzz(depth / 2); | 296 TypeHandle result = Fuzz(depth / 2); |
283 TypeHandle receiver = Fuzz(depth / 2); | 297 TypeHandle receiver = Fuzz(depth / 2); |
284 int arity = rng_.NextInt(3); | 298 int arity = rng_.NextInt(3); |
285 TypeHandle type = Type::Function(result, receiver, arity, region_); | 299 TypeHandle type = Type::Function(result, receiver, arity, region_); |
286 for (int i = 0; i < type->AsFunction()->Arity(); ++i) { | 300 for (int i = 0; i < type->AsFunction()->Arity(); ++i) { |
287 TypeHandle parameter = Fuzz(depth - 1); | 301 TypeHandle parameter = Fuzz(depth - 1); |
288 type->AsFunction()->InitParameter(i, parameter); | 302 type->AsFunction()->InitParameter(i, parameter); |
289 } | 303 } |
290 } | 304 } |
291 default: { // union | 305 default: { // union |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
325 zone(isolate), | 339 zone(isolate), |
326 T(Rep::ToRegion(&zone, isolate), isolate) { | 340 T(Rep::ToRegion(&zone, isolate), isolate) { |
327 } | 341 } |
328 | 342 |
329 bool Equal(TypeHandle type1, TypeHandle type2) { | 343 bool Equal(TypeHandle type1, TypeHandle type2) { |
330 return | 344 return |
331 type1->Is(type2) && type2->Is(type1) && | 345 type1->Is(type2) && type2->Is(type1) && |
332 Rep::IsBitset(type1) == Rep::IsBitset(type2) && | 346 Rep::IsBitset(type1) == Rep::IsBitset(type2) && |
333 Rep::IsClass(type1) == Rep::IsClass(type2) && | 347 Rep::IsClass(type1) == Rep::IsClass(type2) && |
334 Rep::IsConstant(type1) == Rep::IsConstant(type2) && | 348 Rep::IsConstant(type1) == Rep::IsConstant(type2) && |
| 349 Rep::IsContext(type1) == Rep::IsContext(type2) && |
335 Rep::IsUnion(type1) == Rep::IsUnion(type2) && | 350 Rep::IsUnion(type1) == Rep::IsUnion(type2) && |
336 type1->NumClasses() == type2->NumClasses() && | 351 type1->NumClasses() == type2->NumClasses() && |
337 type1->NumConstants() == type2->NumConstants() && | 352 type1->NumConstants() == type2->NumConstants() && |
338 (!Rep::IsBitset(type1) || | 353 (!Rep::IsBitset(type1) || |
339 Rep::AsBitset(type1) == Rep::AsBitset(type2)) && | 354 Rep::AsBitset(type1) == Rep::AsBitset(type2)) && |
340 (!Rep::IsClass(type1) || | 355 (!Rep::IsClass(type1) || |
341 Rep::AsClass(type1) == Rep::AsClass(type2)) && | 356 Rep::AsClass(type1) == Rep::AsClass(type2)) && |
342 (!Rep::IsConstant(type1) || | 357 (!Rep::IsConstant(type1) || |
343 Rep::AsConstant(type1) == Rep::AsConstant(type2)) && | 358 Rep::AsConstant(type1) == Rep::AsConstant(type2)) && |
344 (!Rep::IsUnion(type1) || | 359 (!Rep::IsUnion(type1) || |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
500 // Functionality & Injectivity: Constant(V1) = Constant(V2) iff V1 = V2 | 515 // Functionality & Injectivity: Constant(V1) = Constant(V2) iff V1 = V2 |
501 for (ValueIterator vt1 = T.values.begin(); vt1 != T.values.end(); ++vt1) { | 516 for (ValueIterator vt1 = T.values.begin(); vt1 != T.values.end(); ++vt1) { |
502 for (ValueIterator vt2 = T.values.begin(); vt2 != T.values.end(); ++vt2) { | 517 for (ValueIterator vt2 = T.values.begin(); vt2 != T.values.end(); ++vt2) { |
503 Handle<i::Object> value1 = *vt1; | 518 Handle<i::Object> value1 = *vt1; |
504 Handle<i::Object> value2 = *vt2; | 519 Handle<i::Object> value2 = *vt2; |
505 TypeHandle type1 = T.Constant(value1); | 520 TypeHandle type1 = T.Constant(value1); |
506 TypeHandle type2 = T.Constant(value2); | 521 TypeHandle type2 = T.Constant(value2); |
507 CHECK(Equal(type1, type2) == (*value1 == *value2)); | 522 CHECK(Equal(type1, type2) == (*value1 == *value2)); |
508 } | 523 } |
509 } | 524 } |
| 525 |
| 526 // Typing of numbers |
| 527 Factory* fac = isolate->factory(); |
| 528 CHECK(T.Constant(fac->NewNumber(0))->Is(T.UnsignedSmall)); |
| 529 CHECK(T.Constant(fac->NewNumber(1))->Is(T.UnsignedSmall)); |
| 530 CHECK(T.Constant(fac->NewNumber(0x3fffffff))->Is(T.UnsignedSmall)); |
| 531 CHECK(T.Constant(fac->NewNumber(-1))->Is(T.OtherSignedSmall)); |
| 532 CHECK(T.Constant(fac->NewNumber(-0x3fffffff))->Is(T.OtherSignedSmall)); |
| 533 CHECK(T.Constant(fac->NewNumber(-0x40000000))->Is(T.OtherSignedSmall)); |
| 534 if (SmiValuesAre31Bits()) { |
| 535 CHECK(T.Constant(fac->NewNumber(0x40000000))->Is(T.OtherUnsigned31)); |
| 536 CHECK(T.Constant(fac->NewNumber(0x7fffffff))->Is(T.OtherUnsigned31)); |
| 537 CHECK(T.Constant(fac->NewNumber(-0x40000001))->Is(T.OtherSigned32)); |
| 538 CHECK(T.Constant(fac->NewNumber(-0x7fffffff))->Is(T.OtherSigned32)); |
| 539 CHECK(T.Constant(fac->NewNumber(-0x7fffffff-1))->Is(T.OtherSigned32)); |
| 540 } else { |
| 541 CHECK(SmiValuesAre32Bits()); |
| 542 CHECK(T.Constant(fac->NewNumber(0x40000000))->Is(T.UnsignedSmall)); |
| 543 CHECK(T.Constant(fac->NewNumber(0x7fffffff))->Is(T.UnsignedSmall)); |
| 544 CHECK(!T.Constant(fac->NewNumber(0x40000000))->Is(T.OtherUnsigned31)); |
| 545 CHECK(!T.Constant(fac->NewNumber(0x7fffffff))->Is(T.OtherUnsigned31)); |
| 546 CHECK(T.Constant(fac->NewNumber(-0x40000001))->Is(T.OtherSignedSmall)); |
| 547 CHECK(T.Constant(fac->NewNumber(-0x7fffffff))->Is(T.OtherSignedSmall)); |
| 548 CHECK(T.Constant(fac->NewNumber(-0x7fffffff-1))->Is(T.OtherSignedSmall)); |
| 549 CHECK(!T.Constant(fac->NewNumber(-0x40000001))->Is(T.OtherSigned32)); |
| 550 CHECK(!T.Constant(fac->NewNumber(-0x7fffffff))->Is(T.OtherSigned32)); |
| 551 CHECK(!T.Constant(fac->NewNumber(-0x7fffffff-1))->Is(T.OtherSigned32)); |
| 552 } |
| 553 CHECK(T.Constant(fac->NewNumber(0x80000000u))->Is(T.OtherUnsigned32)); |
| 554 CHECK(T.Constant(fac->NewNumber(0xffffffffu))->Is(T.OtherUnsigned32)); |
| 555 CHECK(T.Constant(fac->NewNumber(0xffffffffu+1.0))->Is(T.OtherNumber)); |
| 556 CHECK(T.Constant(fac->NewNumber(-0x7fffffff-2.0))->Is(T.OtherNumber)); |
| 557 CHECK(T.Constant(fac->NewNumber(0.1))->Is(T.OtherNumber)); |
| 558 CHECK(T.Constant(fac->NewNumber(-10.1))->Is(T.OtherNumber)); |
| 559 CHECK(T.Constant(fac->NewNumber(10e60))->Is(T.OtherNumber)); |
| 560 CHECK(T.Constant(fac->NewNumber(-1.0*0.0))->Is(T.MinusZero)); |
| 561 CHECK(T.Constant(fac->NewNumber(0.0/0.0))->Is(T.NaN)); |
| 562 CHECK(T.Constant(fac->NewNumber(1.0/0.0))->Is(T.OtherNumber)); |
| 563 CHECK(T.Constant(fac->NewNumber(-1.0/0.0))->Is(T.OtherNumber)); |
510 } | 564 } |
511 | 565 |
512 void Array() { | 566 void Array() { |
513 // Constructor | 567 // Constructor |
514 for (int i = 0; i < 20; ++i) { | 568 for (int i = 0; i < 20; ++i) { |
515 TypeHandle type = T.Random(); | 569 TypeHandle type = T.Random(); |
516 TypeHandle array = T.Array1(type); | 570 TypeHandle array = T.Array1(type); |
517 CHECK(this->IsArray(array)); | 571 CHECK(this->IsArray(array)); |
518 } | 572 } |
519 | 573 |
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
765 } | 819 } |
766 } | 820 } |
767 | 821 |
768 // Basic types | 822 // Basic types |
769 CheckUnordered(T.Boolean, T.Null); | 823 CheckUnordered(T.Boolean, T.Null); |
770 CheckUnordered(T.Undefined, T.Null); | 824 CheckUnordered(T.Undefined, T.Null); |
771 CheckUnordered(T.Boolean, T.Undefined); | 825 CheckUnordered(T.Boolean, T.Undefined); |
772 | 826 |
773 CheckSub(T.SignedSmall, T.Number); | 827 CheckSub(T.SignedSmall, T.Number); |
774 CheckSub(T.Signed32, T.Number); | 828 CheckSub(T.Signed32, T.Number); |
775 CheckSub(T.Float, T.Number); | |
776 CheckSub(T.SignedSmall, T.Signed32); | 829 CheckSub(T.SignedSmall, T.Signed32); |
777 CheckUnordered(T.SignedSmall, T.Float); | 830 CheckUnordered(T.SignedSmall, T.MinusZero); |
778 CheckUnordered(T.Signed32, T.Float); | 831 CheckUnordered(T.Signed32, T.Unsigned32); |
779 | 832 |
780 CheckSub(T.UniqueName, T.Name); | 833 CheckSub(T.UniqueName, T.Name); |
781 CheckSub(T.String, T.Name); | 834 CheckSub(T.String, T.Name); |
782 CheckSub(T.InternalizedString, T.String); | 835 CheckSub(T.InternalizedString, T.String); |
783 CheckSub(T.InternalizedString, T.UniqueName); | 836 CheckSub(T.InternalizedString, T.UniqueName); |
784 CheckSub(T.InternalizedString, T.Name); | 837 CheckSub(T.InternalizedString, T.Name); |
785 CheckSub(T.Symbol, T.UniqueName); | 838 CheckSub(T.Symbol, T.UniqueName); |
786 CheckSub(T.Symbol, T.Name); | 839 CheckSub(T.Symbol, T.Name); |
787 CheckUnordered(T.String, T.UniqueName); | 840 CheckUnordered(T.String, T.UniqueName); |
788 CheckUnordered(T.String, T.Symbol); | 841 CheckUnordered(T.String, T.Symbol); |
(...skipping 27 matching lines...) Expand all Loading... |
816 CheckUnordered(T.ObjectConstant1, T.ArrayConstant); | 869 CheckUnordered(T.ObjectConstant1, T.ArrayConstant); |
817 CheckUnordered(T.UninitializedConstant, T.Null); | 870 CheckUnordered(T.UninitializedConstant, T.Null); |
818 CheckUnordered(T.UninitializedConstant, T.Undefined); | 871 CheckUnordered(T.UninitializedConstant, T.Undefined); |
819 | 872 |
820 CheckUnordered(T.ObjectConstant1, T.ObjectClass); | 873 CheckUnordered(T.ObjectConstant1, T.ObjectClass); |
821 CheckUnordered(T.ObjectConstant2, T.ObjectClass); | 874 CheckUnordered(T.ObjectConstant2, T.ObjectClass); |
822 CheckUnordered(T.ObjectConstant1, T.ArrayClass); | 875 CheckUnordered(T.ObjectConstant1, T.ArrayClass); |
823 CheckUnordered(T.ObjectConstant2, T.ArrayClass); | 876 CheckUnordered(T.ObjectConstant2, T.ArrayClass); |
824 CheckUnordered(T.ArrayConstant, T.ObjectClass); | 877 CheckUnordered(T.ArrayConstant, T.ObjectClass); |
825 | 878 |
826 CheckSub(T.FloatArray, T.Array); | 879 CheckSub(T.NumberArray, T.Array); |
827 CheckSub(T.FloatArray, T.Object); | 880 CheckSub(T.NumberArray, T.Object); |
828 CheckUnordered(T.StringArray, T.AnyArray); | 881 CheckUnordered(T.StringArray, T.AnyArray); |
829 | 882 |
830 CheckSub(T.MethodFunction, T.Function); | 883 CheckSub(T.MethodFunction, T.Function); |
831 CheckSub(T.NumberFunction1, T.Object); | 884 CheckSub(T.NumberFunction1, T.Object); |
832 CheckUnordered(T.SignedFunction1, T.NumberFunction1); | 885 CheckUnordered(T.SignedFunction1, T.NumberFunction1); |
833 CheckUnordered(T.NumberFunction1, T.NumberFunction2); | 886 CheckUnordered(T.NumberFunction1, T.NumberFunction2); |
834 } | 887 } |
835 | 888 |
836 void NowIs() { | 889 void NowIs() { |
837 // Least Element (Bottom): None->NowIs(T) | 890 // Least Element (Bottom): None->NowIs(T) |
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1107 CHECK(!class_type->Maybe(const_type)); | 1160 CHECK(!class_type->Maybe(const_type)); |
1108 } | 1161 } |
1109 } | 1162 } |
1110 | 1163 |
1111 // Basic types | 1164 // Basic types |
1112 CheckDisjoint(T.Boolean, T.Null, T.Semantic); | 1165 CheckDisjoint(T.Boolean, T.Null, T.Semantic); |
1113 CheckDisjoint(T.Undefined, T.Null, T.Semantic); | 1166 CheckDisjoint(T.Undefined, T.Null, T.Semantic); |
1114 CheckDisjoint(T.Boolean, T.Undefined, T.Semantic); | 1167 CheckDisjoint(T.Boolean, T.Undefined, T.Semantic); |
1115 | 1168 |
1116 CheckOverlap(T.SignedSmall, T.Number, T.Semantic); | 1169 CheckOverlap(T.SignedSmall, T.Number, T.Semantic); |
1117 CheckOverlap(T.Float, T.Number, T.Semantic); | 1170 CheckOverlap(T.NaN, T.Number, T.Semantic); |
1118 CheckDisjoint(T.Signed32, T.Float, T.Semantic); | 1171 CheckDisjoint(T.Signed32, T.NaN, T.Semantic); |
1119 | 1172 |
1120 CheckOverlap(T.UniqueName, T.Name, T.Semantic); | 1173 CheckOverlap(T.UniqueName, T.Name, T.Semantic); |
1121 CheckOverlap(T.String, T.Name, T.Semantic); | 1174 CheckOverlap(T.String, T.Name, T.Semantic); |
1122 CheckOverlap(T.InternalizedString, T.String, T.Semantic); | 1175 CheckOverlap(T.InternalizedString, T.String, T.Semantic); |
1123 CheckOverlap(T.InternalizedString, T.UniqueName, T.Semantic); | 1176 CheckOverlap(T.InternalizedString, T.UniqueName, T.Semantic); |
1124 CheckOverlap(T.InternalizedString, T.Name, T.Semantic); | 1177 CheckOverlap(T.InternalizedString, T.Name, T.Semantic); |
1125 CheckOverlap(T.Symbol, T.UniqueName, T.Semantic); | 1178 CheckOverlap(T.Symbol, T.UniqueName, T.Semantic); |
1126 CheckOverlap(T.Symbol, T.Name, T.Semantic); | 1179 CheckOverlap(T.Symbol, T.Name, T.Semantic); |
1127 CheckOverlap(T.String, T.UniqueName, T.Semantic); | 1180 CheckOverlap(T.String, T.UniqueName, T.Semantic); |
1128 CheckDisjoint(T.String, T.Symbol, T.Semantic); | 1181 CheckDisjoint(T.String, T.Symbol, T.Semantic); |
1129 CheckDisjoint(T.InternalizedString, T.Symbol, T.Semantic); | 1182 CheckDisjoint(T.InternalizedString, T.Symbol, T.Semantic); |
1130 | 1183 |
1131 CheckOverlap(T.Object, T.Receiver, T.Semantic); | 1184 CheckOverlap(T.Object, T.Receiver, T.Semantic); |
1132 CheckOverlap(T.Array, T.Object, T.Semantic); | 1185 CheckOverlap(T.Array, T.Object, T.Semantic); |
1133 CheckOverlap(T.Function, T.Object, T.Semantic); | 1186 CheckOverlap(T.Function, T.Object, T.Semantic); |
1134 CheckOverlap(T.Proxy, T.Receiver, T.Semantic); | 1187 CheckOverlap(T.Proxy, T.Receiver, T.Semantic); |
1135 CheckDisjoint(T.Object, T.Proxy, T.Semantic); | 1188 CheckDisjoint(T.Object, T.Proxy, T.Semantic); |
1136 CheckDisjoint(T.Array, T.Function, T.Semantic); | 1189 CheckDisjoint(T.Array, T.Function, T.Semantic); |
1137 | 1190 |
1138 // Structural types | 1191 // Structural types |
1139 CheckOverlap(T.ObjectClass, T.Object, T.Semantic); | 1192 CheckOverlap(T.ObjectClass, T.Object, T.Semantic); |
1140 CheckOverlap(T.ArrayClass, T.Object, T.Semantic); | 1193 CheckOverlap(T.ArrayClass, T.Object, T.Semantic); |
1141 CheckOverlap(T.ObjectClass, T.ObjectClass, T.Semantic); | 1194 CheckOverlap(T.ObjectClass, T.ObjectClass, T.Semantic); |
1142 CheckOverlap(T.ArrayClass, T.ArrayClass, T.Semantic); | 1195 CheckOverlap(T.ArrayClass, T.ArrayClass, T.Semantic); |
1143 CheckDisjoint(T.ObjectClass, T.ArrayClass, T.Semantic); | 1196 CheckDisjoint(T.ObjectClass, T.ArrayClass, T.Semantic); |
1144 | 1197 |
1145 CheckOverlap(T.SmiConstant, T.SignedSmall, T.Semantic); | 1198 CheckOverlap(T.SmiConstant, T.SignedSmall, T.Semantic); |
1146 CheckOverlap(T.SmiConstant, T.Signed32, T.Semantic); | 1199 CheckOverlap(T.SmiConstant, T.Signed32, T.Semantic); |
1147 CheckOverlap(T.SmiConstant, T.Number, T.Semantic); | 1200 CheckOverlap(T.SmiConstant, T.Number, T.Semantic); |
1148 CheckDisjoint(T.SmiConstant, T.Float, T.Semantic); | |
1149 CheckOverlap(T.ObjectConstant1, T.Object, T.Semantic); | 1201 CheckOverlap(T.ObjectConstant1, T.Object, T.Semantic); |
1150 CheckOverlap(T.ObjectConstant2, T.Object, T.Semantic); | 1202 CheckOverlap(T.ObjectConstant2, T.Object, T.Semantic); |
1151 CheckOverlap(T.ArrayConstant, T.Object, T.Semantic); | 1203 CheckOverlap(T.ArrayConstant, T.Object, T.Semantic); |
1152 CheckOverlap(T.ArrayConstant, T.Array, T.Semantic); | 1204 CheckOverlap(T.ArrayConstant, T.Array, T.Semantic); |
1153 CheckOverlap(T.ObjectConstant1, T.ObjectConstant1, T.Semantic); | 1205 CheckOverlap(T.ObjectConstant1, T.ObjectConstant1, T.Semantic); |
1154 CheckDisjoint(T.ObjectConstant1, T.ObjectConstant2, T.Semantic); | 1206 CheckDisjoint(T.ObjectConstant1, T.ObjectConstant2, T.Semantic); |
1155 CheckDisjoint(T.ObjectConstant1, T.ArrayConstant, T.Semantic); | 1207 CheckDisjoint(T.ObjectConstant1, T.ArrayConstant, T.Semantic); |
1156 | 1208 |
1157 CheckDisjoint(T.ObjectConstant1, T.ObjectClass, T.Semantic); | 1209 CheckDisjoint(T.ObjectConstant1, T.ObjectClass, T.Semantic); |
1158 CheckDisjoint(T.ObjectConstant2, T.ObjectClass, T.Semantic); | 1210 CheckDisjoint(T.ObjectConstant2, T.ObjectClass, T.Semantic); |
1159 CheckDisjoint(T.ObjectConstant1, T.ArrayClass, T.Semantic); | 1211 CheckDisjoint(T.ObjectConstant1, T.ArrayClass, T.Semantic); |
1160 CheckDisjoint(T.ObjectConstant2, T.ArrayClass, T.Semantic); | 1212 CheckDisjoint(T.ObjectConstant2, T.ArrayClass, T.Semantic); |
1161 CheckDisjoint(T.ArrayConstant, T.ObjectClass, T.Semantic); | 1213 CheckDisjoint(T.ArrayConstant, T.ObjectClass, T.Semantic); |
1162 | 1214 |
1163 CheckOverlap(T.FloatArray, T.Array, T.Semantic); | 1215 CheckOverlap(T.NumberArray, T.Array, T.Semantic); |
1164 CheckDisjoint(T.FloatArray, T.AnyArray, T.Semantic); | 1216 CheckDisjoint(T.NumberArray, T.AnyArray, T.Semantic); |
1165 CheckDisjoint(T.FloatArray, T.StringArray, T.Semantic); | 1217 CheckDisjoint(T.NumberArray, T.StringArray, T.Semantic); |
1166 | 1218 |
1167 CheckOverlap(T.MethodFunction, T.Function, T.Semantic); | 1219 CheckOverlap(T.MethodFunction, T.Function, T.Semantic); |
1168 CheckDisjoint(T.SignedFunction1, T.NumberFunction1, T.Semantic); | 1220 CheckDisjoint(T.SignedFunction1, T.NumberFunction1, T.Semantic); |
1169 CheckDisjoint(T.SignedFunction1, T.NumberFunction2, T.Semantic); | 1221 CheckDisjoint(T.SignedFunction1, T.NumberFunction2, T.Semantic); |
1170 CheckDisjoint(T.NumberFunction1, T.NumberFunction2, T.Semantic); | 1222 CheckDisjoint(T.NumberFunction1, T.NumberFunction2, T.Semantic); |
1171 CheckDisjoint(T.SignedFunction1, T.MethodFunction, T.Semantic); | 1223 CheckDisjoint(T.SignedFunction1, T.MethodFunction, T.Semantic); |
1172 } | 1224 } |
1173 | 1225 |
1174 void Union1() { | 1226 void Union1() { |
1175 // Identity: Union(T, None) = T | 1227 // Identity: Union(T, None) = T |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1296 T.Union(T.ObjectConstant1, T.ObjectConstant2), T.ObjectClass); | 1348 T.Union(T.ObjectConstant1, T.ObjectConstant2), T.ObjectClass); |
1297 CheckOverlap( | 1349 CheckOverlap( |
1298 T.Union(T.ObjectConstant1, T.ArrayConstant), T.Array, T.Semantic); | 1350 T.Union(T.ObjectConstant1, T.ArrayConstant), T.Array, T.Semantic); |
1299 CheckDisjoint( | 1351 CheckDisjoint( |
1300 T.Union(T.ObjectConstant1, T.ArrayConstant), T.Number, T.Semantic); | 1352 T.Union(T.ObjectConstant1, T.ArrayConstant), T.Number, T.Semantic); |
1301 CheckDisjoint( | 1353 CheckDisjoint( |
1302 T.Union(T.ObjectConstant1, T.ArrayConstant), T.ObjectClass, T.Semantic); | 1354 T.Union(T.ObjectConstant1, T.ArrayConstant), T.ObjectClass, T.Semantic); |
1303 | 1355 |
1304 // Bitset-array | 1356 // Bitset-array |
1305 CHECK(this->IsBitset(T.Union(T.AnyArray, T.Array))); | 1357 CHECK(this->IsBitset(T.Union(T.AnyArray, T.Array))); |
1306 CHECK(this->IsUnion(T.Union(T.FloatArray, T.Number))); | 1358 CHECK(this->IsUnion(T.Union(T.NumberArray, T.Number))); |
1307 | 1359 |
1308 CheckEqual(T.Union(T.AnyArray, T.Array), T.Array); | 1360 CheckEqual(T.Union(T.AnyArray, T.Array), T.Array); |
1309 CheckSub(T.None, T.Union(T.FloatArray, T.Number)); | |
1310 CheckSub(T.Union(T.FloatArray, T.Number), T.Any); | |
1311 CheckUnordered(T.Union(T.AnyArray, T.String), T.Array); | 1361 CheckUnordered(T.Union(T.AnyArray, T.String), T.Array); |
1312 CheckOverlap(T.Union(T.FloatArray, T.String), T.Object, T.Semantic); | 1362 CheckOverlap(T.Union(T.NumberArray, T.String), T.Object, T.Semantic); |
1313 CheckDisjoint(T.Union(T.FloatArray, T.String), T.Number, T.Semantic); | 1363 CheckDisjoint(T.Union(T.NumberArray, T.String), T.Number, T.Semantic); |
1314 | 1364 |
1315 // Bitset-function | 1365 // Bitset-function |
1316 CHECK(this->IsBitset(T.Union(T.MethodFunction, T.Function))); | 1366 CHECK(this->IsBitset(T.Union(T.MethodFunction, T.Function))); |
1317 CHECK(this->IsUnion(T.Union(T.NumberFunction1, T.Number))); | 1367 CHECK(this->IsUnion(T.Union(T.NumberFunction1, T.Number))); |
1318 | 1368 |
1319 CheckEqual(T.Union(T.MethodFunction, T.Function), T.Function); | 1369 CheckEqual(T.Union(T.MethodFunction, T.Function), T.Function); |
1320 CheckSub(T.None, T.Union(T.MethodFunction, T.Number)); | |
1321 CheckSub(T.Union(T.MethodFunction, T.Number), T.Any); | |
1322 CheckUnordered(T.Union(T.NumberFunction1, T.String), T.Function); | 1370 CheckUnordered(T.Union(T.NumberFunction1, T.String), T.Function); |
1323 CheckOverlap(T.Union(T.NumberFunction2, T.String), T.Object, T.Semantic); | 1371 CheckOverlap(T.Union(T.NumberFunction2, T.String), T.Object, T.Semantic); |
1324 CheckDisjoint(T.Union(T.NumberFunction1, T.String), T.Number, T.Semantic); | 1372 CheckDisjoint(T.Union(T.NumberFunction1, T.String), T.Number, T.Semantic); |
1325 | 1373 |
1326 // Bitset-class | 1374 // Bitset-class |
1327 CheckSub( | 1375 CheckSub( |
1328 T.Union(T.ObjectClass, T.SignedSmall), T.Union(T.Object, T.Number)); | 1376 T.Union(T.ObjectClass, T.SignedSmall), T.Union(T.Object, T.Number)); |
1329 CheckSub(T.Union(T.ObjectClass, T.Array), T.Object); | 1377 CheckSub(T.Union(T.ObjectClass, T.Array), T.Object); |
1330 CheckUnordered(T.Union(T.ObjectClass, T.String), T.Array); | 1378 CheckUnordered(T.Union(T.ObjectClass, T.String), T.Array); |
1331 CheckOverlap(T.Union(T.ObjectClass, T.String), T.Object, T.Semantic); | 1379 CheckOverlap(T.Union(T.ObjectClass, T.String), T.Object, T.Semantic); |
(...skipping 14 matching lines...) Expand all Loading... |
1346 T.Union(T.ObjectConstant1, T.ArrayClass), T.Union(T.Array, T.Object)); | 1394 T.Union(T.ObjectConstant1, T.ArrayClass), T.Union(T.Array, T.Object)); |
1347 CheckUnordered(T.Union(T.ObjectConstant1, T.ArrayClass), T.ArrayConstant); | 1395 CheckUnordered(T.Union(T.ObjectConstant1, T.ArrayClass), T.ArrayConstant); |
1348 CheckDisjoint( | 1396 CheckDisjoint( |
1349 T.Union(T.ObjectConstant1, T.ArrayClass), T.ObjectConstant2, | 1397 T.Union(T.ObjectConstant1, T.ArrayClass), T.ObjectConstant2, |
1350 T.Semantic); | 1398 T.Semantic); |
1351 CheckDisjoint( | 1399 CheckDisjoint( |
1352 T.Union(T.ObjectConstant1, T.ArrayClass), T.ObjectClass, T.Semantic); | 1400 T.Union(T.ObjectConstant1, T.ArrayClass), T.ObjectClass, T.Semantic); |
1353 | 1401 |
1354 // Bitset-union | 1402 // Bitset-union |
1355 CheckSub( | 1403 CheckSub( |
1356 T.Float, | 1404 T.NaN, |
1357 T.Union(T.Union(T.ArrayClass, T.ObjectConstant1), T.Number)); | 1405 T.Union(T.Union(T.ArrayClass, T.ObjectConstant1), T.Number)); |
1358 CheckSub( | 1406 CheckSub( |
1359 T.Union(T.Union(T.ArrayClass, T.ObjectConstant1), T.Float), | 1407 T.Union(T.Union(T.ArrayClass, T.ObjectConstant1), T.Signed32), |
1360 T.Union(T.ObjectConstant1, T.Union(T.Number, T.ArrayClass))); | 1408 T.Union(T.ObjectConstant1, T.Union(T.Number, T.ArrayClass))); |
1361 | 1409 |
1362 // Class-union | 1410 // Class-union |
1363 CheckSub( | 1411 CheckSub( |
1364 T.Union(T.ObjectClass, T.Union(T.ObjectConstant1, T.ObjectClass)), | 1412 T.Union(T.ObjectClass, T.Union(T.ObjectConstant1, T.ObjectClass)), |
1365 T.Object); | 1413 T.Object); |
1366 CheckEqual( | 1414 CheckEqual( |
1367 T.Union(T.Union(T.ArrayClass, T.ObjectConstant2), T.ArrayClass), | 1415 T.Union(T.Union(T.ArrayClass, T.ObjectConstant2), T.ArrayClass), |
1368 T.Union(T.ArrayClass, T.ObjectConstant2)); | 1416 T.Union(T.ArrayClass, T.ObjectConstant2)); |
1369 | 1417 |
1370 // Constant-union | 1418 // Constant-union |
1371 CheckEqual( | 1419 CheckEqual( |
1372 T.Union( | 1420 T.Union( |
1373 T.ObjectConstant1, T.Union(T.ObjectConstant1, T.ObjectConstant2)), | 1421 T.ObjectConstant1, T.Union(T.ObjectConstant1, T.ObjectConstant2)), |
1374 T.Union(T.ObjectConstant2, T.ObjectConstant1)); | 1422 T.Union(T.ObjectConstant2, T.ObjectConstant1)); |
1375 CheckEqual( | 1423 CheckEqual( |
1376 T.Union( | 1424 T.Union( |
1377 T.Union(T.ArrayConstant, T.ObjectConstant2), T.ObjectConstant1), | 1425 T.Union(T.ArrayConstant, T.ObjectConstant2), T.ObjectConstant1), |
1378 T.Union( | 1426 T.Union( |
1379 T.ObjectConstant2, T.Union(T.ArrayConstant, T.ObjectConstant1))); | 1427 T.ObjectConstant2, T.Union(T.ArrayConstant, T.ObjectConstant1))); |
1380 | 1428 |
1381 // Array-union | 1429 // Array-union |
1382 CheckEqual( | 1430 CheckEqual( |
1383 T.Union(T.AnyArray, T.Union(T.FloatArray, T.AnyArray)), | 1431 T.Union(T.AnyArray, T.Union(T.NumberArray, T.AnyArray)), |
1384 T.Union(T.AnyArray, T.FloatArray)); | 1432 T.Union(T.AnyArray, T.NumberArray)); |
1385 CheckSub(T.Union(T.AnyArray, T.FloatArray), T.Array); | 1433 CheckSub(T.Union(T.AnyArray, T.NumberArray), T.Array); |
1386 | 1434 |
1387 // Function-union | 1435 // Function-union |
1388 CheckEqual( | 1436 CheckEqual( |
1389 T.Union(T.NumberFunction1, T.NumberFunction2), | 1437 T.Union(T.NumberFunction1, T.NumberFunction2), |
1390 T.Union(T.NumberFunction2, T.NumberFunction1)); | 1438 T.Union(T.NumberFunction2, T.NumberFunction1)); |
1391 CheckSub(T.Union(T.SignedFunction1, T.MethodFunction), T.Function); | 1439 CheckSub(T.Union(T.SignedFunction1, T.MethodFunction), T.Function); |
1392 | 1440 |
1393 // Union-union | 1441 // Union-union |
1394 CheckEqual( | 1442 CheckEqual( |
1395 T.Union( | 1443 T.Union( |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1517 } | 1565 } |
1518 } | 1566 } |
1519 } | 1567 } |
1520 | 1568 |
1521 // Bitset-class | 1569 // Bitset-class |
1522 CheckEqual(T.Intersect(T.ObjectClass, T.Object), T.ObjectClass); | 1570 CheckEqual(T.Intersect(T.ObjectClass, T.Object), T.ObjectClass); |
1523 CheckSub(T.Intersect(T.ObjectClass, T.Array), T.Representation); | 1571 CheckSub(T.Intersect(T.ObjectClass, T.Array), T.Representation); |
1524 CheckSub(T.Intersect(T.ObjectClass, T.Number), T.Representation); | 1572 CheckSub(T.Intersect(T.ObjectClass, T.Number), T.Representation); |
1525 | 1573 |
1526 // Bitset-array | 1574 // Bitset-array |
1527 CheckEqual(T.Intersect(T.FloatArray, T.Object), T.FloatArray); | 1575 CheckEqual(T.Intersect(T.NumberArray, T.Object), T.NumberArray); |
1528 CheckSub(T.Intersect(T.AnyArray, T.Function), T.Representation); | 1576 CheckSub(T.Intersect(T.AnyArray, T.Function), T.Representation); |
1529 | 1577 |
1530 // Bitset-function | 1578 // Bitset-function |
1531 CheckEqual(T.Intersect(T.MethodFunction, T.Object), T.MethodFunction); | 1579 CheckEqual(T.Intersect(T.MethodFunction, T.Object), T.MethodFunction); |
1532 CheckSub(T.Intersect(T.NumberFunction1, T.Array), T.Representation); | 1580 CheckSub(T.Intersect(T.NumberFunction1, T.Array), T.Representation); |
1533 | 1581 |
1534 // Bitset-union | 1582 // Bitset-union |
1535 CheckEqual( | 1583 CheckEqual( |
1536 T.Intersect(T.Object, T.Union(T.ObjectConstant1, T.ObjectClass)), | 1584 T.Intersect(T.Object, T.Union(T.ObjectConstant1, T.ObjectClass)), |
1537 T.Union(T.ObjectConstant1, T.ObjectClass)); | 1585 T.Union(T.ObjectConstant1, T.ObjectClass)); |
1538 CheckEqual( | 1586 CheckEqual( |
1539 T.Intersect(T.Union(T.ArrayClass, T.ObjectConstant1), T.Number), | 1587 T.Intersect(T.Union(T.ArrayClass, T.ObjectConstant1), T.Number), |
1540 T.None); | 1588 T.None); |
1541 | 1589 |
1542 // Class-constant | 1590 // Class-constant |
1543 CheckEqual(T.Intersect(T.ObjectConstant1, T.ObjectClass), T.None); | 1591 CheckEqual(T.Intersect(T.ObjectConstant1, T.ObjectClass), T.None); |
1544 CheckEqual(T.Intersect(T.ArrayClass, T.ObjectConstant2), T.None); | 1592 CheckEqual(T.Intersect(T.ArrayClass, T.ObjectConstant2), T.None); |
1545 | 1593 |
1546 // Array-union | 1594 // Array-union |
1547 CheckEqual( | 1595 CheckEqual( |
1548 T.Intersect(T.FloatArray, T.Union(T.FloatArray, T.ArrayClass)), | 1596 T.Intersect(T.NumberArray, T.Union(T.NumberArray, T.ArrayClass)), |
1549 T.FloatArray); | 1597 T.NumberArray); |
1550 CheckEqual( | 1598 CheckEqual( |
1551 T.Intersect(T.AnyArray, T.Union(T.Object, T.SmiConstant)), | 1599 T.Intersect(T.AnyArray, T.Union(T.Object, T.SmiConstant)), |
1552 T.AnyArray); | 1600 T.AnyArray); |
1553 CheckEqual( | 1601 CheckEqual( |
1554 T.Intersect(T.Union(T.AnyArray, T.ArrayConstant), T.FloatArray), | 1602 T.Intersect(T.Union(T.AnyArray, T.ArrayConstant), T.NumberArray), |
1555 T.None); | 1603 T.None); |
1556 | 1604 |
1557 // Function-union | 1605 // Function-union |
1558 CheckEqual( | 1606 CheckEqual( |
1559 T.Intersect(T.MethodFunction, T.Union(T.String, T.MethodFunction)), | 1607 T.Intersect(T.MethodFunction, T.Union(T.String, T.MethodFunction)), |
1560 T.MethodFunction); | 1608 T.MethodFunction); |
1561 CheckEqual( | 1609 CheckEqual( |
1562 T.Intersect(T.NumberFunction1, T.Union(T.Object, T.SmiConstant)), | 1610 T.Intersect(T.NumberFunction1, T.Union(T.Object, T.SmiConstant)), |
1563 T.NumberFunction1); | 1611 T.NumberFunction1); |
1564 CheckEqual( | 1612 CheckEqual( |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1742 ZoneTests().Intersect2(); | 1790 ZoneTests().Intersect2(); |
1743 HeapTests().Intersect2(); | 1791 HeapTests().Intersect2(); |
1744 } | 1792 } |
1745 | 1793 |
1746 | 1794 |
1747 TEST(Convert) { | 1795 TEST(Convert) { |
1748 CcTest::InitializeVM(); | 1796 CcTest::InitializeVM(); |
1749 ZoneTests().Convert<HeapType, Handle<HeapType>, Isolate, HeapRep>(); | 1797 ZoneTests().Convert<HeapType, Handle<HeapType>, Isolate, HeapRep>(); |
1750 HeapTests().Convert<Type, Type*, Zone, ZoneRep>(); | 1798 HeapTests().Convert<Type, Type*, Zone, ZoneRep>(); |
1751 } | 1799 } |
OLD | NEW |