| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef V8_CONVERSIONS_H_ | 5 #ifndef V8_CONVERSIONS_H_ |
| 6 #define V8_CONVERSIONS_H_ | 6 #define V8_CONVERSIONS_H_ |
| 7 | 7 |
| 8 #include <limits> | 8 #include <limits> |
| 9 | 9 |
| 10 #include "checks.h" | 10 #include "checks.h" |
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 156 // integer. It has to be in the range [-2^31, 2^31 - 1]. | 156 // integer. It has to be in the range [-2^31, 2^31 - 1]. |
| 157 // We also have to check for negative 0 as it is not an Integer32. | 157 // We also have to check for negative 0 as it is not an Integer32. |
| 158 static inline bool IsInt32Double(double value) { | 158 static inline bool IsInt32Double(double value) { |
| 159 return !IsMinusZero(value) && | 159 return !IsMinusZero(value) && |
| 160 value >= kMinInt && | 160 value >= kMinInt && |
| 161 value <= kMaxInt && | 161 value <= kMaxInt && |
| 162 value == FastI2D(FastD2I(value)); | 162 value == FastI2D(FastD2I(value)); |
| 163 } | 163 } |
| 164 | 164 |
| 165 | 165 |
| 166 // UInteger32 is an integer that can be represented as an unsigned 32-bit |
| 167 // integer. It has to be in the range [0, 2^32 - 1]. |
| 168 // We also have to check for negative 0 as it is not a UInteger32. |
| 169 static inline bool IsUint32Double(double value) { |
| 170 return !IsMinusZero(value) && |
| 171 value >= 0 && |
| 172 value <= kMaxUInt32 && |
| 173 value == FastUI2D(FastD2UI(value)); |
| 174 } |
| 175 |
| 176 |
| 166 // Convert from Number object to C integer. | 177 // Convert from Number object to C integer. |
| 167 inline int32_t NumberToInt32(Object* number) { | 178 inline int32_t NumberToInt32(Object* number) { |
| 168 if (number->IsSmi()) return Smi::cast(number)->value(); | 179 if (number->IsSmi()) return Smi::cast(number)->value(); |
| 169 return DoubleToInt32(number->Number()); | 180 return DoubleToInt32(number->Number()); |
| 170 } | 181 } |
| 171 | 182 |
| 172 | 183 |
| 173 inline uint32_t NumberToUint32(Object* number) { | 184 inline uint32_t NumberToUint32(Object* number) { |
| 174 if (number->IsSmi()) return Smi::cast(number)->value(); | 185 if (number->IsSmi()) return Smi::cast(number)->value(); |
| 175 return DoubleToUint32(number->Number()); | 186 return DoubleToUint32(number->Number()); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 212 Object* number) { | 223 Object* number) { |
| 213 size_t result = 0; | 224 size_t result = 0; |
| 214 bool is_valid = TryNumberToSize(isolate, number, &result); | 225 bool is_valid = TryNumberToSize(isolate, number, &result); |
| 215 CHECK(is_valid); | 226 CHECK(is_valid); |
| 216 return result; | 227 return result; |
| 217 } | 228 } |
| 218 | 229 |
| 219 } } // namespace v8::internal | 230 } } // namespace v8::internal |
| 220 | 231 |
| 221 #endif // V8_CONVERSIONS_H_ | 232 #endif // V8_CONVERSIONS_H_ |
| OLD | NEW |