Changeset 168685 in webkit


Ignore:
Timestamp:
May 13, 2014 10:08:43 AM (10 years ago)
Author:
commit-queue@webkit.org
Message:

ASSERTION FAILED: leftCategory != CalcOther && rightCategory != CalcOther
in WebCore::CSSCalcBinaryOperation::createSimplified
https://bugs.webkit.org/show_bug.cgi?id=132870

Source/WebCore:
According to the standard, calc() should be able to handle angle, time
and frequency values as well: http://www.w3.org/TR/css3-values/#calc

Patch by Martin Hodovan <mhodovan.u-szeged@partner.samsung.com> on 2014-05-13
Reviewed by Darin Adler.

Test: fast/css/calc-with-angle-time-frequency.html

  • css/CSSCalculationValue.cpp:

(WebCore::unitCategory):
(WebCore::CSSCalcPrimitiveValue::createCalcExpression):
(WebCore::CSSCalcPrimitiveValue::computeLengthPx):
(WebCore::CSSCalcPrimitiveValue::addSubtractResult):
(WebCore::CSSCalcPrimitiveValue::determineCategory):
(WebCore::CSSCalcBinaryOperation::primitiveType)

  • css/CSSCalculationValue.h: extending CalculationCategory
  • css/CSSParser.cpp:

(WebCore::CSSParser::validCalculationUnit):

  • css/CSSPrimitiveValue.cpp:

(WebCore::CSSPrimitiveValue::primitiveType):

LayoutTests:
Added test contains calc() expressions with angle, time and frequency values,
covering all the newly introduced unit types, each of which used to fail.

Patch by Martin Hodovan <mhodovan.u-szeged@partner.samsung.com> on 2014-05-13
Reviewed by Darin Adler.

  • fast/css/calc-with-angle-time-frequency-expected.txt: Added.
  • fast/css/calc-with-angle-time-frequency.html: Added.
