| Index: src/number-info.h
|
| ===================================================================
|
| --- src/number-info.h (revision 4250)
|
| +++ src/number-info.h (working copy)
|
| @@ -37,7 +37,7 @@
|
| // | \--------|
|
| // Number String
|
| // / | |
|
| -// HeapNumber Integer32 |
|
| +// Double Integer32 |
|
| // | | /
|
| // | Smi /
|
| // | / /
|
| @@ -57,7 +57,7 @@
|
| // We know it's a Smi.
|
| static inline NumberInfo Smi();
|
| // We know it's a heap number.
|
| - static inline NumberInfo HeapNumber();
|
| + static inline NumberInfo Double();
|
| // We know it's a string.
|
| static inline NumberInfo String();
|
| // We haven't started collecting info yet.
|
| @@ -85,7 +85,7 @@
|
| t == kNumberType ||
|
| t == kInteger32Type ||
|
| t == kSmiType ||
|
| - t == kHeapNumberType);
|
| + t == kDoubleType);
|
| return NumberInfo(t);
|
| }
|
|
|
| @@ -100,7 +100,7 @@
|
| t == kNumberType ||
|
| t == kInteger32Type ||
|
| t == kSmiType ||
|
| - t == kHeapNumberType ||
|
| + t == kDoubleType ||
|
| t == kStringType);
|
| return NumberInfo(t);
|
| }
|
| @@ -110,6 +110,22 @@
|
| return NumberInfo(static_cast<Type>(a.type_ & b.type_));
|
| }
|
|
|
| +
|
| + // Integer32 is an integer that can be represented as either a signed
|
| + // 32-bit integer or as an unsigned 32-bit integer. It has to be
|
| + // in the range [-2^31, 2^32 - 1].
|
| + static inline bool IsInt32Double(double value) {
|
| + if (value >= -0x80000000 && value <= 0xffffffffu) {
|
| + if (value <= 0x7fffffff && value == static_cast<int32_t>(value)) {
|
| + return true;
|
| + }
|
| + if (value == static_cast<uint32_t>(value)) return true;
|
| + }
|
| + return false;
|
| + }
|
| +
|
| + static inline NumberInfo TypeFromValue(Handle<Object> value);
|
| +
|
| inline bool IsUnknown() {
|
| return type_ == kUnknownType;
|
| }
|
| @@ -129,9 +145,9 @@
|
| return ((type_ & kInteger32Type) == kInteger32Type);
|
| }
|
|
|
| - inline bool IsHeapNumber() {
|
| + inline bool IsDouble() {
|
| ASSERT(type_ != kUninitializedType);
|
| - return ((type_ & kHeapNumberType) == kHeapNumberType);
|
| + return ((type_ & kDoubleType) == kDoubleType);
|
| }
|
|
|
| inline bool IsUninitialized() {
|
| @@ -145,7 +161,7 @@
|
| case kNumberType: return "NumberType";
|
| case kInteger32Type: return "Integer32Type";
|
| case kSmiType: return "SmiType";
|
| - case kHeapNumberType: return "HeapNumberType";
|
| + case kDoubleType: return "DoubleType";
|
| case kStringType: return "StringType";
|
| case kUninitializedType:
|
| UNREACHABLE();
|
| @@ -163,7 +179,7 @@
|
| kNumberType = 0x11, // 010001
|
| kInteger32Type = 0x13, // 010011
|
| kSmiType = 0x17, // 010111
|
| - kHeapNumberType = 0x19, // 011001
|
| + kDoubleType = 0x19, // 011001
|
| kStringType = 0x30, // 110000
|
| kUninitializedType = 0x3f // 111111
|
| };
|
| @@ -198,8 +214,8 @@
|
| }
|
|
|
|
|
| -NumberInfo NumberInfo::HeapNumber() {
|
| - return NumberInfo(kHeapNumberType);
|
| +NumberInfo NumberInfo::Double() {
|
| + return NumberInfo(kDoubleType);
|
| }
|
|
|
|
|
|
|