diff options
Diffstat (limited to 'deps/v8/src/conversions.cc')
-rw-r--r-- | deps/v8/src/conversions.cc | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/deps/v8/src/conversions.cc b/deps/v8/src/conversions.cc index 8b776235e7..663f4e8dec 100644 --- a/deps/v8/src/conversions.cc +++ b/deps/v8/src/conversions.cc @@ -483,19 +483,21 @@ char* DoubleToRadixCString(double value, int radix) { } -double StringToDouble(UnicodeCache* unicode_cache, - String* string, - int flags, - double empty_string_val) { - DisallowHeapAllocation no_gc; - String::FlatContent flat = string->GetFlatContent(); - // ECMA-262 section 15.1.2.3, empty string is NaN - if (flat.IsOneByte()) { - return StringToDouble( - unicode_cache, flat.ToOneByteVector(), flags, empty_string_val); - } else { - return StringToDouble( - unicode_cache, flat.ToUC16Vector(), flags, empty_string_val); +double StringToDouble(UnicodeCache* unicode_cache, Handle<String> string, + int flags, double empty_string_val) { + Handle<String> flattened = String::Flatten(string); + { + DisallowHeapAllocation no_gc; + String::FlatContent flat = flattened->GetFlatContent(); + DCHECK(flat.IsFlat()); + // ECMA-262 section 15.1.2.3, empty string is NaN + if (flat.IsOneByte()) { + return StringToDouble(unicode_cache, flat.ToOneByteVector(), flags, + empty_string_val); + } else { + return StringToDouble(unicode_cache, flat.ToUC16Vector(), flags, + empty_string_val); + } } } |