Index: test/cctest/test-types.cc |
diff --git a/test/cctest/test-types.cc b/test/cctest/test-types.cc |
index d5852e0c0ff1feafcdeeafeb86f08da9d29523b4..3cdfdad7e4a851296e8593a79c36aaa1bb5c3c5d 100644 |
--- a/test/cctest/test-types.cc |
+++ b/test/cctest/test-types.cc |
@@ -33,14 +33,12 @@ using namespace v8::internal; |
// Testing auxiliaries (breaking the Type abstraction). |
static bool IsBitset(Type* type) { return type->IsSmi(); } |
static bool IsClass(Type* type) { return type->IsMap(); } |
+static bool IsConstant(Type* type) { return type->IsBox(); } |
static bool IsUnion(Type* type) { return type->IsFixedArray(); } |
-static bool IsConstant(Type* type) { |
- return !(IsBitset(type) || IsClass(type) || IsUnion(type)); |
-} |
static int AsBitset(Type* type) { return Smi::cast(type)->value(); } |
static Map* AsClass(Type* type) { return Map::cast(type); } |
-static HeapObject* AsConstant(Type* type) { return HeapObject::cast(type); } |
+static Object* AsConstant(Type* type) { return Box::cast(type)->value(); } |
static FixedArray* AsUnion(Type* type) { return FixedArray::cast(type); } |
class HandlifiedTypes { |
@@ -68,11 +66,13 @@ class HandlifiedTypes { |
object_map(isolate->factory()->NewMap(JS_OBJECT_TYPE, 3 * kPointerSize)), |
array_map(isolate->factory()->NewMap(JS_ARRAY_TYPE, 4 * kPointerSize)), |
isolate_(isolate) { |
+ smi = handle(Smi::FromInt(666), isolate); |
object1 = isolate->factory()->NewJSObjectFromMap(object_map); |
object2 = isolate->factory()->NewJSObjectFromMap(object_map); |
array = isolate->factory()->NewJSArray(20); |
ObjectClass = handle(Type::Class(object_map), isolate); |
ArrayClass = handle(Type::Class(array_map), isolate); |
+ SmiConstant = handle(Type::Constant(smi, isolate), isolate); |
ObjectConstant1 = handle(Type::Constant(object1), isolate); |
ObjectConstant2 = handle(Type::Constant(object2), isolate); |
ArrayConstant = handle(Type::Constant(array), isolate); |
@@ -100,6 +100,8 @@ class HandlifiedTypes { |
Handle<Type> ObjectClass; |
Handle<Type> ArrayClass; |
+ |
+ Handle<Type> SmiConstant; |
Handle<Type> ObjectConstant1; |
Handle<Type> ObjectConstant2; |
Handle<Type> ArrayConstant; |
@@ -107,6 +109,7 @@ class HandlifiedTypes { |
Handle<Map> object_map; |
Handle<Map> array_map; |
+ Handle<v8::internal::Smi> smi; |
Handle<JSObject> object1; |
Handle<JSObject> object2; |
Handle<JSArray> array; |
@@ -165,10 +168,12 @@ TEST(Constant) { |
HandleScope scope(isolate); |
HandlifiedTypes T(isolate); |
+ CHECK(IsConstant(*T.SmiConstant)); |
CHECK(IsConstant(*T.ObjectConstant1)); |
CHECK(IsConstant(*T.ObjectConstant2)); |
CHECK(IsConstant(*T.ArrayConstant)); |
+ CHECK(*T.smi == AsConstant(*T.SmiConstant)); |
CHECK(*T.object1 == AsConstant(*T.ObjectConstant1)); |
CHECK(*T.object2 == AsConstant(*T.ObjectConstant2)); |
CHECK(*T.object1 != AsConstant(*T.ObjectConstant2)); |
@@ -250,6 +255,8 @@ TEST(Is) { |
CheckSub(T.ArrayClass, T.Object); |
CheckUnordered(T.ObjectClass, T.ArrayClass); |
+ CheckSub(T.SmiConstant, T.Smi); |
+ CheckSub(T.SmiConstant, T.Number); |
CheckSub(T.ObjectConstant1, T.Object); |
CheckSub(T.ObjectConstant2, T.Object); |
CheckSub(T.ArrayConstant, T.Object); |
@@ -333,6 +340,9 @@ TEST(Maybe) { |
CheckOverlap(T.ArrayClass, T.ArrayClass); |
CheckDisjoint(T.ObjectClass, T.ArrayClass); |
+ CheckOverlap(T.SmiConstant, T.Smi); |
+ CheckOverlap(T.SmiConstant, T.Number); |
+ CheckDisjoint(T.SmiConstant, T.Double); |
CheckOverlap(T.ObjectConstant1, T.Object); |
CheckOverlap(T.ObjectConstant2, T.Object); |
CheckOverlap(T.ArrayConstant, T.Object); |
@@ -422,9 +432,11 @@ TEST(Union) { |
CheckDisjoint(T.Union(T.ObjectClass, T.String), T.Number); |
// Bitset-constant |
+ CHECK(IsBitset(Type::Union(T.SmiConstant, T.Number))); |
CHECK(IsBitset(Type::Union(T.ObjectConstant1, T.Object))); |
CHECK(IsUnion(Type::Union(T.ObjectConstant2, T.Number))); |
+ CheckEqual(T.Union(T.SmiConstant, T.Number), T.Number); |
CheckEqual(T.Union(T.ObjectConstant1, T.Object), T.Object); |
CheckSub(T.Union(T.ObjectConstant1, T.Number), T.Any); |
CheckSub(T.Union(T.ObjectConstant1, T.Smi), T.Union(T.Object, T.Number)); |