Location:
trunk
Files:
2 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r168682 r168685  
     12014-05-13  Martin Hodovan  <mhodovan.u-szeged@partner.samsung.com>
     2
     3        ASSERTION FAILED: leftCategory != CalcOther && rightCategory != CalcOther
     4        in WebCore::CSSCalcBinaryOperation::createSimplified
     5        https://bugs.webkit.org/show_bug.cgi?id=132870
     6
     7        Added test contains calc() expressions with angle, time and frequency values,
     8        covering all the newly introduced unit types, each of which used to fail.
     9
     10        Reviewed by Darin Adler.
     11
     12        * fast/css/calc-with-angle-time-frequency-expected.txt: Added.
     13        * fast/css/calc-with-angle-time-frequency.html: Added.
     14
    1152014-05-13  Krzysztof Wolanski  <k.wolanski@samsung.com>
    216
  • trunk/Source/WebCore/ChangeLog

    r168684 r168685  
     12014-05-13  Martin Hodovan  <mhodovan.u-szeged@partner.samsung.com>
     2
     3        ASSERTION FAILED: leftCategory != CalcOther && rightCategory != CalcOther
     4        in WebCore::CSSCalcBinaryOperation::createSimplified
     5        https://bugs.webkit.org/show_bug.cgi?id=132870
     6
     7        According to the standard, calc() should be able to handle angle, time
     8        and frequency values as well: http://www.w3.org/TR/css3-values/#calc
     9
     10        Reviewed by Darin Adler.
     11
     12        Test: fast/css/calc-with-angle-time-frequency.html
     13
     14        * css/CSSCalculationValue.cpp:
     15        (WebCore::unitCategory):
     16        (WebCore::CSSCalcPrimitiveValue::createCalcExpression):
     17        (WebCore::CSSCalcPrimitiveValue::computeLengthPx):
     18        (WebCore::CSSCalcPrimitiveValue::addSubtractResult):
     19        (WebCore::CSSCalcPrimitiveValue::determineCategory):
     20        (WebCore::CSSCalcBinaryOperation::primitiveType)
     21        * css/CSSCalculationValue.h: extending CalculationCategory
     22        * css/CSSParser.cpp:
     23        (WebCore::CSSParser::validCalculationUnit):
     24        * css/CSSPrimitiveValue.cpp:
     25        (WebCore::CSSPrimitiveValue::primitiveType):
     26
    1272014-05-13  Darin Adler  <darin@apple.com>
    228
  • trunk/Source/WebCore/css/CSSCalculationValue.cpp

    r167937 r168685  
    5757    case CSSPrimitiveValue::CSS_PARSER_INTEGER:
    5858        return CalcNumber;
    59     case CSSPrimitiveValue::CSS_PERCENTAGE:
    60         return CalcPercent;
    6159    case CSSPrimitiveValue::CSS_EMS:
    6260    case CSSPrimitiveValue::CSS_EXS:
     
    7068    case CSSPrimitiveValue::CSS_CHS:
    7169        return CalcLength;
     70    case CSSPrimitiveValue::CSS_PERCENTAGE:
     71        return CalcPercent;
     72    case CSSPrimitiveValue::CSS_DEG:
     73    case CSSPrimitiveValue::CSS_RAD:
     74    case CSSPrimitiveValue::CSS_GRAD:
     75    case CSSPrimitiveValue::CSS_TURN:
     76        return CalcAngle;
     77    case CSSPrimitiveValue::CSS_MS:
     78    case CSSPrimitiveValue::CSS_S:
     79        return CalcTime;
     80    case CSSPrimitiveValue::CSS_HZ:
     81    case CSSPrimitiveValue::CSS_KHZ:
     82        return CalcFrequency;
    7283    default:
    7384        return CalcOther;
     
    219230        // to a CalcExpressionNode. CalcPercentNumber makes no sense as a Length.
    220231        case CalcPercentNumber:
     232        case CalcAngle:
     233        case CalcTime:
     234        case CalcFrequency:
    221235        case CalcOther:
    222236            ASSERT_NOT_REACHED();
     
    243257        case CalcPercentLength:
    244258        case CalcPercentNumber:
     259        case CalcAngle:
     260        case CalcTime:
     261        case CalcFrequency:
    245262        case CalcOther:
    246263            ASSERT_NOT_REACHED();
     
    275292};
    276293
    277 static const CalculationCategory addSubtractResult[CalcOther][CalcOther] = {
     294static const CalculationCategory addSubtractResult[CalcAngle][CalcAngle] = {
    278295//    CalcNumber         CalcLength         CalcPercent        CalcPercentNumber  CalcPercentLength
    279296    { CalcNumber,        CalcOther,         CalcPercentNumber, CalcPercentNumber, CalcOther }, //         CalcNumber
     
    295312    case CalcAdd:
    296313    case CalcSubtract:
    297         return addSubtractResult[leftCategory][rightCategory];
     314        if (leftCategory < CalcAngle || rightCategory < CalcAngle)
     315            return addSubtractResult[leftCategory][rightCategory];
     316        if (leftCategory == rightCategory)
     317            return leftCategory;
     318        return CalcOther;
    298319    case CalcMultiply:
    299320        if (leftCategory != CalcNumber && rightCategory != CalcNumber)
     
    471492        case CalcPercentLength:
    472493        case CalcPercentNumber:
     494        case CalcAngle:
     495            return CSSPrimitiveValue::CSS_DEG;
     496        case CalcTime:
     497            return CSSPrimitiveValue::CSS_MS;
     498        case CalcFrequency:
     499            return CSSPrimitiveValue::CSS_HZ;
    473500        case CalcOther:
    474501            return CSSPrimitiveValue::CSS_UNKNOWN;
  • trunk/Source/WebCore/css/CSSCalculationValue.h

    r167937 r168685  
    4747    CalcPercentNumber,
    4848    CalcPercentLength,
     49    CalcAngle,
     50    CalcTime,
     51    CalcFrequency,
    4952    CalcOther
    5053};
  • trunk/Source/WebCore/css/CSSParser.cpp

    r168416 r168685  
    15591559    bool b = false;
    15601560    switch (m_parsedCalculation->category()) {
    1561     case CalcLength:
    1562         b = (unitflags & FLength);
    1563         break;
    1564     case CalcPercent:
    1565         b = (unitflags & FPercent);
    1566         if (b && mustBeNonNegative && m_parsedCalculation->isNegative())
    1567             b = false;
    1568         break;
    15691561    case CalcNumber:
    15701562        b = (unitflags & FNumber);
     
    15741566            b = false;
    15751567        break;
     1568    case CalcLength:
     1569        b = (unitflags & FLength);
     1570        break;
     1571    case CalcPercent:
     1572        b = (unitflags & FPercent);
     1573        if (b && mustBeNonNegative && m_parsedCalculation->isNegative())
     1574            b = false;
     1575        break;
    15761576    case CalcPercentLength:
    15771577        b = (unitflags & FPercent) && (unitflags & FLength);
     
    15791579    case CalcPercentNumber:
    15801580        b = (unitflags & FPercent) && (unitflags & FNumber);
     1581        break;
     1582    case CalcAngle:
     1583        b = (unitflags & FAngle);
     1584        break;
     1585    case CalcTime:
     1586        b = (unitflags & FTime);
     1587        break;
     1588    case CalcFrequency:
     1589        b = (unitflags & FFrequency);
    15811590        break;
    15821591    case CalcOther:
  • trunk/Source/WebCore/css/CSSPrimitiveValue.cpp

    r167937 r168685  
    194194    case CalcNumber:
    195195        return CSSPrimitiveValue::CSS_NUMBER;
     196    case CalcLength:
     197        return CSSPrimitiveValue::CSS_PX;
    196198    case CalcPercent:
    197199        return CSSPrimitiveValue::CSS_PERCENTAGE;
    198     case CalcLength:
    199         return CSSPrimitiveValue::CSS_PX;
    200200    case CalcPercentNumber:
    201201        return CSSPrimitiveValue::CSS_CALC_PERCENTAGE_WITH_NUMBER;
    202202    case CalcPercentLength:
    203203        return CSSPrimitiveValue::CSS_CALC_PERCENTAGE_WITH_LENGTH;
     204    case CalcAngle:
     205        return CSSPrimitiveValue::CSS_DEG;
     206    case CalcTime:
     207        return CSSPrimitiveValue::CSS_MS;
     208    case CalcFrequency:
     209        return CSSPrimitiveValue::CSS_HZ;
    204210    case CalcOther:
    205211        return CSSPrimitiveValue::CSS_UNKNOWN;
Note: See TracChangeset for help on using the changeset viewer.