Bug 1379436 - Simplify numbers before returning from ParseCalcMultiplicativeExpression. r?xidorn draft
authorMasatoshi Kimura <VYV03354@nifty.ne.jp>
Sun, 09 Jul 2017 19:42:39 +0900
changeset 605774 f5ca4e9a0d3f7f725e0cf8414ffbb60fce76868a
parent 605773 d702ca84d8b8396f7ef409ff0d173b1e08787513
child 636589 e5f8ea9edf8386d6847242757361191f1f297c15
push id67512
push userVYV03354@nifty.ne.jp
push dateSun, 09 Jul 2017 10:43:38 +0000
reviewersxidorn
bugs1379436
milestone56.0a1
Bug 1379436 - Simplify numbers before returning from ParseCalcMultiplicativeExpression. r?xidorn MozReview-Commit-ID: HMLWU1Wfynp
layout/reftests/css-calc/line-height-2-ref.html
layout/reftests/css-calc/line-height-2.html
layout/reftests/css-calc/reftest.list
layout/style/nsCSSParser.cpp
new file mode 100644
--- /dev/null
+++ b/layout/reftests/css-calc/line-height-2-ref.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html><meta charset=utf-8>
+<style>
+.a1, .a2, .a3, .a4, .a5, .a6 { float: left; }
+.a1 { line-height: 2; }
+.a2 { line-height: 6; }
+.a3 { line-height: 6px; }
+.a4 { line-height: 6; }
+.a5 { line-height: 6; }
+.a6 { line-height: 6; }
+</style>
+<p class="a1">abc<br>def</p>
+<p class="a2">abc<br>def</p>
+<p class="a3">abc<br>def</p>
+<p class="a4">abc<br>def</p>
+<p class="a5">abc<br>def</p>
+<p class="a6">abc<br>def</p>
new file mode 100644
--- /dev/null
+++ b/layout/reftests/css-calc/line-height-2.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html><meta charset=utf-8>
+<style>
+.a1, .a2, .a3, .a4, .a5, .a6 { float: left; }
+.a1 { line-height: calc(1*2); }
+.a2 { line-height: calc(1*2*3); }
+.a3 { line-height: calc(1*2*3*1px); }
+.a4 { line-height: calc((1*2)*3); }
+.a5 { line-height: calc(1*(2*3)); }
+.a6 { line-height: calc((1*2*3)); }
+</style>
+<p class="a1">abc<br>def</p>
+<p class="a2">abc<br>def</p>
+<p class="a3">abc<br>def</p>
+<p class="a4">abc<br>def</p>
+<p class="a5">abc<br>def</p>
+<p class="a6">abc<br>def</p>
--- a/layout/reftests/css-calc/reftest.list
+++ b/layout/reftests/css-calc/reftest.list
@@ -1,2 +1,3 @@
 == background-image-gradient-1.html background-image-gradient-1-ref.html
 == line-height-1.html line-height-1-ref.html
+== line-height-2.html line-height-2-ref.html
--- a/layout/style/nsCSSParser.cpp
+++ b/layout/style/nsCSSParser.cpp
@@ -13687,16 +13687,19 @@ CSSParserImpl::ParseCalcMultiplicativeEx
 
   // Adjust aVariantMask (see comments above function) to reflect which
   // option we took.
   if (aVariantMask & VARIANT_NUMBER) {
     if (gotValue) {
       aVariantMask &= ~int32_t(VARIANT_NUMBER);
     } else {
       aVariantMask = VARIANT_NUMBER;
+      mozilla::css::ReduceNumberCalcOps ops;
+      float number = mozilla::css::ComputeCalc(aValue, ops);
+      aValue.SetFloatValue(number, eCSSUnit_Number);
     }
   } else {
     if (!gotValue) {
       // We had to find a value, but we didn't.
       return false;
     }
   }