| Index: src/types.h
|
| diff --git a/src/types.h b/src/types.h
|
| index 31aa9512f4c3a44433412fc836df800ea5efe524..bc6e580a7515b990cf8137ee5a27205a86117641 100644
|
| --- a/src/types.h
|
| +++ b/src/types.h
|
| @@ -94,39 +94,54 @@ namespace internal {
|
| // The type representation is heap-allocated, so cannot (currently) be used in
|
| // a parallel compilation context.
|
|
|
| +
|
| +#define PRIMITIVE_TYPE_LIST(V) \
|
| + V(None, 0) \
|
| + V(Null, 1 << 0) \
|
| + V(Undefined, 1 << 1) \
|
| + V(Boolean, 1 << 2) \
|
| + V(Smi, 1 << 3) \
|
| + V(OtherSigned32, 1 << 4) \
|
| + V(Unsigned32, 1 << 5) \
|
| + V(Double, 1 << 6) \
|
| + V(Symbol, 1 << 7) \
|
| + V(InternalizedString, 1 << 8) \
|
| + V(OtherString, 1 << 9) \
|
| + V(Undetectable, 1 << 10) \
|
| + V(Array, 1 << 11) \
|
| + V(Function, 1 << 12) \
|
| + V(RegExp, 1 << 13) \
|
| + V(OtherObject, 1 << 14) \
|
| + V(Proxy, 1 << 15) \
|
| + V(Internal, 1 << 16)
|
| +
|
| +#define COMPOSED_TYPE_LIST(V) \
|
| + V(Oddball, kBoolean | kNull | kUndefined) \
|
| + V(Signed32, kSmi | kOtherSigned32) \
|
| + V(Number, kSigned32 | kUnsigned32 | kDouble) \
|
| + V(String, kInternalizedString | kOtherString) \
|
| + V(UniqueName, kSymbol | kInternalizedString) \
|
| + V(Name, kSymbol | kString) \
|
| + V(NumberOrString, kNumber | kString) \
|
| + V(Object, kUndetectable | kArray | kFunction | \
|
| + kRegExp | kOtherObject) \
|
| + V(Receiver, kObject | kProxy) \
|
| + V(Allocated, kDouble | kName | kReceiver) \
|
| + V(Any, kOddball | kNumber | kAllocated | kInternal) \
|
| + V(Detectable, kAllocated - kUndetectable)
|
| +
|
| +#define TYPE_LIST(V) \
|
| + PRIMITIVE_TYPE_LIST(V) \
|
| + COMPOSED_TYPE_LIST(V)
|
| +
|
| +
|
| +
|
| class Type : public Object {
|
| public:
|
| - static Type* None() { return from_bitset(kNone); }
|
| - static Type* Any() { return from_bitset(kAny); }
|
| - static Type* Allocated() { return from_bitset(kAllocated); }
|
| - static Type* Detectable() { return from_bitset(kDetectable); }
|
| -
|
| - static Type* Oddball() { return from_bitset(kOddball); }
|
| - static Type* Boolean() { return from_bitset(kBoolean); }
|
| - static Type* Null() { return from_bitset(kNull); }
|
| - static Type* Undefined() { return from_bitset(kUndefined); }
|
| -
|
| - static Type* Number() { return from_bitset(kNumber); }
|
| - 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); }
|
| - static Type* String() { return from_bitset(kString); }
|
| - static Type* InternalizedString() { return from_bitset(kInternalizedString); }
|
| - static Type* Symbol() { return from_bitset(kSymbol); }
|
| -
|
| - static Type* Receiver() { return from_bitset(kReceiver); }
|
| - static Type* Object() { return from_bitset(kObject); }
|
| - 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* Internal() { return from_bitset(kInternal); }
|
| + #define DEFINE_TYPE_CONSTRUCTOR(type, value) \
|
| + static Type* type() { return from_bitset(k##type); }
|
| + TYPE_LIST(DEFINE_TYPE_CONSTRUCTOR)
|
| + #undef DEFINE_TYPE_CONSTRUCTOR
|
|
|
| static Type* Class(Handle<Map> map) { return from_handle(map); }
|
| static Type* Constant(Handle<HeapObject> value) {
|
| @@ -191,6 +206,11 @@ class Type : public Object {
|
| return t;
|
| }
|
|
|
| +#ifdef OBJECT_PRINT
|
| + void TypePrint();
|
| + void TypePrint(FILE* out);
|
| +#endif
|
| +
|
| private:
|
| // A union is a fixed array containing types. Invariants:
|
| // - its length is at least 2
|
| @@ -199,37 +219,10 @@ class Type : public Object {
|
| typedef FixedArray Unioned;
|
|
|
| enum {
|
| - kNull = 1 << 0,
|
| - kUndefined = 1 << 1,
|
| - kBoolean = 1 << 2,
|
| - 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,
|
| - kInternal = 1 << 16,
|
| -
|
| - kOddball = kBoolean | kNull | kUndefined,
|
| - kSigned32 = kSmi | kOtherSigned32,
|
| - kNumber = kSigned32 | kUnsigned32 | kDouble,
|
| - kString = kInternalizedString | kOtherString,
|
| - kUniqueName = kSymbol | kInternalizedString,
|
| - kName = kSymbol | kString,
|
| - kNumberOrString = kNumber | kString,
|
| - kObject = kUndetectable | kArray | kFunction | kRegExp | kOtherObject,
|
| - kReceiver = kObject | kProxy,
|
| - kAllocated = kDouble | kName | kReceiver,
|
| - kAny = kOddball | kNumber | kAllocated | kInternal,
|
| - kDetectable = kAllocated - kUndetectable,
|
| - kNone = 0
|
| + #define DECLARE_TYPE(type, value) k##type = (value),
|
| + TYPE_LIST(DECLARE_TYPE)
|
| + #undef DECLARE_TYPE
|
| + kUnusedEOL = 0
|
| };
|
|
|
| bool is_bitset() { return this->IsSmi(); }
|
| @@ -272,6 +265,30 @@ class Type : public Object {
|
| int ExtendUnion(Handle<Unioned> unioned, int current_size);
|
| int ExtendIntersection(
|
| Handle<Unioned> unioned, Handle<Type> type, int current_size);
|
| +
|
| + static const char* GetComposedName(int type) {
|
| + switch (type) {
|
| + #define PRINT_COMPOSED_TYPE(type, value) \
|
| + case k##type: \
|
| + return # type;
|
| + COMPOSED_TYPE_LIST(PRINT_COMPOSED_TYPE)
|
| + #undef PRINT_COMPOSED_TYPE
|
| + }
|
| + return NULL;
|
| + }
|
| +
|
| + static const char* GetPrimitiveName(int type) {
|
| + switch (type) {
|
| + #define PRINT_PRIMITIVE_TYPE(type, value) \
|
| + case k##type: \
|
| + return # type;
|
| + PRIMITIVE_TYPE_LIST(PRINT_PRIMITIVE_TYPE)
|
| + #undef PRINT_PRIMITIVE_TYPE
|
| + default:
|
| + UNREACHABLE();
|
| + return "InvalidType";
|
| + }
|
| + }
|
| };
|
|
|
| } } // namespace v8::internal
|
|
|