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_INL_H_ | 5 #ifndef V8_CONVERSIONS_INL_H_ |
6 #define V8_CONVERSIONS_INL_H_ | 6 #define V8_CONVERSIONS_INL_H_ |
7 | 7 |
8 #include <float.h> // Required for DBL_MAX and on Win32 for finite() | 8 #include <float.h> // Required for DBL_MAX and on Win32 for finite() |
9 #include <limits.h> // Required for INT_MAX etc. | 9 #include <limits.h> // Required for INT_MAX etc. |
10 #include <stdarg.h> | 10 #include <stdarg.h> |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
63 // Copy least significant 32 bits of mantissa. | 63 // Copy least significant 32 bits of mantissa. |
64 memcpy(&result, mantissa_ptr, sizeof(result)); | 64 memcpy(&result, mantissa_ptr, sizeof(result)); |
65 return negative ? ~result + 1 : result; | 65 return negative ? ~result + 1 : result; |
66 } | 66 } |
67 // Large number (outside uint32 range), Infinity or NaN. | 67 // Large number (outside uint32 range), Infinity or NaN. |
68 return 0x80000000u; // Return integer indefinite. | 68 return 0x80000000u; // Return integer indefinite. |
69 } | 69 } |
70 | 70 |
71 | 71 |
72 inline float DoubleToFloat32(double x) { | 72 inline float DoubleToFloat32(double x) { |
73 // TODO(yanggou): This static_cast is implementation-defined behaviour in C++, | 73 // TODO(yangguo): This static_cast is implementation-defined behaviour in C++, |
74 // so we may need to do the conversion manually instead to match the spec. | 74 // so we may need to do the conversion manually instead to match the spec. |
75 volatile float f = static_cast<float>(x); | 75 volatile float f = static_cast<float>(x); |
76 return f; | 76 return f; |
77 } | 77 } |
78 | 78 |
79 | 79 |
80 inline double DoubleToInteger(double x) { | 80 inline double DoubleToInteger(double x) { |
81 if (std::isnan(x)) return 0; | 81 if (std::isnan(x)) return 0; |
82 if (!std::isfinite(x) || x == 0) return x; | 82 if (!std::isfinite(x) || x == 0) return x; |
83 return (x >= 0) ? std::floor(x) : std::ceil(x); | 83 return (x >= 0) ? std::floor(x) : std::ceil(x); |
(...skipping 671 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
755 buffer[buffer_pos] = '\0'; | 755 buffer[buffer_pos] = '\0'; |
756 | 756 |
757 double converted = Strtod(Vector<const char>(buffer, buffer_pos), exponent); | 757 double converted = Strtod(Vector<const char>(buffer, buffer_pos), exponent); |
758 return (sign == NEGATIVE) ? -converted : converted; | 758 return (sign == NEGATIVE) ? -converted : converted; |
759 } | 759 } |
760 | 760 |
761 } // namespace internal | 761 } // namespace internal |
762 } // namespace v8 | 762 } // namespace v8 |
763 | 763 |
764 #endif // V8_CONVERSIONS_INL_H_ | 764 #endif // V8_CONVERSIONS_INL_H_ |
OLD | NEW |