Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1673)

Side by Side Diff: Source/WebCore/platform/Decimal.cpp

Issue 10786036: Merge 122552 - REGRESSION(r119948): [Forms] Spin button Up/Down actions make value to zero for inpu… (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/1180/
Patch Set: Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2012 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 610 matching lines...) Expand 10 before | Expand all | Expand 10 after
621 if (isSpecial()) 621 if (isSpecial())
622 return *this; 622 return *this;
623 623
624 if (exponent() >= 0) 624 if (exponent() >= 0)
625 return *this; 625 return *this;
626 626
627 uint64_t result = m_data.coefficient(); 627 uint64_t result = m_data.coefficient();
628 const int numberOfDigits = countDigits(result); 628 const int numberOfDigits = countDigits(result);
629 const int numberOfDropDigits = -exponent(); 629 const int numberOfDropDigits = -exponent();
630 if (numberOfDigits < numberOfDropDigits) 630 if (numberOfDigits < numberOfDropDigits)
631 return zero(Positive); 631 return isPositive() ? Decimal(1) : zero(Positive);
632 632
633 result = scaleDown(result, numberOfDropDigits - 1); 633 result = scaleDown(result, numberOfDropDigits - 1);
634 if (sign() == Positive && result % 10 > 0) 634 if (sign() == Positive && result % 10 > 0)
635 result += 10; 635 result += 10;
636 result /= 10; 636 result /= 10;
637 return Decimal(sign(), 0, result); 637 return Decimal(sign(), 0, result);
638 } 638 }
639 639
640 Decimal Decimal::compareTo(const Decimal& rhs) const 640 Decimal Decimal::compareTo(const Decimal& rhs) const
641 { 641 {
(...skipping 21 matching lines...) Expand all
663 if (isSpecial()) 663 if (isSpecial())
664 return *this; 664 return *this;
665 665
666 if (exponent() >= 0) 666 if (exponent() >= 0)
667 return *this; 667 return *this;
668 668
669 uint64_t result = m_data.coefficient(); 669 uint64_t result = m_data.coefficient();
670 const int numberOfDigits = countDigits(result); 670 const int numberOfDigits = countDigits(result);
671 const int numberOfDropDigits = -exponent(); 671 const int numberOfDropDigits = -exponent();
672 if (numberOfDigits < numberOfDropDigits) 672 if (numberOfDigits < numberOfDropDigits)
673 return zero(Positive); 673 return isPositive() ? zero(Positive) : Decimal(-1);
674 674
675 result = scaleDown(result, numberOfDropDigits - 1); 675 result = scaleDown(result, numberOfDropDigits - 1);
676 if (isNegative() && result % 10 > 0) 676 if (isNegative() && result % 10 > 0)
677 result += 10; 677 result += 10;
678 result /= 10; 678 result /= 10;
679 return Decimal(sign(), 0, result); 679 return Decimal(sign(), 0, result);
680 } 680 }
681 681
682 Decimal Decimal::fromDouble(double doubleValue) 682 Decimal Decimal::fromDouble(double doubleValue)
683 { 683 {
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after
1026 } 1026 }
1027 return builder.toString(); 1027 return builder.toString();
1028 } 1028 }
1029 1029
1030 Decimal Decimal::zero(Sign sign) 1030 Decimal Decimal::zero(Sign sign)
1031 { 1031 {
1032 return Decimal(EncodedData(sign, EncodedData::ClassZero)); 1032 return Decimal(EncodedData(sign, EncodedData::ClassZero));
1033 } 1033 }
1034 1034
1035 } // namespace WebCore 1035 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698