diff options
Diffstat (limited to 'deps/v8/src/objects/smi.h')
-rw-r--r-- | deps/v8/src/objects/smi.h | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/deps/v8/src/objects/smi.h b/deps/v8/src/objects/smi.h index 0361ef0a7a..301d5093c0 100644 --- a/deps/v8/src/objects/smi.h +++ b/deps/v8/src/objects/smi.h @@ -54,7 +54,14 @@ class Smi : public Object { static inline Smi FromIntptr(intptr_t value) { DCHECK(Smi::IsValid(value)); int smi_shift_bits = kSmiTagSize + kSmiShiftSize; - return Smi((value << smi_shift_bits) | kSmiTag); + return Smi((static_cast<Address>(value) << smi_shift_bits) | kSmiTag); + } + + // Given {value} in [0, 2^31-1], force it into Smi range by changing at most + // the MSB (leaving the lower 31 bit unchanged). + static inline Smi From31BitPattern(int value) { + return Smi::FromInt((value << (32 - kSmiValueSize)) >> + (32 - kSmiValueSize)); } template <typename E, |