Changeset 115928 in webkit


Ignore:
Timestamp:
May 2, 2012 7:01:30 PM (12 years ago)
Author:
leviw@chromium.org
Message:

Convert FractionalLayoutUnit overflow assertions to stderr warnings
https://bugs.webkit.org/show_bug.cgi?id=85393

Reviewed by Eric Seidel.

Writing warnings to stderr when FractionalLayoutUnits overflow on debug builds instead of asserting
and crashing. It can be very useful to WebKit developers know when overflow is occurring, but it's
not always a programming error, so assert wasn't the right action.

No new tests. No change in behavior.

  • platform/FractionalLayoutUnit.h:

(WebCore):
(WebCore::FractionalLayoutUnit::FractionalLayoutUnit):
(WebCore::FractionalLayoutUnit::toUnsigned):
(WebCore::FractionalLayoutUnit::setRawValue):

Location:
trunk/Source/WebCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r115926 r115928  
     12012-05-02  Levi Weintraub  <leviw@chromium.org>
     2
     3        Convert FractionalLayoutUnit overflow assertions to stderr warnings
     4        https://bugs.webkit.org/show_bug.cgi?id=85393
     5
     6        Reviewed by Eric Seidel.
     7
     8        Writing warnings to stderr when FractionalLayoutUnits overflow on debug builds instead of asserting
     9        and crashing. It can be very useful to WebKit developers know when overflow is occurring, but it's
     10        not always a programming error, so assert wasn't the right action.
     11
     12        No new tests. No change in behavior.
     13
     14        * platform/FractionalLayoutUnit.h:
     15        (WebCore):
     16        (WebCore::FractionalLayoutUnit::FractionalLayoutUnit):
     17        (WebCore::FractionalLayoutUnit::toUnsigned):
     18        (WebCore::FractionalLayoutUnit::setRawValue):
     19
    1202012-04-18  Jon Honeycutt  <jhoneycutt@apple.com>
    221
  • trunk/Source/WebCore/platform/FractionalLayoutUnit.h

    r115647 r115928  
    3939namespace WebCore {
    4040
     41#ifdef NDEBUG
     42
     43#define REPORT_OVERFLOW(doesOverflow) ((void)0)
     44
     45#else
     46
     47#define REPORT_OVERFLOW(doesOverflow) do \
     48    if (!(doesOverflow)) { \
     49        WTFReportError(__FILE__, __LINE__, WTF_PRETTY_FUNCTION, "!(%s)", #doesOverflow); \
     50    } \
     51while (0)
     52
     53#endif
     54
    4155#if ENABLE(SUBPIXEL_LAYOUT)
    4256static const int kFixedPointDenominator = 60;
     
    5468   
    5569    FractionalLayoutUnit() : m_value(0) { }
    56     FractionalLayoutUnit(int value) { ASSERT(isInBounds(value)); m_value = value * kFixedPointDenominator; }
    57     FractionalLayoutUnit(unsigned short value) { ASSERT(isInBounds(value)); m_value = value * kFixedPointDenominator; }
    58     FractionalLayoutUnit(unsigned int value) { ASSERT(isInBounds(value)); m_value = value * kFixedPointDenominator; }
    59     FractionalLayoutUnit(float value) { ASSERT(isInBounds(value)); m_value = value * kFixedPointDenominator; }
    60     FractionalLayoutUnit(double value) { ASSERT(isInBounds(value)); m_value = value * kFixedPointDenominator; }
     70    FractionalLayoutUnit(int value) { REPORT_OVERFLOW(isInBounds(value)); m_value = value * kFixedPointDenominator; }
     71    FractionalLayoutUnit(unsigned short value) { REPORT_OVERFLOW(isInBounds(value)); m_value = value * kFixedPointDenominator; }
     72    FractionalLayoutUnit(unsigned int value) { REPORT_OVERFLOW(isInBounds(value)); m_value = value * kFixedPointDenominator; }
     73    FractionalLayoutUnit(float value) { REPORT_OVERFLOW(isInBounds(value)); m_value = value * kFixedPointDenominator; }
     74    FractionalLayoutUnit(double value) { REPORT_OVERFLOW(isInBounds(value)); m_value = value * kFixedPointDenominator; }
    6175    FractionalLayoutUnit(const FractionalLayoutUnit& value) { m_value = value.rawValue(); }
    6276
    6377    inline int toInt() const { return m_value / kFixedPointDenominator; }
    64     inline unsigned toUnsigned() const { ASSERT(m_value >= 0); return toInt(); }
     78    inline unsigned toUnsigned() const { REPORT_OVERFLOW(m_value >= 0); return toInt(); }
    6579    inline float toFloat() const { return static_cast<float>(m_value) / kFixedPointDenominator; }
    6680    inline double toDouble() const { return static_cast<double>(m_value) / kFixedPointDenominator; }
     
    8296    inline void setRawValue(long long value)
    8397    {
    84         ASSERT(value > std::numeric_limits<int>::min() && value < std::numeric_limits<int>::max());
     98        REPORT_OVERFLOW(value > std::numeric_limits<int>::min() && value < std::numeric_limits<int>::max());
    8599        m_value = static_cast<int>(value);
    86100    }
Note: See TracChangeset for help on using the changeset viewer.