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 #include "src/conversions.h" | 5 #include "src/conversions.h" |
6 | 6 |
7 #include <limits.h> | 7 #include <limits.h> |
8 #include <stdarg.h> | 8 #include <stdarg.h> |
9 #include <cmath> | 9 #include <cmath> |
10 | 10 |
11 #include "src/assert-scope.h" | 11 #include "src/assert-scope.h" |
12 #include "src/char-predicates-inl.h" | 12 #include "src/char-predicates-inl.h" |
| 13 #include "src/codegen.h" |
13 #include "src/conversions-inl.h" | 14 #include "src/conversions-inl.h" |
14 #include "src/dtoa.h" | 15 #include "src/dtoa.h" |
15 #include "src/factory.h" | 16 #include "src/factory.h" |
16 #include "src/list-inl.h" | 17 #include "src/list-inl.h" |
17 #include "src/strtod.h" | 18 #include "src/strtod.h" |
18 #include "src/utils.h" | 19 #include "src/utils.h" |
19 | 20 |
20 #ifndef _STLP_VENDOR_CSTD | 21 #ifndef _STLP_VENDOR_CSTD |
21 // STLPort doesn't import fpclassify into the std namespace. | 22 // STLPort doesn't import fpclassify into the std namespace. |
22 using std::fpclassify; | 23 using std::fpclassify; |
(...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
433 if (is_negative) value = -value; | 434 if (is_negative) value = -value; |
434 | 435 |
435 // Get the integer part and the decimal part. | 436 // Get the integer part and the decimal part. |
436 double integer_part = std::floor(value); | 437 double integer_part = std::floor(value); |
437 double decimal_part = value - integer_part; | 438 double decimal_part = value - integer_part; |
438 | 439 |
439 // Convert the integer part starting from the back. Always generate | 440 // Convert the integer part starting from the back. Always generate |
440 // at least one digit. | 441 // at least one digit. |
441 int integer_pos = kBufferSize - 2; | 442 int integer_pos = kBufferSize - 2; |
442 do { | 443 do { |
443 double remainder = std::fmod(integer_part, radix); | 444 double remainder = modulo(integer_part, radix); |
444 integer_buffer[integer_pos--] = chars[static_cast<int>(remainder)]; | 445 integer_buffer[integer_pos--] = chars[static_cast<int>(remainder)]; |
445 integer_part -= remainder; | 446 integer_part -= remainder; |
446 integer_part /= radix; | 447 integer_part /= radix; |
447 } while (integer_part >= 1.0); | 448 } while (integer_part >= 1.0); |
448 // Sanity check. | 449 // Sanity check. |
449 DCHECK(integer_pos > 0); | 450 DCHECK(integer_pos > 0); |
450 // Add sign if needed. | 451 // Add sign if needed. |
451 if (is_negative) integer_buffer[integer_pos--] = '-'; | 452 if (is_negative) integer_buffer[integer_pos--] = '-'; |
452 | 453 |
453 // Convert the decimal part. Repeatedly multiply by the radix to | 454 // Convert the decimal part. Repeatedly multiply by the radix to |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
554 char reverse_buffer[kBufferSize + 1]; // Result will be /0 terminated. | 555 char reverse_buffer[kBufferSize + 1]; // Result will be /0 terminated. |
555 Vector<char> reverse_vector(reverse_buffer, arraysize(reverse_buffer)); | 556 Vector<char> reverse_vector(reverse_buffer, arraysize(reverse_buffer)); |
556 const char* reverse_string = DoubleToCString(d, reverse_vector); | 557 const char* reverse_string = DoubleToCString(d, reverse_vector); |
557 for (int i = 0; i < length; ++i) { | 558 for (int i = 0; i < length; ++i) { |
558 if (static_cast<uint16_t>(reverse_string[i]) != buffer[i]) return false; | 559 if (static_cast<uint16_t>(reverse_string[i]) != buffer[i]) return false; |
559 } | 560 } |
560 return true; | 561 return true; |
561 } | 562 } |
562 } // namespace internal | 563 } // namespace internal |
563 } // namespace v8 | 564 } // namespace v8 |
OLD | NEW |