// static
bool ZoneTypeConfig::is_bitset(Type* type) {
- return reinterpret_cast<intptr_t>(type) & 1;
+ return reinterpret_cast<uintptr_t>(type) & 1;
}
// static
-int ZoneTypeConfig::as_bitset(Type* type) {
+ZoneTypeConfig::Type::bitset ZoneTypeConfig::as_bitset(Type* type) {
DCHECK(is_bitset(type));
- return static_cast<int>(reinterpret_cast<intptr_t>(type) >> 1);
+ return static_cast<Type::bitset>(reinterpret_cast<uintptr_t>(type) ^ 1u);
}
// static
-ZoneTypeConfig::Type* ZoneTypeConfig::from_bitset(int bitset) {
- return reinterpret_cast<Type*>((bitset << 1) | 1);
+ZoneTypeConfig::Type* ZoneTypeConfig::from_bitset(Type::bitset bitset) {
+ return reinterpret_cast<Type*>(static_cast<uintptr_t>(bitset | 1u));
}
// static
-ZoneTypeConfig::Type* ZoneTypeConfig::from_bitset(int bitset, Zone* Zone) {
+ZoneTypeConfig::Type* ZoneTypeConfig::from_bitset(
+ Type::bitset bitset, Zone* Zone) {
return from_bitset(bitset);
}
// static
-int HeapTypeConfig::as_bitset(Type* type) {
- return i::Smi::cast(type)->value();
+HeapTypeConfig::Type::bitset HeapTypeConfig::as_bitset(Type* type) {
+ // TODO(rossberg): Breaks the Smi abstraction. Fix once there is a better way.
+ return static_cast<Type::bitset>(reinterpret_cast<uintptr_t>(type));
}
// static
-HeapTypeConfig::Type* HeapTypeConfig::from_bitset(int bitset) {
- return Type::cast(i::Smi::FromInt(bitset));
+HeapTypeConfig::Type* HeapTypeConfig::from_bitset(Type::bitset bitset) {
+ // TODO(rossberg): Breaks the Smi abstraction. Fix once there is a better way.
+ return reinterpret_cast<Type*>(static_cast<uintptr_t>(bitset));
}
// static
i::Handle<HeapTypeConfig::Type> HeapTypeConfig::from_bitset(
- int bitset, Isolate* isolate) {
+ Type::bitset bitset, Isolate* isolate) {
return i::handle(from_bitset(bitset), isolate);
}