Index: src/conversions-inl.h |
=================================================================== |
--- src/conversions-inl.h (revision 8559) |
+++ src/conversions-inl.h (working copy) |
@@ -43,6 +43,11 @@ |
namespace v8 { |
namespace internal { |
+static inline double JunkStringValue() { |
+ return std::numeric_limits<double>::quiet_NaN(); |
+} |
+ |
+ |
// The fast double-to-unsigned-int conversion routine does not guarantee |
// rounding towards zero, or any reasonable value if the argument is larger |
// than what fits in an unsigned 32-bit integer. |
@@ -151,7 +156,7 @@ |
!AdvanceToNonspace(unicode_cache, ¤t, end)) { |
break; |
} else { |
- return JUNK_STRING_VALUE; |
+ return JunkStringValue(); |
} |
} |
@@ -181,7 +186,7 @@ |
if (!allow_trailing_junk && |
AdvanceToNonspace(unicode_cache, ¤t, end)) { |
- return JUNK_STRING_VALUE; |
+ return JunkStringValue(); |
} |
int middle_value = (1 << (overflow_bits_count - 1)); |
@@ -229,7 +234,7 @@ |
EndMark end, |
int radix) { |
const bool allow_trailing_junk = true; |
- const double empty_string_val = JUNK_STRING_VALUE; |
+ const double empty_string_val = JunkStringValue(); |
if (!AdvanceToNonspace(unicode_cache, ¤t, end)) { |
return empty_string_val; |
@@ -242,12 +247,12 @@ |
// Ignore leading sign; skip following spaces. |
++current; |
if (current == end) { |
- return JUNK_STRING_VALUE; |
+ return JunkStringValue(); |
} |
} else if (*current == '-') { |
++current; |
if (current == end) { |
- return JUNK_STRING_VALUE; |
+ return JunkStringValue(); |
} |
negative = true; |
} |
@@ -260,7 +265,7 @@ |
if (*current == 'x' || *current == 'X') { |
radix = 16; |
++current; |
- if (current == end) return JUNK_STRING_VALUE; |
+ if (current == end) return JunkStringValue(); |
} else { |
radix = 8; |
leading_zero = true; |
@@ -275,14 +280,14 @@ |
if (current == end) return SignedZero(negative); |
if (*current == 'x' || *current == 'X') { |
++current; |
- if (current == end) return JUNK_STRING_VALUE; |
+ if (current == end) return JunkStringValue(); |
} else { |
leading_zero = true; |
} |
} |
} |
- if (radix < 2 || radix > 36) return JUNK_STRING_VALUE; |
+ if (radix < 2 || radix > 36) return JunkStringValue(); |
// Skip leading zeros. |
while (*current == '0') { |
@@ -292,7 +297,7 @@ |
} |
if (!leading_zero && !isDigit(*current, radix)) { |
- return JUNK_STRING_VALUE; |
+ return JunkStringValue(); |
} |
if (IsPowerOf2(radix)) { |
@@ -340,7 +345,7 @@ |
if (!allow_trailing_junk && |
AdvanceToNonspace(unicode_cache, ¤t, end)) { |
- return JUNK_STRING_VALUE; |
+ return JunkStringValue(); |
} |
ASSERT(buffer_pos < kBufferSize); |
@@ -406,7 +411,7 @@ |
if (!allow_trailing_junk && |
AdvanceToNonspace(unicode_cache, ¤t, end)) { |
- return JUNK_STRING_VALUE; |
+ return JunkStringValue(); |
} |
return negative ? -v : v; |
@@ -456,22 +461,22 @@ |
if (*current == '+') { |
// Ignore leading sign. |
++current; |
- if (current == end) return JUNK_STRING_VALUE; |
+ if (current == end) return JunkStringValue(); |
} else if (*current == '-') { |
++current; |
- if (current == end) return JUNK_STRING_VALUE; |
+ if (current == end) return JunkStringValue(); |
negative = true; |
} |
static const char kInfinitySymbol[] = "Infinity"; |
if (*current == kInfinitySymbol[0]) { |
if (!SubStringEquals(¤t, end, kInfinitySymbol)) { |
- return JUNK_STRING_VALUE; |
+ return JunkStringValue(); |
} |
if (!allow_trailing_junk && |
AdvanceToNonspace(unicode_cache, ¤t, end)) { |
- return JUNK_STRING_VALUE; |
+ return JunkStringValue(); |
} |
ASSERT(buffer_pos == 0); |
@@ -489,7 +494,7 @@ |
if ((flags & ALLOW_HEX) && (*current == 'x' || *current == 'X')) { |
++current; |
if (current == end || !isDigit(*current, 16)) { |
- return JUNK_STRING_VALUE; // "0x". |
+ return JunkStringValue(); // "0x". |
} |
return InternalStringToIntDouble<4>(unicode_cache, |
@@ -529,13 +534,13 @@ |
} |
if (*current == '.') { |
- if (octal && !allow_trailing_junk) return JUNK_STRING_VALUE; |
+ if (octal && !allow_trailing_junk) return JunkStringValue(); |
if (octal) goto parsing_done; |
++current; |
if (current == end) { |
if (significant_digits == 0 && !leading_zero) { |
- return JUNK_STRING_VALUE; |
+ return JunkStringValue(); |
} else { |
goto parsing_done; |
} |
@@ -576,18 +581,18 @@ |
// If exponent < 0 then string was [+-]\.0*... |
// If significant_digits != 0 the string is not equal to 0. |
// Otherwise there are no digits in the string. |
- return JUNK_STRING_VALUE; |
+ return JunkStringValue(); |
} |
// Parse exponential part. |
if (*current == 'e' || *current == 'E') { |
- if (octal) return JUNK_STRING_VALUE; |
+ if (octal) return JunkStringValue(); |
++current; |
if (current == end) { |
if (allow_trailing_junk) { |
goto parsing_done; |
} else { |
- return JUNK_STRING_VALUE; |
+ return JunkStringValue(); |
} |
} |
char sign = '+'; |
@@ -598,7 +603,7 @@ |
if (allow_trailing_junk) { |
goto parsing_done; |
} else { |
- return JUNK_STRING_VALUE; |
+ return JunkStringValue(); |
} |
} |
} |
@@ -607,7 +612,7 @@ |
if (allow_trailing_junk) { |
goto parsing_done; |
} else { |
- return JUNK_STRING_VALUE; |
+ return JunkStringValue(); |
} |
} |
@@ -631,7 +636,7 @@ |
if (!allow_trailing_junk && |
AdvanceToNonspace(unicode_cache, ¤t, end)) { |
- return JUNK_STRING_VALUE; |
+ return JunkStringValue(); |
} |
parsing_done: |