Commit 448486ed authored by bmeurer@chromium.org's avatar bmeurer@chromium.org

Use distinct maps for oddballs with special handling in the type system.

R=rossberg@chromium.org

Review URL: https://codereview.chromium.org/227473002

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@20531 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 7a3703db
...@@ -5599,7 +5599,7 @@ class Internals { ...@@ -5599,7 +5599,7 @@ class Internals {
static const int kNullValueRootIndex = 7; static const int kNullValueRootIndex = 7;
static const int kTrueValueRootIndex = 8; static const int kTrueValueRootIndex = 8;
static const int kFalseValueRootIndex = 9; static const int kFalseValueRootIndex = 9;
static const int kEmptyStringRootIndex = 152; static const int kEmptyStringRootIndex = 159;
static const int kNodeClassIdOffset = 1 * kApiPointerSize; static const int kNodeClassIdOffset = 1 * kApiPointerSize;
static const int kNodeFlagsOffset = 1 * kApiPointerSize + 3; static const int kNodeFlagsOffset = 1 * kApiPointerSize + 3;
......
...@@ -1201,7 +1201,7 @@ class BinaryOpICWithAllocationSiteStub V8_FINAL : public PlatformCodeStub { ...@@ -1201,7 +1201,7 @@ class BinaryOpICWithAllocationSiteStub V8_FINAL : public PlatformCodeStub {
Handle<Code> GetCodeCopyFromTemplate(Isolate* isolate, Handle<Code> GetCodeCopyFromTemplate(Isolate* isolate,
Handle<AllocationSite> allocation_site) { Handle<AllocationSite> allocation_site) {
Code::FindAndReplacePattern pattern; Code::FindAndReplacePattern pattern;
pattern.Add(isolate->factory()->oddball_map(), allocation_site); pattern.Add(isolate->factory()->undefined_map(), allocation_site);
return CodeStub::GetCodeCopy(isolate, pattern); return CodeStub::GetCodeCopy(isolate, pattern);
} }
......
...@@ -2757,22 +2757,21 @@ bool Heap::CreateInitialMaps() { ...@@ -2757,22 +2757,21 @@ bool Heap::CreateInitialMaps() {
set_meta_map(new_meta_map); set_meta_map(new_meta_map);
new_meta_map->set_map(new_meta_map); new_meta_map->set_map(new_meta_map);
{ MaybeObject* maybe_obj = { // Partial map allocation
AllocatePartialMap(FIXED_ARRAY_TYPE, kVariableSizeSentinel); #define ALLOCATE_PARTIAL_MAP(instance_type, size, field_name) \
if (!maybe_obj->ToObject(&obj)) return false; { Map* map; \
} if (!AllocatePartialMap((instance_type), (size))->To(&map)) return false;\
set_fixed_array_map(Map::cast(obj)); set_##field_name##_map(map); \
}
{ MaybeObject* maybe_obj = AllocatePartialMap(ODDBALL_TYPE, Oddball::kSize); ALLOCATE_PARTIAL_MAP(FIXED_ARRAY_TYPE, kVariableSizeSentinel, fixed_array);
if (!maybe_obj->ToObject(&obj)) return false; ALLOCATE_PARTIAL_MAP(ODDBALL_TYPE, Oddball::kSize, undefined);
} ALLOCATE_PARTIAL_MAP(ODDBALL_TYPE, Oddball::kSize, null);
set_oddball_map(Map::cast(obj)); ALLOCATE_PARTIAL_MAP(CONSTANT_POOL_ARRAY_TYPE, kVariableSizeSentinel,
constant_pool_array);
{ MaybeObject* maybe_obj = #undef ALLOCATE_PARTIAL_MAP
AllocatePartialMap(CONSTANT_POOL_ARRAY_TYPE, kVariableSizeSentinel);
if (!maybe_obj->ToObject(&obj)) return false;
} }
set_constant_pool_array_map(Map::cast(obj));
// Allocate the empty array. // Allocate the empty array.
{ MaybeObject* maybe_obj = AllocateEmptyFixedArray(); { MaybeObject* maybe_obj = AllocateEmptyFixedArray();
...@@ -2780,13 +2779,13 @@ bool Heap::CreateInitialMaps() { ...@@ -2780,13 +2779,13 @@ bool Heap::CreateInitialMaps() {
} }
set_empty_fixed_array(FixedArray::cast(obj)); set_empty_fixed_array(FixedArray::cast(obj));
{ MaybeObject* maybe_obj = Allocate(oddball_map(), OLD_POINTER_SPACE); { MaybeObject* maybe_obj = Allocate(null_map(), OLD_POINTER_SPACE);
if (!maybe_obj->ToObject(&obj)) return false; if (!maybe_obj->ToObject(&obj)) return false;
} }
set_null_value(Oddball::cast(obj)); set_null_value(Oddball::cast(obj));
Oddball::cast(obj)->set_kind(Oddball::kNull); Oddball::cast(obj)->set_kind(Oddball::kNull);
{ MaybeObject* maybe_obj = Allocate(oddball_map(), OLD_POINTER_SPACE); { MaybeObject* maybe_obj = Allocate(undefined_map(), OLD_POINTER_SPACE);
if (!maybe_obj->ToObject(&obj)) return false; if (!maybe_obj->ToObject(&obj)) return false;
} }
set_undefined_value(Oddball::cast(obj)); set_undefined_value(Oddball::cast(obj));
...@@ -2817,10 +2816,15 @@ bool Heap::CreateInitialMaps() { ...@@ -2817,10 +2816,15 @@ bool Heap::CreateInitialMaps() {
fixed_array_map()->init_back_pointer(undefined_value()); fixed_array_map()->init_back_pointer(undefined_value());
fixed_array_map()->set_instance_descriptors(empty_descriptor_array()); fixed_array_map()->set_instance_descriptors(empty_descriptor_array());
oddball_map()->set_code_cache(empty_fixed_array()); undefined_map()->set_code_cache(empty_fixed_array());
oddball_map()->set_dependent_code(DependentCode::cast(empty_fixed_array())); undefined_map()->set_dependent_code(DependentCode::cast(empty_fixed_array()));
oddball_map()->init_back_pointer(undefined_value()); undefined_map()->init_back_pointer(undefined_value());
oddball_map()->set_instance_descriptors(empty_descriptor_array()); undefined_map()->set_instance_descriptors(empty_descriptor_array());
null_map()->set_code_cache(empty_fixed_array());
null_map()->set_dependent_code(DependentCode::cast(empty_fixed_array()));
null_map()->init_back_pointer(undefined_value());
null_map()->set_instance_descriptors(empty_descriptor_array());
constant_pool_array_map()->set_code_cache(empty_fixed_array()); constant_pool_array_map()->set_code_cache(empty_fixed_array());
constant_pool_array_map()->set_dependent_code( constant_pool_array_map()->set_dependent_code(
...@@ -2835,8 +2839,11 @@ bool Heap::CreateInitialMaps() { ...@@ -2835,8 +2839,11 @@ bool Heap::CreateInitialMaps() {
fixed_array_map()->set_prototype(null_value()); fixed_array_map()->set_prototype(null_value());
fixed_array_map()->set_constructor(null_value()); fixed_array_map()->set_constructor(null_value());
oddball_map()->set_prototype(null_value()); undefined_map()->set_prototype(null_value());
oddball_map()->set_constructor(null_value()); undefined_map()->set_constructor(null_value());
null_map()->set_prototype(null_value());
null_map()->set_constructor(null_value());
constant_pool_array_map()->set_prototype(null_value()); constant_pool_array_map()->set_prototype(null_value());
constant_pool_array_map()->set_constructor(null_value()); constant_pool_array_map()->set_constructor(null_value());
...@@ -2859,6 +2866,13 @@ bool Heap::CreateInitialMaps() { ...@@ -2859,6 +2866,13 @@ bool Heap::CreateInitialMaps() {
ALLOCATE_MAP(SYMBOL_TYPE, Symbol::kSize, symbol) ALLOCATE_MAP(SYMBOL_TYPE, Symbol::kSize, symbol)
ALLOCATE_MAP(FOREIGN_TYPE, Foreign::kSize, foreign) ALLOCATE_MAP(FOREIGN_TYPE, Foreign::kSize, foreign)
ALLOCATE_MAP(ODDBALL_TYPE, Oddball::kSize, the_hole);
ALLOCATE_MAP(ODDBALL_TYPE, Oddball::kSize, boolean);
ALLOCATE_MAP(ODDBALL_TYPE, Oddball::kSize, uninitialized);
ALLOCATE_MAP(ODDBALL_TYPE, Oddball::kSize, arguments_marker);
ALLOCATE_MAP(ODDBALL_TYPE, Oddball::kSize, no_interceptor_result_sentinel);
ALLOCATE_MAP(ODDBALL_TYPE, Oddball::kSize, termination_exception);
for (unsigned i = 0; i < ARRAY_SIZE(string_type_table); i++) { for (unsigned i = 0; i < ARRAY_SIZE(string_type_table); i++) {
const StringTypeTable& entry = string_type_table[i]; const StringTypeTable& entry = string_type_table[i];
{ MaybeObject* maybe_obj = AllocateMap(entry.type, entry.size); { MaybeObject* maybe_obj = AllocateMap(entry.type, entry.size);
...@@ -3042,11 +3056,12 @@ MaybeObject* Heap::AllocateAllocationSite() { ...@@ -3042,11 +3056,12 @@ MaybeObject* Heap::AllocateAllocationSite() {
} }
MaybeObject* Heap::CreateOddball(const char* to_string, MaybeObject* Heap::CreateOddball(Map* map,
const char* to_string,
Object* to_number, Object* to_number,
byte kind) { byte kind) {
Object* result; Object* result;
{ MaybeObject* maybe_result = Allocate(oddball_map(), OLD_POINTER_SPACE); { MaybeObject* maybe_result = Allocate(map, OLD_POINTER_SPACE);
if (!maybe_result->ToObject(&result)) return maybe_result; if (!maybe_result->ToObject(&result)) return maybe_result;
} }
return Oddball::cast(result)->Initialize(this, to_string, to_number, kind); return Oddball::cast(result)->Initialize(this, to_string, to_number, kind);
...@@ -3171,54 +3186,61 @@ bool Heap::CreateInitialObjects() { ...@@ -3171,54 +3186,61 @@ bool Heap::CreateInitialObjects() {
if (!maybe_obj->ToObject(&obj)) return false; if (!maybe_obj->ToObject(&obj)) return false;
} }
{ MaybeObject* maybe_obj = CreateOddball("true", { MaybeObject* maybe_obj = CreateOddball(boolean_map(),
"true",
Smi::FromInt(1), Smi::FromInt(1),
Oddball::kTrue); Oddball::kTrue);
if (!maybe_obj->ToObject(&obj)) return false; if (!maybe_obj->ToObject(&obj)) return false;
} }
set_true_value(Oddball::cast(obj)); set_true_value(Oddball::cast(obj));
{ MaybeObject* maybe_obj = CreateOddball("false", { MaybeObject* maybe_obj = CreateOddball(boolean_map(),
"false",
Smi::FromInt(0), Smi::FromInt(0),
Oddball::kFalse); Oddball::kFalse);
if (!maybe_obj->ToObject(&obj)) return false; if (!maybe_obj->ToObject(&obj)) return false;
} }
set_false_value(Oddball::cast(obj)); set_false_value(Oddball::cast(obj));
{ MaybeObject* maybe_obj = CreateOddball("hole", { MaybeObject* maybe_obj = CreateOddball(the_hole_map(),
"hole",
Smi::FromInt(-1), Smi::FromInt(-1),
Oddball::kTheHole); Oddball::kTheHole);
if (!maybe_obj->ToObject(&obj)) return false; if (!maybe_obj->ToObject(&obj)) return false;
} }
set_the_hole_value(Oddball::cast(obj)); set_the_hole_value(Oddball::cast(obj));
{ MaybeObject* maybe_obj = CreateOddball("uninitialized", { MaybeObject* maybe_obj = CreateOddball(uninitialized_map(),
"uninitialized",
Smi::FromInt(-1), Smi::FromInt(-1),
Oddball::kUninitialized); Oddball::kUninitialized);
if (!maybe_obj->ToObject(&obj)) return false; if (!maybe_obj->ToObject(&obj)) return false;
} }
set_uninitialized_value(Oddball::cast(obj)); set_uninitialized_value(Oddball::cast(obj));
{ MaybeObject* maybe_obj = CreateOddball("arguments_marker", { MaybeObject* maybe_obj = CreateOddball(arguments_marker_map(),
"arguments_marker",
Smi::FromInt(-4), Smi::FromInt(-4),
Oddball::kArgumentMarker); Oddball::kArgumentMarker);
if (!maybe_obj->ToObject(&obj)) return false; if (!maybe_obj->ToObject(&obj)) return false;
} }
set_arguments_marker(Oddball::cast(obj)); set_arguments_marker(Oddball::cast(obj));
{ MaybeObject* maybe_obj = CreateOddball("no_interceptor_result_sentinel", { MaybeObject* maybe_obj = CreateOddball(no_interceptor_result_sentinel_map(),
"no_interceptor_result_sentinel",
Smi::FromInt(-2), Smi::FromInt(-2),
Oddball::kOther); Oddball::kOther);
if (!maybe_obj->ToObject(&obj)) return false; if (!maybe_obj->ToObject(&obj)) return false;
} }
set_no_interceptor_result_sentinel(obj); set_no_interceptor_result_sentinel(Oddball::cast(obj));
{ MaybeObject* maybe_obj = CreateOddball("termination_exception", { MaybeObject* maybe_obj = CreateOddball(termination_exception_map(),
"termination_exception",
Smi::FromInt(-3), Smi::FromInt(-3),
Oddball::kOther); Oddball::kOther);
if (!maybe_obj->ToObject(&obj)) return false; if (!maybe_obj->ToObject(&obj)) return false;
} }
set_termination_exception(obj); set_termination_exception(Oddball::cast(obj));
for (unsigned i = 0; i < ARRAY_SIZE(constant_string_table); i++) { for (unsigned i = 0; i < ARRAY_SIZE(constant_string_table); i++) {
{ MaybeObject* maybe_obj = { MaybeObject* maybe_obj =
......
...@@ -72,7 +72,7 @@ namespace internal { ...@@ -72,7 +72,7 @@ namespace internal {
V(Map, fixed_cow_array_map, FixedCOWArrayMap) \ V(Map, fixed_cow_array_map, FixedCOWArrayMap) \
V(Map, fixed_double_array_map, FixedDoubleArrayMap) \ V(Map, fixed_double_array_map, FixedDoubleArrayMap) \
V(Map, constant_pool_array_map, ConstantPoolArrayMap) \ V(Map, constant_pool_array_map, ConstantPoolArrayMap) \
V(Object, no_interceptor_result_sentinel, NoInterceptorResultSentinel) \ V(Oddball, no_interceptor_result_sentinel, NoInterceptorResultSentinel) \
V(Map, hash_table_map, HashTableMap) \ V(Map, hash_table_map, HashTableMap) \
V(FixedArray, empty_fixed_array, EmptyFixedArray) \ V(FixedArray, empty_fixed_array, EmptyFixedArray) \
V(ByteArray, empty_byte_array, EmptyByteArray) \ V(ByteArray, empty_byte_array, EmptyByteArray) \
...@@ -89,7 +89,7 @@ namespace internal { ...@@ -89,7 +89,7 @@ namespace internal {
V(FixedArray, single_character_string_cache, SingleCharacterStringCache) \ V(FixedArray, single_character_string_cache, SingleCharacterStringCache) \
V(FixedArray, string_split_cache, StringSplitCache) \ V(FixedArray, string_split_cache, StringSplitCache) \
V(FixedArray, regexp_multiple_cache, RegExpMultipleCache) \ V(FixedArray, regexp_multiple_cache, RegExpMultipleCache) \
V(Object, termination_exception, TerminationException) \ V(Oddball, termination_exception, TerminationException) \
V(Smi, hash_seed, HashSeed) \ V(Smi, hash_seed, HashSeed) \
V(Map, symbol_map, SymbolMap) \ V(Map, symbol_map, SymbolMap) \
V(Map, string_map, StringMap) \ V(Map, string_map, StringMap) \
...@@ -179,7 +179,14 @@ namespace internal { ...@@ -179,7 +179,14 @@ namespace internal {
V(Map, block_context_map, BlockContextMap) \ V(Map, block_context_map, BlockContextMap) \
V(Map, module_context_map, ModuleContextMap) \ V(Map, module_context_map, ModuleContextMap) \
V(Map, global_context_map, GlobalContextMap) \ V(Map, global_context_map, GlobalContextMap) \
V(Map, oddball_map, OddballMap) \ V(Map, undefined_map, UndefinedMap) \
V(Map, the_hole_map, TheHoleMap) \
V(Map, null_map, NullMap) \
V(Map, boolean_map, BooleanMap) \
V(Map, uninitialized_map, UninitializedMap) \
V(Map, arguments_marker_map, ArgumentsMarkerMap) \
V(Map, no_interceptor_result_sentinel_map, NoInterceptorResultSentinelMap) \
V(Map, termination_exception_map, TerminationExceptionMap) \
V(Map, message_object_map, JSMessageObjectMap) \ V(Map, message_object_map, JSMessageObjectMap) \
V(Map, foreign_map, ForeignMap) \ V(Map, foreign_map, ForeignMap) \
V(HeapNumber, nan_value, NanValue) \ V(HeapNumber, nan_value, NanValue) \
...@@ -266,7 +273,11 @@ namespace internal { ...@@ -266,7 +273,11 @@ namespace internal {
V(block_context_map) \ V(block_context_map) \
V(module_context_map) \ V(module_context_map) \
V(global_context_map) \ V(global_context_map) \
V(oddball_map) \ V(undefined_map) \
V(the_hole_map) \
V(null_map) \
V(boolean_map) \
V(uninitialized_map) \
V(message_object_map) \ V(message_object_map) \
V(foreign_map) \ V(foreign_map) \
V(neander_map) V(neander_map)
...@@ -2213,7 +2224,8 @@ class Heap { ...@@ -2213,7 +2224,8 @@ class Heap {
void CreateFixedStubs(); void CreateFixedStubs();
MUST_USE_RESULT MaybeObject* CreateOddball(const char* to_string, MUST_USE_RESULT MaybeObject* CreateOddball(Map* map,
const char* to_string,
Object* to_number, Object* to_number,
byte kind); byte kind);
......
...@@ -692,7 +692,7 @@ Handle<HeapType> IC::CurrentTypeOf(Handle<Object> object, Isolate* isolate) { ...@@ -692,7 +692,7 @@ Handle<HeapType> IC::CurrentTypeOf(Handle<Object> object, Isolate* isolate) {
Handle<Map> IC::TypeToMap(HeapType* type, Isolate* isolate) { Handle<Map> IC::TypeToMap(HeapType* type, Isolate* isolate) {
if (type->Is(HeapType::Number())) if (type->Is(HeapType::Number()))
return isolate->factory()->heap_number_map(); return isolate->factory()->heap_number_map();
if (type->Is(HeapType::Boolean())) return isolate->factory()->oddball_map(); if (type->Is(HeapType::Boolean())) return isolate->factory()->boolean_map();
if (type->IsConstant()) { if (type->IsConstant()) {
return handle(Handle<JSGlobalObject>::cast(type->AsConstant())->map()); return handle(Handle<JSGlobalObject>::cast(type->AsConstant())->map());
} }
......
...@@ -596,10 +596,11 @@ void JSBuiltinsObject::JSBuiltinsObjectVerify() { ...@@ -596,10 +596,11 @@ void JSBuiltinsObject::JSBuiltinsObjectVerify() {
void Oddball::OddballVerify() { void Oddball::OddballVerify() {
CHECK(IsOddball()); CHECK(IsOddball());
Heap* heap = GetHeap();
VerifyHeapPointer(to_string()); VerifyHeapPointer(to_string());
Object* number = to_number(); Object* number = to_number();
if (number->IsHeapObject()) { if (number->IsHeapObject()) {
CHECK(number == HeapObject::cast(number)->GetHeap()->nan_value()); CHECK(number == heap->nan_value());
} else { } else {
CHECK(number->IsSmi()); CHECK(number->IsSmi());
int value = Smi::cast(number)->value(); int value = Smi::cast(number)->value();
...@@ -608,6 +609,26 @@ void Oddball::OddballVerify() { ...@@ -608,6 +609,26 @@ void Oddball::OddballVerify() {
CHECK_LE(value, 1); CHECK_LE(value, 1);
CHECK(value >= kLeastHiddenOddballNumber); CHECK(value >= kLeastHiddenOddballNumber);
} }
if (map() == heap->undefined_map()) {
CHECK(this == heap->undefined_value());
} else if (map() == heap->the_hole_map()) {
CHECK(this == heap->the_hole_value());
} else if (map() == heap->null_map()) {
CHECK(this == heap->null_value());
} else if (map() == heap->boolean_map()) {
CHECK(this == heap->true_value() ||
this == heap->false_value());
} else if (map() == heap->uninitialized_map()) {
CHECK(this == heap->uninitialized_value());
} else if (map() == heap->no_interceptor_result_sentinel_map()) {
CHECK(this == heap->no_interceptor_result_sentinel());
} else if (map() == heap->arguments_marker_map()) {
CHECK(this == heap->arguments_marker());
} else if (map() == heap->termination_exception_map()) {
CHECK(this == heap->termination_exception());
} else {
UNREACHABLE();
}
} }
......
...@@ -140,14 +140,6 @@ int TypeImpl<Config>::LubBitset(i::Object* value) { ...@@ -140,14 +140,6 @@ int TypeImpl<Config>::LubBitset(i::Object* value) {
value->ToInt32(&i) ? (Smi::IsValid(i) ? kSignedSmall : kOtherSigned32) : value->ToInt32(&i) ? (Smi::IsValid(i) ? kSignedSmall : kOtherSigned32) :
value->ToUint32(&u) ? kUnsigned32 : kFloat); value->ToUint32(&u) ? kUnsigned32 : kFloat);
} }
if (map->instance_type() == ODDBALL_TYPE) {
if (value->IsUndefined()) return kUndefined;
if (value->IsNull()) return kNull;
if (value->IsBoolean()) return kBoolean;
if (value->IsTheHole()) return kAny; // TODO(rossberg): kNone?
if (value->IsUninitialized()) return kNone;
UNREACHABLE();
}
return LubBitset(map); return LubBitset(map);
} }
...@@ -178,8 +170,18 @@ int TypeImpl<Config>::LubBitset(i::Map* map) { ...@@ -178,8 +170,18 @@ int TypeImpl<Config>::LubBitset(i::Map* map) {
return kString; return kString;
case SYMBOL_TYPE: case SYMBOL_TYPE:
return kSymbol; return kSymbol;
case ODDBALL_TYPE: case ODDBALL_TYPE: {
return kOddball; Heap* heap = map->GetHeap();
if (map == heap->undefined_map()) return kUndefined;
if (map == heap->the_hole_map()) return kAny; // TODO(rossberg): kNone?
if (map == heap->null_map()) return kNull;
if (map == heap->boolean_map()) return kBoolean;
if (map == heap->uninitialized_map()) return kNone;
ASSERT(map == heap->no_interceptor_result_sentinel_map() ||
map == heap->termination_exception_map() ||
map == heap->arguments_marker_map());
return kInternal & kTaggedPtr;
}
case HEAP_NUMBER_TYPE: case HEAP_NUMBER_TYPE:
return kFloat & kTaggedPtr; return kFloat & kTaggedPtr;
case JS_VALUE_TYPE: case JS_VALUE_TYPE:
...@@ -251,8 +253,7 @@ template<class Config> ...@@ -251,8 +253,7 @@ template<class Config>
typename TypeImpl<Config>::TypeHandle TypeImpl<Config>::NowOf( typename TypeImpl<Config>::TypeHandle TypeImpl<Config>::NowOf(
i::Object* value, Region* region) { i::Object* value, Region* region) {
if (value->IsSmi() || if (value->IsSmi() ||
i::HeapObject::cast(value)->map()->instance_type() == HEAP_NUMBER_TYPE || i::HeapObject::cast(value)->map()->instance_type() == HEAP_NUMBER_TYPE) {
i::HeapObject::cast(value)->map()->instance_type() == ODDBALL_TYPE) {
return Of(value, region); return Of(value, region);
} }
return Class(i::handle(i::HeapObject::cast(value)->map()), region); return Class(i::handle(i::HeapObject::cast(value)->map()), region);
......
...@@ -24,7 +24,6 @@ namespace internal { ...@@ -24,7 +24,6 @@ namespace internal {
// None <= T // None <= T
// T <= Any // T <= Any
// //
// Oddball = Boolean \/ Null \/ Undefined
// Number = Signed32 \/ Unsigned32 \/ Double // Number = Signed32 \/ Unsigned32 \/ Double
// Smi <= Signed32 // Smi <= Signed32
// Name = String \/ Symbol // Name = String \/ Symbol
...@@ -142,7 +141,6 @@ namespace internal { ...@@ -142,7 +141,6 @@ namespace internal {
V(Proxy, 1 << 15 | REPRESENTATION(kTaggedPtr)) \ V(Proxy, 1 << 15 | REPRESENTATION(kTaggedPtr)) \
V(Internal, 1 << 16 | REPRESENTATION(kTagged | kUntagged)) \ V(Internal, 1 << 16 | REPRESENTATION(kTagged | kUntagged)) \
\ \
V(Oddball, kBoolean | kNull | kUndefined) \
V(Signed32, kSignedSmall | kOtherSigned32) \ V(Signed32, kSignedSmall | kOtherSigned32) \
V(Number, kSigned32 | kUnsigned32 | kFloat) \ V(Number, kSigned32 | kUnsigned32 | kFloat) \
V(String, kInternalizedString | kOtherString) \ V(String, kInternalizedString | kOtherString) \
...@@ -154,7 +152,8 @@ namespace internal { ...@@ -154,7 +152,8 @@ namespace internal {
V(Detectable, kDetectableReceiver | kNumber | kName) \ V(Detectable, kDetectableReceiver | kNumber | kName) \
V(Object, kDetectableObject | kUndetectable) \ V(Object, kDetectableObject | kUndetectable) \
V(Receiver, kObject | kProxy) \ V(Receiver, kObject | kProxy) \
V(NonNumber, kOddball | kName | kReceiver | kInternal) \ V(NonNumber, kBoolean | kName | kNull | kReceiver | \
kUndefined | kInternal) \
V(Any, kNumber | kNonNumber) V(Any, kNumber | kNonNumber)
#define BITSET_TYPE_LIST(V) \ #define BITSET_TYPE_LIST(V) \
......
...@@ -38,7 +38,6 @@ class Types { ...@@ -38,7 +38,6 @@ class Types {
Semantic(Type::Semantic(region)), Semantic(Type::Semantic(region)),
None(Type::None(region)), None(Type::None(region)),
Any(Type::Any(region)), Any(Type::Any(region)),
Oddball(Type::Oddball(region)),
Boolean(Type::Boolean(region)), Boolean(Type::Boolean(region)),
Null(Type::Null(region)), Null(Type::Null(region)),
Undefined(Type::Undefined(region)), Undefined(Type::Undefined(region)),
...@@ -78,7 +77,6 @@ class Types { ...@@ -78,7 +77,6 @@ class Types {
TypeHandle Semantic; TypeHandle Semantic;
TypeHandle None; TypeHandle None;
TypeHandle Any; TypeHandle Any;
TypeHandle Oddball;
TypeHandle Boolean; TypeHandle Boolean;
TypeHandle Null; TypeHandle Null;
TypeHandle Undefined; TypeHandle Undefined;
...@@ -351,10 +349,6 @@ struct Tests : Rep { ...@@ -351,10 +349,6 @@ struct Tests : Rep {
CheckSub(T.None, T.Number); CheckSub(T.None, T.Number);
CheckSub(T.None, T.Any); CheckSub(T.None, T.Any);
CheckSub(T.Oddball, T.Any);
CheckSub(T.Boolean, T.Oddball);
CheckSub(T.Null, T.Oddball);
CheckSub(T.Undefined, T.Oddball);
CheckUnordered(T.Boolean, T.Null); CheckUnordered(T.Boolean, T.Null);
CheckUnordered(T.Undefined, T.Null); CheckUnordered(T.Undefined, T.Null);
CheckUnordered(T.Boolean, T.Undefined); CheckUnordered(T.Boolean, T.Undefined);
...@@ -420,10 +414,6 @@ struct Tests : Rep { ...@@ -420,10 +414,6 @@ struct Tests : Rep {
CheckOverlap(T.Any, T.Any, T.Semantic); CheckOverlap(T.Any, T.Any, T.Semantic);
CheckOverlap(T.Object, T.Object, T.Semantic); CheckOverlap(T.Object, T.Object, T.Semantic);
CheckOverlap(T.Oddball, T.Any, T.Semantic);
CheckOverlap(T.Boolean, T.Oddball, T.Semantic);
CheckOverlap(T.Null, T.Oddball, T.Semantic);
CheckOverlap(T.Undefined, T.Oddball, T.Semantic);
CheckDisjoint(T.Boolean, T.Null, T.Semantic); CheckDisjoint(T.Boolean, T.Null, T.Semantic);
CheckDisjoint(T.Undefined, T.Null, T.Semantic); CheckDisjoint(T.Undefined, T.Null, T.Semantic);
CheckDisjoint(T.Boolean, T.Undefined, T.Semantic); CheckDisjoint(T.Boolean, T.Undefined, T.Semantic);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment