| 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;
|
|
|
|
|