| Index: src/types.h
|
| diff --git a/src/types.h b/src/types.h
|
| index acd199d9c45062ab3d24c79f269fcfbef6141a4a..25ed6e8f5612ca8667cf261d691f526ad377321c 100644
|
| --- a/src/types.h
|
| +++ b/src/types.h
|
| @@ -48,8 +48,8 @@ namespace internal {
|
| // T <= Any
|
| //
|
| // Oddball = Boolean \/ Null \/ Undefined
|
| -// Number = Integer32 \/ Double
|
| -// Integer31 < Integer32
|
| +// Number = Signed32 \/ Unsigned32 \/ Double
|
| +// Smi <= Signed32
|
| // Name = String \/ Symbol
|
| // UniqueName = InternalizedString \/ Symbol
|
| // InternalizedString < String
|
| @@ -60,6 +60,7 @@ namespace internal {
|
| // Receiver = Object \/ Proxy
|
| // Array < Object
|
| // Function < Object
|
| +// RegExp < Object
|
| //
|
| // Class(map) < T iff instance_type(map) < T
|
| // Constant(x) < T iff instance_type(map(x)) < T
|
| @@ -83,6 +84,8 @@ namespace internal {
|
| // lattice (e.g., splitting up number types further) without invalidating any
|
| // existing assumptions or tests.
|
| //
|
| +// Consequently, do not use pointer equality for type tests, always use Is!
|
| +//
|
| // Internally, all 'primitive' types, and their unions, are represented as
|
| // bitsets via smis. Class is a heap pointer to the respective map. Only
|
| // Constant's, or unions containing Class'es or Constant's, require allocation.
|
| @@ -104,9 +107,11 @@ class Type : public Object {
|
| static Type* Undefined() { return from_bitset(kUndefined); }
|
|
|
| static Type* Number() { return from_bitset(kNumber); }
|
| - static Type* Integer31() { return from_bitset(kInteger31); }
|
| - static Type* Integer32() { return from_bitset(kInteger32); }
|
| + static Type* Smi() { return from_bitset(kSmi); }
|
| + static Type* Signed32() { return from_bitset(kSigned32); }
|
| + static Type* Unsigned32() { return from_bitset(kUnsigned32); }
|
| static Type* Double() { return from_bitset(kDouble); }
|
| + static Type* NumberOrString() { return from_bitset(kNumberOrString); }
|
|
|
| static Type* Name() { return from_bitset(kName); }
|
| static Type* UniqueName() { return from_bitset(kUniqueName); }
|
| @@ -119,6 +124,7 @@ class Type : public Object {
|
| static Type* Undetectable() { return from_bitset(kUndetectable); }
|
| static Type* Array() { return from_bitset(kArray); }
|
| static Type* Function() { return from_bitset(kFunction); }
|
| + static Type* RegExp() { return from_bitset(kRegExp); }
|
| static Type* Proxy() { return from_bitset(kProxy); }
|
|
|
| static Type* Class(Handle<Map> map) { return from_handle(map); }
|
| @@ -188,25 +194,28 @@ class Type : public Object {
|
| kNull = 1 << 0,
|
| kUndefined = 1 << 1,
|
| kBoolean = 1 << 2,
|
| - kInteger31 = 1 << 3,
|
| - kOtherInteger = 1 << 4,
|
| - kDouble = 1 << 5,
|
| - kSymbol = 1 << 6,
|
| - kInternalizedString = 1 << 7,
|
| - kOtherString = 1 << 8,
|
| - kUndetectable = 1 << 9,
|
| - kArray = 1 << 10,
|
| - kFunction = 1 << 11,
|
| - kOtherObject = 1 << 12,
|
| - kProxy = 1 << 13,
|
| + kSmi = 1 << 3,
|
| + kOtherSigned32 = 1 << 4,
|
| + kUnsigned32 = 1 << 5,
|
| + kDouble = 1 << 6,
|
| + kSymbol = 1 << 7,
|
| + kInternalizedString = 1 << 8,
|
| + kOtherString = 1 << 9,
|
| + kUndetectable = 1 << 10,
|
| + kArray = 1 << 11,
|
| + kFunction = 1 << 12,
|
| + kRegExp = 1 << 13,
|
| + kOtherObject = 1 << 14,
|
| + kProxy = 1 << 15,
|
|
|
| kOddball = kBoolean | kNull | kUndefined,
|
| - kInteger32 = kInteger31 | kOtherInteger,
|
| - kNumber = kInteger32 | kDouble,
|
| + kSigned32 = kSmi | kOtherSigned32,
|
| + kNumber = kSigned32 | kUnsigned32 | kDouble,
|
| kString = kInternalizedString | kOtherString,
|
| kUniqueName = kSymbol | kInternalizedString,
|
| kName = kSymbol | kString,
|
| - kObject = kUndetectable | kArray | kFunction | kOtherObject,
|
| + kNumberOrString = kNumber | kString,
|
| + kObject = kUndetectable | kArray | kFunction | kRegExp | kOtherObject,
|
| kReceiver = kObject | kProxy,
|
| kAllocated = kDouble | kName | kReceiver,
|
| kAny = kOddball | kNumber | kAllocated,
|
|
|