Index: src/conversions.h |
diff --git a/src/conversions.h b/src/conversions.h |
index 4cbeeca828d3ca991df1d22c5555f60c72d941bd..c3e27b2025f519610848fa65d04735a99a1c62cc 100644 |
--- a/src/conversions.h |
+++ b/src/conversions.h |
@@ -28,11 +28,36 @@ |
#ifndef V8_CONVERSIONS_H_ |
#define V8_CONVERSIONS_H_ |
+#include <limits> |
+ |
#include "scanner-base.h" |
namespace v8 { |
namespace internal { |
+// Maximum number of significant digits in decimal representation. |
+// The longest possible double in decimal representation is |
+// (2^53 - 1) * 2 ^ -1074 that is (2 ^ 53 - 1) * 5 ^ 1074 / 10 ^ 1074 |
+// (768 digits). If we parse a number whose first digits are equal to a |
+// mean of 2 adjacent doubles (that could have up to 769 digits) the result |
+// must be rounded to the bigger one unless the tail consists of zeros, so |
+// we don't need to preserve all the digits. |
+const int kMaxSignificantDigits = 772; |
+ |
+static const double JUNK_STRING_VALUE = |
+ std::numeric_limits<double>::quiet_NaN(); |
+ |
+static bool isDigit(int x, int radix) { |
+ return (x >= '0' && x <= '9' && x < '0' + radix) |
+ || (radix > 10 && x >= 'a' && x < 'a' + radix - 10) |
+ || (radix > 10 && x >= 'A' && x < 'A' + radix - 10); |
+} |
+ |
+ |
+static double SignedZero(bool negative) { |
+ return negative ? -0.0 : 0.0; |
+} |
+ |
// The fast double-to-(unsigned-)int conversion routine does not guarantee |
// rounding towards zero. |
@@ -87,17 +112,8 @@ enum ConversionFlags { |
}; |
-// Convert from Number object to C integer. |
-static inline int32_t NumberToInt32(Object* number); |
-static inline uint32_t NumberToUint32(Object* number); |
- |
- |
// Converts a string into a double value according to ECMA-262 9.3.1 |
double StringToDouble(UnicodeCache* unicode_cache, |
- String* str, |
- int flags, |
- double empty_string_val = 0); |
-double StringToDouble(UnicodeCache* unicode_cache, |
Vector<const char> str, |
int flags, |
double empty_string_val = 0); |
@@ -111,9 +127,6 @@ double StringToDouble(UnicodeCache* unicode_cache, |
int flags, |
double empty_string_val = 0); |
-// Converts a string into an integer. |
-double StringToInt(UnicodeCache* unicode_cache, String* str, int radix); |
- |
// Converts a double to a string value according to ECMA-262 9.8.1. |
// The buffer should be large enough for any floating point number. |
// 100 characters is enough. |