| Index: src/compiler/types.cc
|
| diff --git a/src/types.cc b/src/compiler/types.cc
|
| similarity index 96%
|
| rename from src/types.cc
|
| rename to src/compiler/types.cc
|
| index d2b5e2b8e13cc2b75ecacf28d1bfbe76b0f470c9..1b0b88dee2b982e1ea683197d5c9dc9eb7ae88eb 100644
|
| --- a/src/types.cc
|
| +++ b/src/compiler/types.cc
|
| @@ -4,14 +4,14 @@
|
|
|
| #include <iomanip>
|
|
|
| -#include "src/types.h"
|
| +#include "src/compiler/types.h"
|
|
|
| #include "src/handles-inl.h"
|
| #include "src/ostreams.h"
|
|
|
| namespace v8 {
|
| namespace internal {
|
| -
|
| +namespace compiler {
|
|
|
| // NOTE: If code is marked as being a "shortcut", this means that removing
|
| // the code won't affect the semantics of the surrounding function definition.
|
| @@ -58,18 +58,16 @@ bool Type::Contains(RangeType* lhs, RangeType* rhs) {
|
|
|
| bool Type::Contains(RangeType* lhs, ConstantType* rhs) {
|
| DisallowHeapAllocation no_allocation;
|
| - return IsInteger(*rhs->Value()) &&
|
| - lhs->Min() <= rhs->Value()->Number() &&
|
| + return IsInteger(*rhs->Value()) && lhs->Min() <= rhs->Value()->Number() &&
|
| rhs->Value()->Number() <= lhs->Max();
|
| }
|
|
|
| bool Type::Contains(RangeType* range, i::Object* val) {
|
| DisallowHeapAllocation no_allocation;
|
| - return IsInteger(val) &&
|
| - range->Min() <= val->Number() && val->Number() <= range->Max();
|
| + return IsInteger(val) && range->Min() <= val->Number() &&
|
| + val->Number() <= range->Max();
|
| }
|
|
|
| -
|
| // -----------------------------------------------------------------------------
|
| // Min and Max computation.
|
|
|
| @@ -105,11 +103,9 @@ double Type::Max() {
|
| return 0;
|
| }
|
|
|
| -
|
| // -----------------------------------------------------------------------------
|
| // Glb and lub computation.
|
|
|
| -
|
| // The largest bitset subsumed by this type.
|
| Type::bitset BitsetType::Glb(Type* type) {
|
| DisallowHeapAllocation no_allocation;
|
| @@ -129,7 +125,6 @@ Type::bitset BitsetType::Glb(Type* type) {
|
| }
|
| }
|
|
|
| -
|
| // The smallest bitset subsuming this type, possibly not a proper one.
|
| Type::bitset BitsetType::Lub(Type* type) {
|
| DisallowHeapAllocation no_allocation;
|
| @@ -286,7 +281,7 @@ Type::bitset BitsetType::Lub(i::Object* value) {
|
| DisallowHeapAllocation no_allocation;
|
| if (value->IsNumber()) {
|
| return Lub(value->Number()) &
|
| - (value->IsSmi() ? kTaggedSigned : kTaggedPointer);
|
| + (value->IsSmi() ? kTaggedSigned : kTaggedPointer);
|
| }
|
| return Lub(i::HeapObject::cast(value)->map());
|
| }
|
| @@ -299,7 +294,6 @@ Type::bitset BitsetType::Lub(double value) {
|
| return kOtherNumber;
|
| }
|
|
|
| -
|
| // Minimum values of plain numeric bitsets.
|
| const BitsetType::Boundary BitsetType::BoundariesArray[] = {
|
| {kOtherNumber, kPlainNumber, -V8_INFINITY},
|
| @@ -337,7 +331,7 @@ Type::bitset BitsetType::Lub(double min, double max) {
|
|
|
| for (size_t i = 1; i < BoundariesSize(); ++i) {
|
| if (min < mins[i].min) {
|
| - lub |= mins[i-1].internal;
|
| + lub |= mins[i - 1].internal;
|
| if (max < mins[i].min) return lub;
|
| }
|
| }
|
| @@ -391,23 +385,21 @@ double BitsetType::Max(bitset bits) {
|
| }
|
| for (size_t i = BoundariesSize() - 1; i-- > 0;) {
|
| if (Is(SEMANTIC(mins[i].internal), bits)) {
|
| - return mz ?
|
| - std::max(0.0, mins[i+1].min - 1) : mins[i+1].min - 1;
|
| + return mz ? std::max(0.0, mins[i + 1].min - 1) : mins[i + 1].min - 1;
|
| }
|
| }
|
| if (mz) return 0;
|
| return std::numeric_limits<double>::quiet_NaN();
|
| }
|
|
|
| -
|
| // -----------------------------------------------------------------------------
|
| // Predicates.
|
|
|
| bool Type::SimplyEquals(Type* that) {
|
| DisallowHeapAllocation no_allocation;
|
| if (this->IsConstant()) {
|
| - return that->IsConstant()
|
| - && *this->AsConstant()->Value() == *that->AsConstant()->Value();
|
| + return that->IsConstant() &&
|
| + *this->AsConstant()->Value() == *that->AsConstant()->Value();
|
| }
|
| if (this->IsTuple()) {
|
| if (!that->IsTuple()) return false;
|
| @@ -429,7 +421,6 @@ Type::bitset Type::Representation() {
|
| return REPRESENTATION(this->BitsetLub());
|
| }
|
|
|
| -
|
| // Check if [this] <= [that].
|
| bool Type::SlowIs(Type* that) {
|
| DisallowHeapAllocation no_allocation;
|
| @@ -452,7 +443,6 @@ bool Type::SlowIs(Type* that) {
|
| return SemanticIs(that);
|
| }
|
|
|
| -
|
| // Check if SEMANTIC([this]) <= SEMANTIC([that]). The result of the method
|
| // should be independent of the representation axis of the types.
|
| bool Type::SemanticIs(Type* that) {
|
| @@ -494,7 +484,6 @@ bool Type::SemanticIs(Type* that) {
|
| return this->SimplyEquals(that);
|
| }
|
|
|
| -
|
| // Check if [this] and [that] overlap.
|
| bool Type::Maybe(Type* that) {
|
| DisallowHeapAllocation no_allocation;
|
| @@ -557,7 +546,6 @@ bool Type::SemanticMaybe(Type* that) {
|
| return this->SimplyEquals(that);
|
| }
|
|
|
| -
|
| // Return the range in [this], or [NULL].
|
| Type* Type::GetRange() {
|
| DisallowHeapAllocation no_allocation;
|
| @@ -590,7 +578,7 @@ bool UnionType::Wellformed() {
|
| // 5. No element (except the bitset) is a subtype of any other.
|
| // 6. If there is a range, then the bitset type does not contain
|
| // plain number bits.
|
| - DCHECK(this->Length() >= 2); // (1)
|
| + DCHECK(this->Length() >= 2); // (1)
|
| DCHECK(this->Get(0)->IsBitset()); // (2a)
|
|
|
| for (int i = 0; i < this->Length(); ++i) {
|
| @@ -608,15 +596,12 @@ bool UnionType::Wellformed() {
|
| return true;
|
| }
|
|
|
| -
|
| // -----------------------------------------------------------------------------
|
| // Union and intersection
|
|
|
| -
|
| static bool AddIsSafe(int x, int y) {
|
| - return x >= 0 ?
|
| - y <= std::numeric_limits<int>::max() - x :
|
| - y >= std::numeric_limits<int>::min() - x;
|
| + return x >= 0 ? y <= std::numeric_limits<int>::max() - x
|
| + : y >= std::numeric_limits<int>::min() - x;
|
| }
|
|
|
| Type* Type::Intersect(Type* type1, Type* type2, Zone* zone) {
|
| @@ -694,7 +679,7 @@ int Type::UpdateRange(Type* range, UnionType* result, int size, Zone* zone) {
|
| }
|
|
|
| // Remove any components that just got subsumed.
|
| - for (int i = 2; i < size; ) {
|
| + for (int i = 2; i < size;) {
|
| if (result->Get(i)->SemanticIs(range)) {
|
| result->Set(i, result->Get(--size));
|
| } else {
|
| @@ -777,7 +762,6 @@ int Type::IntersectAux(Type* lhs, Type* rhs, UnionType* result, int size,
|
| return size;
|
| }
|
|
|
| -
|
| // Make sure that we produce a well-formed range and bitset:
|
| // If the range is non-empty, the number bits in the bitset should be
|
| // clear. Moreover, if we have a canonical range (such as Signed32),
|
| @@ -883,7 +867,6 @@ Type* Type::Union(Type* type1, Type* type2, Zone* zone) {
|
| return NormalizeUnion(result_type, size, zone);
|
| }
|
|
|
| -
|
| // Add [type] to [result] unless [type] is bitset, range, or already subsumed.
|
| // Return new size of [result].
|
| int Type::AddToUnion(Type* type, UnionType* result, int size, Zone* zone) {
|
| @@ -927,7 +910,6 @@ Type* Type::NormalizeUnion(Type* union_type, int size, Zone* zone) {
|
| return union_type;
|
| }
|
|
|
| -
|
| // -----------------------------------------------------------------------------
|
| // Component extraction
|
|
|
| @@ -936,13 +918,11 @@ Type* Type::Representation(Type* t, Zone* zone) {
|
| return BitsetType::New(t->Representation());
|
| }
|
|
|
| -
|
| // static
|
| Type* Type::Semantic(Type* t, Zone* zone) {
|
| return Intersect(t, BitsetType::New(BitsetType::kSemantic), zone);
|
| }
|
|
|
| -
|
| // -----------------------------------------------------------------------------
|
| // Iteration.
|
|
|
| @@ -967,7 +947,6 @@ Type* Type::Iterator<T>::get_type() {
|
| return type_->IsUnion() ? type_->AsUnion()->Get(index_) : type_;
|
| }
|
|
|
| -
|
| // C++ cannot specialise nested templates, so we have to go through this
|
| // contortion with an auxiliary template to simulate it.
|
| template <class T>
|
| @@ -1008,23 +987,25 @@ void Type::Iterator<T>::Advance() {
|
| index_ = -1;
|
| }
|
|
|
| -
|
| // -----------------------------------------------------------------------------
|
| // Printing.
|
|
|
| const char* BitsetType::Name(bitset bits) {
|
| switch (bits) {
|
| - case REPRESENTATION(kAny): return "Any";
|
| - #define RETURN_NAMED_REPRESENTATION_TYPE(type, value) \
|
| - case REPRESENTATION(k##type): return #type;
|
| - REPRESENTATION_BITSET_TYPE_LIST(RETURN_NAMED_REPRESENTATION_TYPE)
|
| - #undef RETURN_NAMED_REPRESENTATION_TYPE
|
| -
|
| - #define RETURN_NAMED_SEMANTIC_TYPE(type, value) \
|
| - case SEMANTIC(k##type): return #type;
|
| - SEMANTIC_BITSET_TYPE_LIST(RETURN_NAMED_SEMANTIC_TYPE)
|
| - INTERNAL_BITSET_TYPE_LIST(RETURN_NAMED_SEMANTIC_TYPE)
|
| - #undef RETURN_NAMED_SEMANTIC_TYPE
|
| + case REPRESENTATION(kAny):
|
| + return "Any";
|
| +#define RETURN_NAMED_REPRESENTATION_TYPE(type, value) \
|
| + case REPRESENTATION(k##type): \
|
| + return #type;
|
| + REPRESENTATION_BITSET_TYPE_LIST(RETURN_NAMED_REPRESENTATION_TYPE)
|
| +#undef RETURN_NAMED_REPRESENTATION_TYPE
|
| +
|
| +#define RETURN_NAMED_SEMANTIC_TYPE(type, value) \
|
| + case SEMANTIC(k##type): \
|
| + return #type;
|
| + SEMANTIC_BITSET_TYPE_LIST(RETURN_NAMED_SEMANTIC_TYPE)
|
| + INTERNAL_BITSET_TYPE_LIST(RETURN_NAMED_SEMANTIC_TYPE)
|
| +#undef RETURN_NAMED_SEMANTIC_TYPE
|
|
|
| default:
|
| return NULL;
|
| @@ -1108,7 +1089,6 @@ void Type::PrintTo(std::ostream& os, PrintDimension dim) {
|
| }
|
| }
|
|
|
| -
|
| #ifdef DEBUG
|
| void Type::Print() {
|
| OFStream os(stdout);
|
| @@ -1135,5 +1115,6 @@ BitsetType::bitset BitsetType::UnsignedSmall() {
|
|
|
| template class Type::Iterator<i::Object>;
|
|
|
| +} // namespace compiler
|
| } // namespace internal
|
| } // namespace v8
|
|
|