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 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
236 if (this->IsBitset()) return Iterator<i::Object>(); | 236 if (this->IsBitset()) return Iterator<i::Object>(); |
237 return Iterator<i::Object>(Config::handle(this)); | 237 return Iterator<i::Object>(Config::handle(this)); |
238 } | 238 } |
239 | 239 |
240 static TypeImpl* cast(typename Config::Base* object) { | 240 static TypeImpl* cast(typename Config::Base* object) { |
241 TypeImpl* t = static_cast<TypeImpl*>(object); | 241 TypeImpl* t = static_cast<TypeImpl*>(object); |
242 ASSERT(t->IsBitset() || t->IsClass() || t->IsConstant() || t->IsUnion()); | 242 ASSERT(t->IsBitset() || t->IsClass() || t->IsConstant() || t->IsUnion()); |
243 return t; | 243 return t; |
244 } | 244 } |
245 | 245 |
| 246 template<class OtherTypeImpl> |
| 247 static TypeHandle Convert( |
| 248 typename OtherTypeImpl::TypeHandle type, Region* region); |
| 249 |
246 #ifdef OBJECT_PRINT | 250 #ifdef OBJECT_PRINT |
247 void TypePrint(); | 251 void TypePrint(); |
248 void TypePrint(FILE* out); | 252 void TypePrint(FILE* out); |
249 #endif | 253 #endif |
250 | 254 |
251 private: | 255 private: |
252 template<class> friend class Iterator; | 256 template<class> friend class Iterator; |
| 257 template<class> friend class TypeImpl; |
253 | 258 |
254 // A union is a fixed array containing types. Invariants: | 259 // A union is a fixed array containing types. Invariants: |
255 // - its length is at least 2 | 260 // - its length is at least 2 |
256 // - at most one field is a bitset, and it must go into index 0 | 261 // - at most one field is a bitset, and it must go into index 0 |
257 // - no field is a union | 262 // - no field is a union |
258 typedef typename Config::Unioned Unioned; | 263 typedef typename Config::Unioned Unioned; |
259 typedef typename Config::template Handle<Unioned>::type UnionedHandle; | 264 typedef typename Config::template Handle<Unioned>::type UnionedHandle; |
260 | 265 |
261 enum { | 266 enum { |
262 #define DECLARE_TYPE(type, value) k##type = (value), | 267 #define DECLARE_TYPE(type, value) k##type = (value), |
263 BITSET_TYPE_LIST(DECLARE_TYPE) | 268 BITSET_TYPE_LIST(DECLARE_TYPE) |
264 #undef DECLARE_TYPE | 269 #undef DECLARE_TYPE |
265 kUnusedEOL = 0 | 270 kUnusedEOL = 0 |
266 }; | 271 }; |
267 | 272 |
268 bool IsNone() { return this == None(); } | 273 bool IsNone() { return this == None(); } |
269 bool IsAny() { return this == Any(); } | 274 bool IsAny() { return this == Any(); } |
270 bool IsBitset() { return Config::is_bitset(this); } | 275 bool IsBitset() { return Config::is_bitset(this); } |
271 bool IsUnion() { return Config::is_union(this); } | 276 bool IsUnion() { return Config::is_union(this); } |
272 int AsBitset() { return Config::as_bitset(this); } | 277 int AsBitset() { return Config::as_bitset(this); } |
273 UnionedHandle AsUnion() { return Config::as_union(this); } | 278 UnionedHandle AsUnion() { return Config::as_union(this); } |
274 | 279 |
| 280 static int UnionLength(UnionedHandle unioned) { |
| 281 return Config::union_length(unioned); |
| 282 } |
| 283 static TypeHandle UnionGet(UnionedHandle unioned, int i) { |
| 284 return Config::union_get(unioned, i); |
| 285 } |
| 286 |
275 bool SlowIs(TypeImpl* that); | 287 bool SlowIs(TypeImpl* that); |
276 | 288 |
277 int LubBitset(); // least upper bound that's a bitset | 289 int LubBitset(); // least upper bound that's a bitset |
278 int GlbBitset(); // greatest lower bound that's a bitset | 290 int GlbBitset(); // greatest lower bound that's a bitset |
279 | 291 |
280 static int LubBitset(i::Object* value); | 292 static int LubBitset(i::Object* value); |
281 static int LubBitset(i::Map* map); | 293 static int LubBitset(i::Map* map); |
282 | 294 |
283 bool InUnion(UnionedHandle unioned, int current_size); | 295 bool InUnion(UnionedHandle unioned, int current_size); |
284 static int ExtendUnion( | 296 static int ExtendUnion( |
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
549 return BoundsImpl(lower, upper); | 561 return BoundsImpl(lower, upper); |
550 } | 562 } |
551 }; | 563 }; |
552 | 564 |
553 typedef BoundsImpl<ZoneTypeConfig> Bounds; | 565 typedef BoundsImpl<ZoneTypeConfig> Bounds; |
554 | 566 |
555 | 567 |
556 } } // namespace v8::internal | 568 } } // namespace v8::internal |
557 | 569 |
558 #endif // V8_TYPES_H_ | 570 #endif // V8_TYPES_H_ |
OLD | NEW |