| Index: src/types.cc
|
| diff --git a/src/types.cc b/src/types.cc
|
| index 16696ea282b67518a4e4877cb42c3c29bb50b8a3..af45fa41cb012d02610aa89d8c3218fc5db184cf 100644
|
| --- a/src/types.cc
|
| +++ b/src/types.cc
|
| @@ -30,8 +30,7 @@ static bool deq(double x, double y) {
|
|
|
| // The largest bitset subsumed by this type.
|
| template<class Config>
|
| -typename TypeImpl<Config>::bitset
|
| -TypeImpl<Config>::BitsetType::Glb(TypeImpl* type) {
|
| +int TypeImpl<Config>::BitsetType::Glb(TypeImpl* type) {
|
| DisallowHeapAllocation no_allocation;
|
| if (type->IsBitset()) {
|
| return type->AsBitset();
|
| @@ -47,18 +46,17 @@ TypeImpl<Config>::BitsetType::Glb(TypeImpl* type) {
|
|
|
| // The smallest bitset subsuming this type.
|
| template<class Config>
|
| -typename TypeImpl<Config>::bitset
|
| -TypeImpl<Config>::BitsetType::Lub(TypeImpl* type) {
|
| +int TypeImpl<Config>::BitsetType::Lub(TypeImpl* type) {
|
| DisallowHeapAllocation no_allocation;
|
| if (type->IsBitset()) {
|
| return type->AsBitset();
|
| } else if (type->IsUnion()) {
|
| UnionHandle unioned = handle(type->AsUnion());
|
| - bitset result = kNone;
|
| + int bitset = kNone;
|
| for (int i = 0; i < unioned->Length(); ++i) {
|
| - result |= unioned->Get(i)->BitsetLub();
|
| + bitset |= unioned->Get(i)->BitsetLub();
|
| }
|
| - return result;
|
| + return bitset;
|
| } else if (type->IsClass()) {
|
| // Little hack to avoid the need for a region for handlification here...
|
| return Config::is_class(type) ? Lub(*Config::as_class(type)) :
|
| @@ -82,18 +80,17 @@ TypeImpl<Config>::BitsetType::Lub(TypeImpl* type) {
|
|
|
| // The smallest bitset subsuming this type, ignoring explicit bounds.
|
| template<class Config>
|
| -typename TypeImpl<Config>::bitset
|
| -TypeImpl<Config>::BitsetType::InherentLub(TypeImpl* type) {
|
| +int TypeImpl<Config>::BitsetType::InherentLub(TypeImpl* type) {
|
| DisallowHeapAllocation no_allocation;
|
| if (type->IsBitset()) {
|
| return type->AsBitset();
|
| } else if (type->IsUnion()) {
|
| UnionHandle unioned = handle(type->AsUnion());
|
| - bitset result = kNone;
|
| + int bitset = kNone;
|
| for (int i = 0; i < unioned->Length(); ++i) {
|
| - result |= unioned->Get(i)->InherentBitsetLub();
|
| + bitset |= unioned->Get(i)->InherentBitsetLub();
|
| }
|
| - return result;
|
| + return bitset;
|
| } else if (type->IsClass()) {
|
| return Lub(*type->AsClass()->Map());
|
| } else if (type->IsConstant()) {
|
| @@ -114,8 +111,7 @@ TypeImpl<Config>::BitsetType::InherentLub(TypeImpl* type) {
|
|
|
|
|
| template<class Config>
|
| -typename TypeImpl<Config>::bitset
|
| -TypeImpl<Config>::BitsetType::Lub(i::Object* value) {
|
| +int TypeImpl<Config>::BitsetType::Lub(i::Object* value) {
|
| DisallowHeapAllocation no_allocation;
|
| if (value->IsNumber()) {
|
| return Lub(value->Number()) & (value->IsSmi() ? kTaggedInt : kTaggedPtr);
|
| @@ -125,8 +121,7 @@ TypeImpl<Config>::BitsetType::Lub(i::Object* value) {
|
|
|
|
|
| template<class Config>
|
| -typename TypeImpl<Config>::bitset
|
| -TypeImpl<Config>::BitsetType::Lub(double value) {
|
| +int TypeImpl<Config>::BitsetType::Lub(double value) {
|
| DisallowHeapAllocation no_allocation;
|
| if (i::IsMinusZero(value)) return kMinusZero;
|
| if (std::isnan(value)) return kNaN;
|
| @@ -137,21 +132,19 @@ TypeImpl<Config>::BitsetType::Lub(double value) {
|
|
|
|
|
| template<class Config>
|
| -typename TypeImpl<Config>::bitset
|
| -TypeImpl<Config>::BitsetType::Lub(double min, double max) {
|
| +int TypeImpl<Config>::BitsetType::Lub(double min, double max) {
|
| DisallowHeapAllocation no_allocation;
|
| DCHECK(dle(min, max));
|
| if (deq(min, max)) return BitsetType::Lub(min); // Singleton range.
|
| - bitset result = BitsetType::kNumber ^ SEMANTIC(BitsetType::kNaN);
|
| - if (dle(0, min) || max < 0) result ^= SEMANTIC(BitsetType::kMinusZero);
|
| - return result;
|
| + int bitset = BitsetType::kNumber ^ SEMANTIC(BitsetType::kNaN);
|
| + if (dle(0, min) || max < 0) bitset ^= SEMANTIC(BitsetType::kMinusZero);
|
| + return bitset;
|
| // TODO(neis): Could refine this further by doing more checks on min/max.
|
| }
|
|
|
|
|
| template<class Config>
|
| -typename TypeImpl<Config>::bitset
|
| -TypeImpl<Config>::BitsetType::Lub(int32_t value) {
|
| +int TypeImpl<Config>::BitsetType::Lub(int32_t value) {
|
| if (value >= 0x40000000) {
|
| return i::SmiValuesAre31Bits() ? kOtherUnsigned31 : kUnsignedSmall;
|
| }
|
| @@ -162,8 +155,7 @@ TypeImpl<Config>::BitsetType::Lub(int32_t value) {
|
|
|
|
|
| template<class Config>
|
| -typename TypeImpl<Config>::bitset
|
| -TypeImpl<Config>::BitsetType::Lub(uint32_t value) {
|
| +int TypeImpl<Config>::BitsetType::Lub(uint32_t value) {
|
| DisallowHeapAllocation no_allocation;
|
| if (value >= 0x80000000u) return kOtherUnsigned32;
|
| if (value >= 0x40000000u) {
|
| @@ -174,8 +166,7 @@ TypeImpl<Config>::BitsetType::Lub(uint32_t value) {
|
|
|
|
|
| template<class Config>
|
| -typename TypeImpl<Config>::bitset
|
| -TypeImpl<Config>::BitsetType::Lub(i::Map* map) {
|
| +int TypeImpl<Config>::BitsetType::Lub(i::Map* map) {
|
| DisallowHeapAllocation no_allocation;
|
| switch (map->instance_type()) {
|
| case STRING_TYPE:
|
| @@ -466,8 +457,8 @@ bool TypeImpl<Config>::UnionType::Wellformed() {
|
|
|
| template<class Config>
|
| typename TypeImpl<Config>::TypeHandle TypeImpl<Config>::Rebound(
|
| - bitset bitset_bound, Region* region) {
|
| - TypeHandle bound = BitsetType::New(bitset_bound, region);
|
| + int bitset, Region* region) {
|
| + TypeHandle bound = BitsetType::New(bitset, region);
|
| if (this->IsClass()) {
|
| return ClassType::New(this->AsClass()->Map(), bound, region);
|
| } else if (this->IsConstant()) {
|
| @@ -495,16 +486,16 @@ typename TypeImpl<Config>::TypeHandle TypeImpl<Config>::Rebound(
|
|
|
|
|
| template<class Config>
|
| -typename TypeImpl<Config>::bitset TypeImpl<Config>::BoundBy(TypeImpl* that) {
|
| +int TypeImpl<Config>::BoundBy(TypeImpl* that) {
|
| DCHECK(!this->IsUnion());
|
| if (that->IsUnion()) {
|
| UnionType* unioned = that->AsUnion();
|
| int length = unioned->Length();
|
| - bitset result = BitsetType::kNone;
|
| + int bitset = BitsetType::kNone;
|
| for (int i = 0; i < length; ++i) {
|
| - result |= BoundBy(unioned->Get(i)->unhandle());
|
| + bitset |= BoundBy(unioned->Get(i)->unhandle());
|
| }
|
| - return result;
|
| + return bitset;
|
| } else if (that->IsClass() && this->IsClass() &&
|
| *this->AsClass()->Map() == *that->AsClass()->Map()) {
|
| return that->BitsetLub();
|
| @@ -524,7 +515,7 @@ typename TypeImpl<Config>::bitset TypeImpl<Config>::BoundBy(TypeImpl* that) {
|
|
|
| template<class Config>
|
| int TypeImpl<Config>::IndexInUnion(
|
| - bitset bound, UnionHandle unioned, int current_size) {
|
| + int bound, UnionHandle unioned, int current_size) {
|
| DCHECK(!this->IsUnion());
|
| for (int i = 0; i < current_size; ++i) {
|
| TypeHandle that = unioned->Get(i);
|
| @@ -554,7 +545,7 @@ int TypeImpl<Config>::ExtendUnion(
|
| UnionHandle result, int size, TypeHandle type,
|
| TypeHandle other, bool is_intersect, Region* region) {
|
| if (type->IsUnion()) {
|
| - UnionHandle unioned = Config::template cast<UnionType>(type);
|
| + UnionHandle unioned = handle(type->AsUnion());
|
| for (int i = 0; i < unioned->Length(); ++i) {
|
| TypeHandle type_i = unioned->Get(i);
|
| DCHECK(i == 0 || !(type_i->IsBitset() || type_i->Is(unioned->Get(0))));
|
| @@ -565,10 +556,10 @@ int TypeImpl<Config>::ExtendUnion(
|
| } else if (!type->IsBitset()) {
|
| DCHECK(type->IsClass() || type->IsConstant() || type->IsRange() ||
|
| type->IsContext() || type->IsArray() || type->IsFunction());
|
| - bitset inherent_bound = type->InherentBitsetLub();
|
| - bitset old_bound = type->BitsetLub();
|
| - bitset other_bound = type->BoundBy(other->unhandle()) & inherent_bound;
|
| - bitset new_bound =
|
| + int inherent_bound = type->InherentBitsetLub();
|
| + int old_bound = type->BitsetLub();
|
| + int other_bound = type->BoundBy(other->unhandle()) & inherent_bound;
|
| + int new_bound =
|
| is_intersect ? (old_bound & other_bound) : (old_bound | other_bound);
|
| if (new_bound != BitsetType::kNone) {
|
| int i = type->IndexInUnion(new_bound, result, size);
|
| @@ -577,7 +568,7 @@ int TypeImpl<Config>::ExtendUnion(
|
| } else if (result->Get(i)->IsBitset()) {
|
| return size; // Already fully subsumed.
|
| } else {
|
| - bitset type_i_bound = result->Get(i)->BitsetLub();
|
| + int type_i_bound = result->Get(i)->BitsetLub();
|
| new_bound |= type_i_bound;
|
| if (new_bound == type_i_bound) return size;
|
| }
|
| @@ -616,14 +607,14 @@ typename TypeImpl<Config>::TypeHandle TypeImpl<Config>::Union(
|
| if (!type2->IsBitset()) {
|
| size += (type2->IsUnion() ? type2->AsUnion()->Length() : 1);
|
| }
|
| - bitset bits = type1->BitsetGlb() | type2->BitsetGlb();
|
| - if (bits != BitsetType::kNone) ++size;
|
| + int bitset = type1->BitsetGlb() | type2->BitsetGlb();
|
| + if (bitset != BitsetType::kNone) ++size;
|
| DCHECK(size >= 1);
|
|
|
| UnionHandle unioned = UnionType::New(size, region);
|
| size = 0;
|
| - if (bits != BitsetType::kNone) {
|
| - unioned->Set(size++, BitsetType::New(bits, region));
|
| + if (bitset != BitsetType::kNone) {
|
| + unioned->Set(size++, BitsetType::New(bitset, region));
|
| }
|
| size = ExtendUnion(unioned, size, type1, type2, false, region);
|
| size = ExtendUnion(unioned, size, type2, type1, false, region);
|
| @@ -665,14 +656,14 @@ typename TypeImpl<Config>::TypeHandle TypeImpl<Config>::Intersect(
|
| if (!type2->IsBitset()) {
|
| size += (type2->IsUnion() ? type2->AsUnion()->Length() : 1);
|
| }
|
| - bitset bits = type1->BitsetGlb() & type2->BitsetGlb();
|
| - if (bits != BitsetType::kNone) ++size;
|
| + int bitset = type1->BitsetGlb() & type2->BitsetGlb();
|
| + if (bitset != BitsetType::kNone) ++size;
|
| DCHECK(size >= 1);
|
|
|
| UnionHandle unioned = UnionType::New(size, region);
|
| size = 0;
|
| - if (bits != BitsetType::kNone) {
|
| - unioned->Set(size++, BitsetType::New(bits, region));
|
| + if (bitset != BitsetType::kNone) {
|
| + unioned->Set(size++, BitsetType::New(bitset, region));
|
| }
|
| size = ExtendUnion(unioned, size, type1, type2, true, region);
|
| size = ExtendUnion(unioned, size, type2, type1, true, region);
|
| @@ -781,7 +772,7 @@ void TypeImpl<Config>::Iterator<T>::Advance() {
|
| DisallowHeapAllocation no_allocation;
|
| ++index_;
|
| if (type_->IsUnion()) {
|
| - UnionHandle unioned = Config::template cast<UnionType>(type_);
|
| + UnionHandle unioned = handle(type_->AsUnion());
|
| for (; index_ < unioned->Length(); ++index_) {
|
| if (matches(unioned->Get(index_))) return;
|
| }
|
| @@ -850,8 +841,8 @@ typename TypeImpl<Config>::TypeHandle TypeImpl<Config>::Convert(
|
| // Printing.
|
|
|
| template<class Config>
|
| -const char* TypeImpl<Config>::BitsetType::Name(bitset bits) {
|
| - switch (bits) {
|
| +const char* TypeImpl<Config>::BitsetType::Name(int bitset) {
|
| + switch (bitset) {
|
| case REPRESENTATION(kAny): return "Any";
|
| #define RETURN_NAMED_REPRESENTATION_TYPE(type, value) \
|
| case REPRESENTATION(k##type): return #type;
|
| @@ -871,15 +862,15 @@ const char* TypeImpl<Config>::BitsetType::Name(bitset bits) {
|
|
|
| template <class Config>
|
| void TypeImpl<Config>::BitsetType::Print(OStream& os, // NOLINT
|
| - bitset bits) {
|
| + int bitset) {
|
| DisallowHeapAllocation no_allocation;
|
| - const char* name = Name(bits);
|
| + const char* name = Name(bitset);
|
| if (name != NULL) {
|
| os << name;
|
| return;
|
| }
|
|
|
| - static const bitset named_bitsets[] = {
|
| + static const int named_bitsets[] = {
|
| #define BITSET_CONSTANT(type, value) REPRESENTATION(k##type),
|
| REPRESENTATION_BITSET_TYPE_LIST(BITSET_CONSTANT)
|
| #undef BITSET_CONSTANT
|
| @@ -891,16 +882,16 @@ void TypeImpl<Config>::BitsetType::Print(OStream& os, // NOLINT
|
|
|
| bool is_first = true;
|
| os << "(";
|
| - for (int i(arraysize(named_bitsets) - 1); bits != 0 && i >= 0; --i) {
|
| - bitset subset = named_bitsets[i];
|
| - if ((bits & subset) == subset) {
|
| + for (int i(arraysize(named_bitsets) - 1); bitset != 0 && i >= 0; --i) {
|
| + int subset = named_bitsets[i];
|
| + if ((bitset & subset) == subset) {
|
| if (!is_first) os << " | ";
|
| is_first = false;
|
| os << Name(subset);
|
| - bits -= subset;
|
| + bitset -= subset;
|
| }
|
| }
|
| - DCHECK(bits == 0);
|
| + DCHECK(bitset == 0);
|
| os << ")";
|
| }
|
|
|
|
|