Index: src/type-info.h |
diff --git a/src/type-info.h b/src/type-info.h |
index 0ff99e994d913ddf4d1af2d08f3adff3130a82c2..29382649672031177ed52215bc44d3cb255b5a48 100644 |
--- a/src/type-info.h |
+++ b/src/type-info.h |
@@ -36,189 +36,7 @@ |
namespace v8 { |
namespace internal { |
-const int kMaxKeyedPolymorphism = 4; |
- |
-// Unknown |
-// | \____________ |
-// | | |
-// Primitive Non-primitive |
-// | \_______ | |
-// | | | |
-// Number String | |
-// / \ | | |
-// Double Integer32 | / |
-// | | / / |
-// | Smi / / |
-// | | / __/ |
-// Uninitialized. |
- |
-class TypeInfo { |
- public: |
- TypeInfo() : type_(kUninitialized) { } |
- |
- static TypeInfo Unknown() { return TypeInfo(kUnknown); } |
- // We know it's a primitive type. |
- static TypeInfo Primitive() { return TypeInfo(kPrimitive); } |
- // We know it's a number of some sort. |
- static TypeInfo Number() { return TypeInfo(kNumber); } |
- // We know it's a signed 32 bit integer. |
- static TypeInfo Integer32() { return TypeInfo(kInteger32); } |
- // We know it's a Smi. |
- static TypeInfo Smi() { return TypeInfo(kSmi); } |
- // We know it's a heap number. |
- static TypeInfo Double() { return TypeInfo(kDouble); } |
- // We know it's a string. |
- static TypeInfo String() { return TypeInfo(kString); } |
- // We know it's an internalized string. |
- static TypeInfo InternalizedString() { return TypeInfo(kInternalizedString); } |
- // We know it's a non-primitive (object) type. |
- static TypeInfo NonPrimitive() { return TypeInfo(kNonPrimitive); } |
- // We haven't started collecting info yet. |
- static TypeInfo Uninitialized() { return TypeInfo(kUninitialized); } |
- |
- int ToInt() { |
- return type_; |
- } |
- |
- static TypeInfo FromInt(int bit_representation) { |
- Type t = static_cast<Type>(bit_representation); |
- ASSERT(t == kUnknown || |
- t == kPrimitive || |
- t == kNumber || |
- t == kInteger32 || |
- t == kSmi || |
- t == kDouble || |
- t == kString || |
- t == kNonPrimitive); |
- return TypeInfo(t); |
- } |
- |
- // Return the weakest (least precise) common type. |
- static TypeInfo Combine(TypeInfo a, TypeInfo b) { |
- return TypeInfo(static_cast<Type>(a.type_ & b.type_)); |
- } |
- |
- |
- // Integer32 is an integer that can be represented as a signed |
- // 32-bit integer. It has to be |
- // in the range [-2^31, 2^31 - 1]. We also have to check for negative 0 |
- // as it is not an Integer32. |
- static inline bool IsInt32Double(double value) { |
- const DoubleRepresentation minus_zero(-0.0); |
- DoubleRepresentation rep(value); |
- if (rep.bits == minus_zero.bits) return false; |
- if (value >= kMinInt && value <= kMaxInt && |
- value == static_cast<int32_t>(value)) { |
- return true; |
- } |
- return false; |
- } |
- |
- static TypeInfo FromValue(Handle<Object> value); |
- |
- bool Equals(const TypeInfo& other) { |
- return type_ == other.type_; |
- } |
- |
- inline bool IsUnknown() { |
- ASSERT(type_ != kUninitialized); |
- return type_ == kUnknown; |
- } |
- |
- inline bool IsPrimitive() { |
- ASSERT(type_ != kUninitialized); |
- return ((type_ & kPrimitive) == kPrimitive); |
- } |
- |
- inline bool IsNumber() { |
- ASSERT(type_ != kUninitialized); |
- return ((type_ & kNumber) == kNumber); |
- } |
- |
- inline bool IsSmi() { |
- ASSERT(type_ != kUninitialized); |
- return ((type_ & kSmi) == kSmi); |
- } |
- |
- inline bool IsInternalizedString() { |
- ASSERT(type_ != kUninitialized); |
- return ((type_ & kInternalizedString) == kInternalizedString); |
- } |
- |
- inline bool IsNonInternalizedString() { |
- ASSERT(type_ != kUninitialized); |
- return ((type_ & kInternalizedString) == kString); |
- } |
- |
- inline bool IsInteger32() { |
- ASSERT(type_ != kUninitialized); |
- return ((type_ & kInteger32) == kInteger32); |
- } |
- |
- inline bool IsDouble() { |
- ASSERT(type_ != kUninitialized); |
- return ((type_ & kDouble) == kDouble); |
- } |
- |
- inline bool IsString() { |
- ASSERT(type_ != kUninitialized); |
- return ((type_ & kString) == kString); |
- } |
- |
- inline bool IsNonPrimitive() { |
- ASSERT(type_ != kUninitialized); |
- return ((type_ & kNonPrimitive) == kNonPrimitive); |
- } |
- |
- inline bool IsUninitialized() { |
- return type_ == kUninitialized; |
- } |
- |
- const char* ToString() { |
- switch (type_) { |
- case kUnknown: return "Unknown"; |
- case kPrimitive: return "Primitive"; |
- case kNumber: return "Number"; |
- case kInteger32: return "Integer32"; |
- case kSmi: return "Smi"; |
- case kInternalizedString: return "InternalizedString"; |
- case kDouble: return "Double"; |
- case kString: return "String"; |
- case kNonPrimitive: return "Object"; |
- case kUninitialized: return "Uninitialized"; |
- } |
- UNREACHABLE(); |
- return "Unreachable code"; |
- } |
- |
- private: |
- enum Type { |
- kUnknown = 0, // 0000000 |
- kPrimitive = 0x10, // 0010000 |
- kNumber = 0x11, // 0010001 |
- kInteger32 = 0x13, // 0010011 |
- kSmi = 0x17, // 0010111 |
- kDouble = 0x19, // 0011001 |
- kString = 0x30, // 0110000 |
- kInternalizedString = 0x32, // 0110010 |
- kNonPrimitive = 0x40, // 1000000 |
- kUninitialized = 0x7f // 1111111 |
- }; |
- |
- explicit inline TypeInfo(Type t) : type_(t) { } |
- |
- Type type_; |
-}; |
- |
- |
-enum StringStubFeedback { |
- DEFAULT_STRING_STUB = 0, |
- STRING_INDEX_OUT_OF_BOUNDS = 1 |
-}; |
- |
- |
// Forward declarations. |
-class CompilationInfo; |
class ICStub; |
class SmallMapList; |