| Index: test/cctest/test-types.cc
|
| diff --git a/test/cctest/test-types.cc b/test/cctest/test-types.cc
|
| index cdaa95bdae5133e64db785e8733f47d578901089..e45a1c7da2b72a63617db35279e59c2f0d2c745b 100644
|
| --- a/test/cctest/test-types.cc
|
| +++ b/test/cctest/test-types.cc
|
| @@ -176,49 +176,56 @@ class Types {
|
|
|
| // Testing auxiliaries (breaking the Type abstraction).
|
| struct ZoneRep {
|
| - static bool IsTagged(Type* t, int tag) {
|
| - return !IsBitset(t)
|
| - && reinterpret_cast<intptr_t>(AsTagged(t)->at(0)) == tag;
|
| + struct Struct { int tag; int length; void* args[1]; };
|
| +
|
| + static bool IsStruct(Type* t, int tag) {
|
| + return !IsBitset(t) && AsStruct(t)->tag == tag;
|
| }
|
| static bool IsBitset(Type* t) { return reinterpret_cast<intptr_t>(t) & 1; }
|
| - static bool IsClass(Type* t) { return IsTagged(t, 0); }
|
| - static bool IsConstant(Type* t) { return IsTagged(t, 1); }
|
| - static bool IsUnion(Type* t) { return IsTagged(t, 2); }
|
| + static bool IsClass(Type* t) { return IsStruct(t, 0); }
|
| + static bool IsConstant(Type* t) { return IsStruct(t, 1); }
|
| + static bool IsUnion(Type* t) { return IsStruct(t, 2); }
|
|
|
| - static ZoneList<void*>* AsTagged(Type* t) {
|
| - return reinterpret_cast<ZoneList<void*>*>(t);
|
| + static Struct* AsStruct(Type* t) {
|
| + return reinterpret_cast<Struct*>(t);
|
| }
|
| static int AsBitset(Type* t) {
|
| return static_cast<int>(reinterpret_cast<intptr_t>(t) >> 1);
|
| }
|
| static Map* AsClass(Type* t) {
|
| - return *reinterpret_cast<Map**>(AsTagged(t)->at(2));
|
| + return *static_cast<Map**>(AsStruct(t)->args[1]);
|
| }
|
| static Object* AsConstant(Type* t) {
|
| - return *reinterpret_cast<Object**>(AsTagged(t)->at(2));
|
| + return *static_cast<Object**>(AsStruct(t)->args[1]);
|
| }
|
| - static ZoneList<Type*>* AsUnion(Type* t) {
|
| - return reinterpret_cast<ZoneList<Type*>*>(AsTagged(t));
|
| + static Struct* AsUnion(Type* t) {
|
| + return AsStruct(t);
|
| }
|
| + static int Length(Struct* structured) { return structured->length; }
|
|
|
| static Zone* ToRegion(Zone* zone, Isolate* isolate) { return zone; }
|
| };
|
|
|
|
|
| struct HeapRep {
|
| + typedef FixedArray Struct;
|
| +
|
| + static bool IsStruct(Handle<HeapType> t, int tag) {
|
| + return t->IsFixedArray() && Smi::cast(AsStruct(t)->get(0))->value() == tag;
|
| + }
|
| static bool IsBitset(Handle<HeapType> t) { return t->IsSmi(); }
|
| static bool IsClass(Handle<HeapType> t) { return t->IsMap(); }
|
| static bool IsConstant(Handle<HeapType> t) { return t->IsBox(); }
|
| - static bool IsUnion(Handle<HeapType> t) { return t->IsFixedArray(); }
|
| + static bool IsUnion(Handle<HeapType> t) { return IsStruct(t, 2); }
|
|
|
| + static Struct* AsStruct(Handle<HeapType> t) { return FixedArray::cast(*t); }
|
| static int AsBitset(Handle<HeapType> t) { return Smi::cast(*t)->value(); }
|
| static Map* AsClass(Handle<HeapType> t) { return Map::cast(*t); }
|
| static Object* AsConstant(Handle<HeapType> t) {
|
| return Box::cast(*t)->value();
|
| }
|
| - static FixedArray* AsUnion(Handle<HeapType> t) {
|
| - return FixedArray::cast(*t);
|
| - }
|
| + static Struct* AsUnion(Handle<HeapType> t) { return AsStruct(t); }
|
| + static int Length(Struct* structured) { return structured->length() - 1; }
|
|
|
| static Isolate* ToRegion(Zone* zone, Isolate* isolate) { return isolate; }
|
| };
|
| @@ -252,7 +259,8 @@ struct Tests : Rep {
|
| } else if (Rep::IsConstant(type1)) {
|
| CHECK_EQ(Rep::AsConstant(type1), Rep::AsConstant(type2));
|
| } else if (Rep::IsUnion(type1)) {
|
| - CHECK_EQ(Rep::AsUnion(type1)->length(), Rep::AsUnion(type2)->length());
|
| + CHECK_EQ(
|
| + Rep::Length(Rep::AsUnion(type1)), Rep::Length(Rep::AsUnion(type2)));
|
| }
|
| CHECK(type1->Is(type2));
|
| CHECK(type2->Is(type1));
|
|
|