Chromium Code Reviews| Index: src/types.h |
| diff --git a/src/types.h b/src/types.h |
| index a2bcda65791646c57464a5d85a908564efc5587a..7a5397ca274ba560bde36de03c87501b4989c109 100644 |
| --- a/src/types.h |
| +++ b/src/types.h |
| @@ -94,6 +94,40 @@ 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) \ |
| + V(Oddball, kBoolean | kNull | kUndefined) \ |
|
rossberg
2013/07/03 14:52:54
Nit: Maybe insert an empty line before this one.
|
| + 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) \ |
|
rossberg
2013/07/03 14:52:54
Aha, cheating with indentation!
|
| + V(Receiver, kObject | kProxy) \ |
| + V(Allocated, kDouble | kName | kReceiver) \ |
| + V(Any, kOddball | kNumber | kAllocated | kInternal) \ |
| + V(Detectable, kAllocated - kUndetectable) |
| + |
| + |
| class Type : public Object { |
| public: |
| static Type* None() { return from_bitset(kNone); } |
|
rossberg
2013/07/03 14:52:54
Can't you generate all these functions from the ma
|
| @@ -192,39 +226,26 @@ 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 |
| + // Declare const for all primitive types. |
| + #define DECLARE_PRIMITIVE_TYPE(type, value) k##type = (value), |
| + PRIMITIVE_TYPE_LIST(DECLARE_PRIMITIVE_TYPE) |
|
rossberg
2013/07/03 14:52:54
Nit: maybe indent this by 2
oliv
2013/07/05 12:29:06
i'd rather not, since it looks very strange if the
|
| + #undef DECLARE_OPCODE |
| + kUnusedEOL = 0 |
|
rossberg
2013/07/03 14:52:54
What's that for?
oliv
2013/07/05 12:29:06
you cannot end the enum definition with a comma...
|
| }; |
| + const char* GetPrimitiveName() { |
| + switch (as_bitset()) { |
|
rossberg
2013/07/03 14:52:54
Yeah, that does not fly. Any combination of primit
|
| + #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"; |
| + } |
| + } |
| + |
| bool is_bitset() { return this->IsSmi(); } |
| bool is_class() { return this->IsMap(); } |
| bool is_constant() { return this->IsBox(); } |
| @@ -265,6 +286,9 @@ class Type : public Object { |
| int ExtendUnion(Handle<Unioned> unioned, int current_size); |
| int ExtendIntersection( |
| Handle<Unioned> unioned, Handle<Type> type, int current_size); |
| + |
| + static void PrintName(StringStream* stream, Type* type); |
| + static SmartArrayPointer<const char> GetName(Type* type); |
| }; |
| } } // namespace v8::internal |