- Revision
- 168685
- Author
- [email protected]
- Date
- 2014-05-13 10:08:43 -0700 (Tue, 13 May 2014)
Log 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 <[email protected]> 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 <[email protected]> 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.
Modified Paths
Added Paths
Diff
Modified: trunk/LayoutTests/ChangeLog (168684 => 168685)
--- trunk/LayoutTests/ChangeLog 2014-05-13 16:26:16 UTC (rev 168684)
+++ trunk/LayoutTests/ChangeLog 2014-05-13 17:08:43 UTC (rev 168685)
@@ -1,3 +1,17 @@
+2014-05-13 Martin Hodovan <[email protected]>
+
+ ASSERTION FAILED: leftCategory != CalcOther && rightCategory != CalcOther
+ in WebCore::CSSCalcBinaryOperation::createSimplified
+ https://bugs.webkit.org/show_bug.cgi?id=132870
+
+ Added test contains calc() expressions with angle, time and frequency values,
+ covering all the newly introduced unit types, each of which used to fail.
+
+ Reviewed by Darin Adler.
+
+ * fast/css/calc-with-angle-time-frequency-expected.txt: Added.
+ * fast/css/calc-with-angle-time-frequency.html: Added.
+
2014-05-13 Krzysztof Wolanski <[email protected]>
[EFL] Rebaseline after r168575
Added: trunk/LayoutTests/fast/css/calc-with-angle-time-frequency-expected.txt (0 => 168685)
--- trunk/LayoutTests/fast/css/calc-with-angle-time-frequency-expected.txt (rev 0)
+++ trunk/LayoutTests/fast/css/calc-with-angle-time-frequency-expected.txt 2014-05-13 17:08:43 UTC (rev 168685)
@@ -0,0 +1 @@
+This test passes if it does not crash.
Added: trunk/LayoutTests/fast/css/calc-with-angle-time-frequency.html (0 => 168685)
--- trunk/LayoutTests/fast/css/calc-with-angle-time-frequency.html (rev 0)
+++ trunk/LayoutTests/fast/css/calc-with-angle-time-frequency.html 2014-05-13 17:08:43 UTC (rev 168685)
@@ -0,0 +1,25 @@
+<html>
+ <head>
+ <script>
+ if (window.testRunner)
+ testRunner.dumpAsText();
+ </script>
+ <style>
+ * {
+ width: calc(300deg/2);
+ width: calc(300rad/2);
+ width: calc(300grad/2);
+ width: calc(300turn/2);
+
+ width: calc(300ms/2);
+ width: calc(300s/2);
+
+ width: calc(300hz/2);
+ width: calc(300khz/2);
+ }
+ </style>
+ </head>
+ <body>
+ This test passes if it does not crash.
+ </body>
+</html>
Modified: trunk/Source/WebCore/ChangeLog (168684 => 168685)
--- trunk/Source/WebCore/ChangeLog 2014-05-13 16:26:16 UTC (rev 168684)
+++ trunk/Source/WebCore/ChangeLog 2014-05-13 17:08:43 UTC (rev 168685)
@@ -1,3 +1,29 @@
+2014-05-13 Martin Hodovan <[email protected]>
+
+ ASSERTION FAILED: leftCategory != CalcOther && rightCategory != CalcOther
+ in WebCore::CSSCalcBinaryOperation::createSimplified
+ https://bugs.webkit.org/show_bug.cgi?id=132870
+
+ 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
+
+ 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):
+
2014-05-13 Darin Adler <[email protected]>
Try to fix the !ENABLE(ICONDATABASE) build
Modified: trunk/Source/WebCore/css/CSSCalculationValue.cpp (168684 => 168685)
--- trunk/Source/WebCore/css/CSSCalculationValue.cpp 2014-05-13 16:26:16 UTC (rev 168684)
+++ trunk/Source/WebCore/css/CSSCalculationValue.cpp 2014-05-13 17:08:43 UTC (rev 168685)
@@ -56,8 +56,6 @@
case CSSPrimitiveValue::CSS_NUMBER:
case CSSPrimitiveValue::CSS_PARSER_INTEGER:
return CalcNumber;
- case CSSPrimitiveValue::CSS_PERCENTAGE:
- return CalcPercent;
case CSSPrimitiveValue::CSS_EMS:
case CSSPrimitiveValue::CSS_EXS:
case CSSPrimitiveValue::CSS_PX:
@@ -69,6 +67,19 @@
case CSSPrimitiveValue::CSS_REMS:
case CSSPrimitiveValue::CSS_CHS:
return CalcLength;
+ case CSSPrimitiveValue::CSS_PERCENTAGE:
+ return CalcPercent;
+ case CSSPrimitiveValue::CSS_DEG:
+ case CSSPrimitiveValue::CSS_RAD:
+ case CSSPrimitiveValue::CSS_GRAD:
+ case CSSPrimitiveValue::CSS_TURN:
+ return CalcAngle;
+ case CSSPrimitiveValue::CSS_MS:
+ case CSSPrimitiveValue::CSS_S:
+ return CalcTime;
+ case CSSPrimitiveValue::CSS_HZ:
+ case CSSPrimitiveValue::CSS_KHZ:
+ return CalcFrequency;
default:
return CalcOther;
}
@@ -218,6 +229,9 @@
// Only types that could be part of a Length _expression_ can be converted
// to a CalcExpressionNode. CalcPercentNumber makes no sense as a Length.
case CalcPercentNumber:
+ case CalcAngle:
+ case CalcTime:
+ case CalcFrequency:
case CalcOther:
ASSERT_NOT_REACHED();
}
@@ -242,6 +256,9 @@
return m_value->getDoubleValue();
case CalcPercentLength:
case CalcPercentNumber:
+ case CalcAngle:
+ case CalcTime:
+ case CalcFrequency:
case CalcOther:
ASSERT_NOT_REACHED();
break;
@@ -274,7 +291,7 @@
RefPtr<CSSPrimitiveValue> m_value;
};
-static const CalculationCategory addSubtractResult[CalcOther][CalcOther] = {
+static const CalculationCategory addSubtractResult[CalcAngle][CalcAngle] = {
// CalcNumber CalcLength CalcPercent CalcPercentNumber CalcPercentLength
{ CalcNumber, CalcOther, CalcPercentNumber, CalcPercentNumber, CalcOther }, // CalcNumber
{ CalcOther, CalcLength, CalcPercentLength, CalcOther, CalcPercentLength }, // CalcLength
@@ -294,7 +311,11 @@
switch (op) {
case CalcAdd:
case CalcSubtract:
- return addSubtractResult[leftCategory][rightCategory];
+ if (leftCategory < CalcAngle || rightCategory < CalcAngle)
+ return addSubtractResult[leftCategory][rightCategory];
+ if (leftCategory == rightCategory)
+ return leftCategory;
+ return CalcOther;
case CalcMultiply:
if (leftCategory != CalcNumber && rightCategory != CalcNumber)
return CalcOther;
@@ -470,6 +491,12 @@
}
case CalcPercentLength:
case CalcPercentNumber:
+ case CalcAngle:
+ return CSSPrimitiveValue::CSS_DEG;
+ case CalcTime:
+ return CSSPrimitiveValue::CSS_MS;
+ case CalcFrequency:
+ return CSSPrimitiveValue::CSS_HZ;
case CalcOther:
return CSSPrimitiveValue::CSS_UNKNOWN;
}
Modified: trunk/Source/WebCore/css/CSSCalculationValue.h (168684 => 168685)
--- trunk/Source/WebCore/css/CSSCalculationValue.h 2014-05-13 16:26:16 UTC (rev 168684)
+++ trunk/Source/WebCore/css/CSSCalculationValue.h 2014-05-13 17:08:43 UTC (rev 168685)
@@ -46,6 +46,9 @@
CalcPercent,
CalcPercentNumber,
CalcPercentLength,
+ CalcAngle,
+ CalcTime,
+ CalcFrequency,
CalcOther
};
Modified: trunk/Source/WebCore/css/CSSParser.cpp (168684 => 168685)
--- trunk/Source/WebCore/css/CSSParser.cpp 2014-05-13 16:26:16 UTC (rev 168684)
+++ trunk/Source/WebCore/css/CSSParser.cpp 2014-05-13 17:08:43 UTC (rev 168685)
@@ -1558,6 +1558,13 @@
bool b = false;
switch (m_parsedCalculation->category()) {
+ case CalcNumber:
+ b = (unitflags & FNumber);
+ if (!b && (unitflags & FInteger) && m_parsedCalculation->isInt())
+ b = true;
+ if (b && mustBeNonNegative && m_parsedCalculation->isNegative())
+ b = false;
+ break;
case CalcLength:
b = (unitflags & FLength);
break;
@@ -1566,19 +1573,21 @@
if (b && mustBeNonNegative && m_parsedCalculation->isNegative())
b = false;
break;
- case CalcNumber:
- b = (unitflags & FNumber);
- if (!b && (unitflags & FInteger) && m_parsedCalculation->isInt())
- b = true;
- if (b && mustBeNonNegative && m_parsedCalculation->isNegative())
- b = false;
- break;
case CalcPercentLength:
b = (unitflags & FPercent) && (unitflags & FLength);
break;
case CalcPercentNumber:
b = (unitflags & FPercent) && (unitflags & FNumber);
break;
+ case CalcAngle:
+ b = (unitflags & FAngle);
+ break;
+ case CalcTime:
+ b = (unitflags & FTime);
+ break;
+ case CalcFrequency:
+ b = (unitflags & FFrequency);
+ break;
case CalcOther:
break;
}
Modified: trunk/Source/WebCore/css/CSSPrimitiveValue.cpp (168684 => 168685)
--- trunk/Source/WebCore/css/CSSPrimitiveValue.cpp 2014-05-13 16:26:16 UTC (rev 168684)
+++ trunk/Source/WebCore/css/CSSPrimitiveValue.cpp 2014-05-13 17:08:43 UTC (rev 168685)
@@ -193,14 +193,20 @@
switch (m_value.calc->category()) {
case CalcNumber:
return CSSPrimitiveValue::CSS_NUMBER;
+ case CalcLength:
+ return CSSPrimitiveValue::CSS_PX;
case CalcPercent:
return CSSPrimitiveValue::CSS_PERCENTAGE;
- case CalcLength:
- return CSSPrimitiveValue::CSS_PX;
case CalcPercentNumber:
return CSSPrimitiveValue::CSS_CALC_PERCENTAGE_WITH_NUMBER;
case CalcPercentLength:
return CSSPrimitiveValue::CSS_CALC_PERCENTAGE_WITH_LENGTH;
+ case CalcAngle:
+ return CSSPrimitiveValue::CSS_DEG;
+ case CalcTime:
+ return CSSPrimitiveValue::CSS_MS;
+ case CalcFrequency:
+ return CSSPrimitiveValue::CSS_HZ;
case CalcOther:
return CSSPrimitiveValue::CSS_UNKNOWN;
}