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 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
264 // All but the first are non-bitsets and thus would yield kNone anyway. | 264 // All but the first are non-bitsets and thus would yield kNone anyway. |
265 return Config::union_get(this->AsUnion(), 0)->GlbBitset(); | 265 return Config::union_get(this->AsUnion(), 0)->GlbBitset(); |
266 } else { | 266 } else { |
267 return kNone; | 267 return kNone; |
268 } | 268 } |
269 } | 269 } |
270 | 270 |
271 | 271 |
272 // Most precise _current_ type of a value (usually its class). | 272 // Most precise _current_ type of a value (usually its class). |
273 template<class Config> | 273 template<class Config> |
274 typename TypeImpl<Config>::TypeHandle TypeImpl<Config>::OfCurrently( | 274 typename TypeImpl<Config>::TypeHandle TypeImpl<Config>::NowOf( |
275 i::Handle<i::Object> value, Region* region) { | 275 i::Handle<i::Object> value, Region* region) { |
276 if (value->IsSmi() || | 276 if (value->IsSmi() || |
277 i::HeapObject::cast(*value)->map()->instance_type() == HEAP_NUMBER_TYPE || | 277 i::HeapObject::cast(*value)->map()->instance_type() == HEAP_NUMBER_TYPE || |
278 i::HeapObject::cast(*value)->map()->instance_type() == ODDBALL_TYPE) { | 278 i::HeapObject::cast(*value)->map()->instance_type() == ODDBALL_TYPE) { |
279 return Of(value, region); | 279 return Of(value, region); |
280 } | 280 } |
281 return Class(i::handle(i::HeapObject::cast(*value)->map()), region); | 281 return Class(i::handle(i::HeapObject::cast(*value)->map()), region); |
282 } | 282 } |
283 | 283 |
284 | 284 |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
319 if (this->IsBitset()) break; // Fast fail, only first field is a bitset. | 319 if (this->IsBitset()) break; // Fast fail, only first field is a bitset. |
320 } | 320 } |
321 return false; | 321 return false; |
322 } | 322 } |
323 | 323 |
324 return false; | 324 return false; |
325 } | 325 } |
326 | 326 |
327 | 327 |
328 template<class Config> | 328 template<class Config> |
329 bool TypeImpl<Config>::IsCurrently(TypeImpl* that) { | 329 bool TypeImpl<Config>::NowIs(TypeImpl* that) { |
330 return this->Is(that) || | 330 return this->Is(that) || |
331 (this->IsConstant() && that->IsClass() && | 331 (this->IsConstant() && that->IsClass() && |
332 this->AsConstant()->IsHeapObject() && | 332 this->AsConstant()->IsHeapObject() && |
333 i::HeapObject::cast(*this->AsConstant())->map() == *that->AsClass()); | 333 i::HeapObject::cast(*this->AsConstant())->map() == *that->AsClass()); |
334 } | 334 } |
335 | 335 |
336 | 336 |
337 // Check this overlaps that. | 337 // Check this overlaps that. |
338 template<class Config> | 338 template<class Config> |
339 bool TypeImpl<Config>::Maybe(TypeImpl* that) { | 339 bool TypeImpl<Config>::Maybe(TypeImpl* that) { |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
371 } | 371 } |
372 if (this->IsConstant()) { | 372 if (this->IsConstant()) { |
373 return that->IsConstant() && *this->AsConstant() == *that->AsConstant(); | 373 return that->IsConstant() && *this->AsConstant() == *that->AsConstant(); |
374 } | 374 } |
375 | 375 |
376 return false; | 376 return false; |
377 } | 377 } |
378 | 378 |
379 | 379 |
380 template<class Config> | 380 template<class Config> |
| 381 bool TypeImpl<Config>::Contains(i::Object* value) { |
| 382 if (this->IsConstant()) { |
| 383 return *this->AsConstant() == value; |
| 384 } |
| 385 return Config::from_bitset(LubBitset(value))->Is(this); |
| 386 } |
| 387 |
| 388 |
| 389 template<class Config> |
| 390 bool TypeImpl<Config>::NowContains(i::Object* value) { |
| 391 return this->Contains(value) || |
| 392 (this->IsClass() && value->IsHeapObject() && |
| 393 *this->AsClass() == i::HeapObject::cast(value)->map()); |
| 394 } |
| 395 |
| 396 |
| 397 template<class Config> |
381 bool TypeImpl<Config>::InUnion(UnionedHandle unioned, int current_size) { | 398 bool TypeImpl<Config>::InUnion(UnionedHandle unioned, int current_size) { |
382 ASSERT(!this->IsUnion()); | 399 ASSERT(!this->IsUnion()); |
383 for (int i = 0; i < current_size; ++i) { | 400 for (int i = 0; i < current_size; ++i) { |
384 TypeHandle type = Config::union_get(unioned, i); | 401 TypeHandle type = Config::union_get(unioned, i); |
385 if (this->Is(type)) return true; | 402 if (this->Is(type)) return true; |
386 } | 403 } |
387 return false; | 404 return false; |
388 } | 405 } |
389 | 406 |
390 | 407 |
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
687 | 704 |
688 template TypeImpl<ZoneTypeConfig>::TypeHandle | 705 template TypeImpl<ZoneTypeConfig>::TypeHandle |
689 TypeImpl<ZoneTypeConfig>::Convert<HeapType>( | 706 TypeImpl<ZoneTypeConfig>::Convert<HeapType>( |
690 TypeImpl<HeapTypeConfig>::TypeHandle, TypeImpl<ZoneTypeConfig>::Region*); | 707 TypeImpl<HeapTypeConfig>::TypeHandle, TypeImpl<ZoneTypeConfig>::Region*); |
691 template TypeImpl<HeapTypeConfig>::TypeHandle | 708 template TypeImpl<HeapTypeConfig>::TypeHandle |
692 TypeImpl<HeapTypeConfig>::Convert<Type>( | 709 TypeImpl<HeapTypeConfig>::Convert<Type>( |
693 TypeImpl<ZoneTypeConfig>::TypeHandle, TypeImpl<HeapTypeConfig>::Region*); | 710 TypeImpl<ZoneTypeConfig>::TypeHandle, TypeImpl<HeapTypeConfig>::Region*); |
694 | 711 |
695 | 712 |
696 } } // namespace v8::internal | 713 } } // namespace v8::internal |
OLD | NEW |