<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[206894] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/206894">206894</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2016-10-06 19:33:38 -0700 (Thu, 06 Oct 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Unreviewed, rolling out <a href="http://trac.webkit.org/projects/webkit/changeset/206713">r206713</a>.
https://bugs.webkit.org/show_bug.cgi?id=163097

triggers apparent codegen bug on ARM 32-bit (Requested by smfr
on #webkit).

Reverted changeset:

&quot;Support transitions/animations of background-position with
right/bottom-relative values&quot;
https://bugs.webkit.org/show_bug.cgi?id=162048
http://trac.webkit.org/changeset/206713</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsfastshapesshapeoutsidefloatsshapeoutsideanimationexpectedtxt">trunk/LayoutTests/fast/shapes/shape-outside-floats/shape-outside-animation-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastshapesshapeoutsidefloatsshapeoutsideanimationhtml">trunk/LayoutTests/fast/shapes/shape-outside-floats/shape-outside-animation.html</a></li>
<li><a href="#trunkLayoutTeststransitionsresourcestransitiontesthelpersjs">trunk/LayoutTests/transitions/resources/transition-test-helpers.js</a></li>
<li><a href="#trunkLayoutTeststransitionssvgtransitionsexpectedtxt">trunk/LayoutTests/transitions/svg-transitions-expected.txt</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorecssStyleBuilderConverterh">trunk/Source/WebCore/css/StyleBuilderConverter.h</a></li>
<li><a href="#trunkSourceWebCorepageanimationCSSPropertyAnimationcpp">trunk/Source/WebCore/page/animation/CSSPropertyAnimation.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformCalculationValuecpp">trunk/Source/WebCore/platform/CalculationValue.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformCalculationValueh">trunk/Source/WebCore/platform/CalculationValue.h</a></li>
<li><a href="#trunkSourceWebCoreplatformLengthcpp">trunk/Source/WebCore/platform/Length.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformLengthh">trunk/Source/WebCore/platform/Length.h</a></li>
<li><a href="#trunkSourceWebCorerenderingstyleBasicShapescpp">trunk/Source/WebCore/rendering/style/BasicShapes.cpp</a></li>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsTestWebKitAPITestsWebCoreCalculationValuecpp">trunk/Tools/TestWebKitAPI/Tests/WebCore/CalculationValue.cpp</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkLayoutTeststransitionsbackgroundpositiontransitionsexpectedtxt">trunk/LayoutTests/transitions/background-position-transitions-expected.txt</a></li>
<li><a href="#trunkLayoutTeststransitionsbackgroundpositiontransitionshtml">trunk/LayoutTests/transitions/background-position-transitions.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (206893 => 206894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2016-10-07 01:54:14 UTC (rev 206893)
+++ trunk/LayoutTests/ChangeLog        2016-10-07 02:33:38 UTC (rev 206894)
</span><span class="lines">@@ -1,3 +1,18 @@
</span><ins>+2016-10-06  Commit Queue  &lt;commit-queue@webkit.org&gt;
+
+        Unreviewed, rolling out r206713.
+        https://bugs.webkit.org/show_bug.cgi?id=163097
+
+        triggers apparent codegen bug on ARM 32-bit (Requested by smfr
+        on #webkit).
+
+        Reverted changeset:
+
+        &quot;Support transitions/animations of background-position with
+        right/bottom-relative values&quot;
+        https://bugs.webkit.org/show_bug.cgi?id=162048
+        http://trac.webkit.org/changeset/206713
+
</ins><span class="cx"> 2016-10-06  Ryosuke Niwa  &lt;rniwa@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Upgrading and constructing element should always report exception instead of rethrowing
</span></span></pre></div>
<a id="trunkLayoutTestsfastshapesshapeoutsidefloatsshapeoutsideanimationexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/shapes/shape-outside-floats/shape-outside-animation-expected.txt (206893 => 206894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/shapes/shape-outside-floats/shape-outside-animation-expected.txt        2016-10-07 01:54:14 UTC (rev 206893)
+++ trunk/LayoutTests/fast/shapes/shape-outside-floats/shape-outside-animation-expected.txt        2016-10-07 02:33:38 UTC (rev 206894)
</span><span class="lines">@@ -22,6 +22,6 @@
</span><span class="cx"> PASS - &quot;webkitShapeOutside&quot; property for &quot;circle-to-bottomright-using-keyword-box&quot; element at 1s saw something close to: circle(35% at 75% 75%)
</span><span class="cx"> PASS - &quot;webkitShapeOutside&quot; property for &quot;circle-to-bottomright-using-keyword-box&quot; element at 1s saw something close to: circle(35% at 75% 75%)
</span><span class="cx"> PASS - &quot;webkitShapeOutside&quot; property for &quot;circle-to-bottomright-extended-box&quot; element at 1s saw something close to: circle(35% at 75% 75%)
</span><del>-PASS - &quot;webkitShapeOutside&quot; property for &quot;circle-to-bottomright-extended-using-keyword-box&quot; element at 1s saw something close to: circle(35% at 70% calc((50% * 0.5) + ((100% - 20px) * 0.5)))
-PASS - &quot;webkitShapeOutside&quot; property for &quot;circle-to-bottomright-extended-using-keyword-2-box&quot; element at 1s saw something close to: circle(35% at 70% calc((50% * 0.5) + ((100% - 10px) * 0.5)))
</del><ins>+PASS - &quot;webkitShapeOutside&quot; property for &quot;circle-to-bottomright-extended-using-keyword-box&quot; element at 1s saw something close to: circle(35% at calc((50% * 0.5) + ((100% - 10%) * 0.5)) calc((50% * 0.5) + ((100% - 20px) * 0.5)))
+PASS - &quot;webkitShapeOutside&quot; property for &quot;circle-to-bottomright-extended-using-keyword-2-box&quot; element at 1s saw something close to: circle(35% at calc((50% * 0.5) + ((100% - 10%) * 0.5)) calc((50% * 0.5) + ((100% - 10px) * 0.5)))
</ins><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastshapesshapeoutsidefloatsshapeoutsideanimationhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/shapes/shape-outside-floats/shape-outside-animation.html (206893 => 206894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/shapes/shape-outside-floats/shape-outside-animation.html        2016-10-07 01:54:14 UTC (rev 206893)
+++ trunk/LayoutTests/fast/shapes/shape-outside-floats/shape-outside-animation.html        2016-10-07 02:33:38 UTC (rev 206894)
</span><span class="lines">@@ -146,8 +146,8 @@
</span><span class="cx">       [&quot;circle-to-bottomright-using-keyword-anim&quot;,  1, &quot;circle-to-bottomright-using-keyword-box&quot;, &quot;webkitShapeOutside&quot;, &quot;circle(35% at 75% 75%)&quot;, 0.05],
</span><span class="cx">       [&quot;circle-to-bottomright-using-keyword-anim&quot;,  1, &quot;circle-to-bottomright-using-keyword-box&quot;, &quot;webkitShapeOutside&quot;, &quot;circle(35% at 75% 75%)&quot;, 0.05],
</span><span class="cx">       [&quot;circle-to-bottomright-extended-anim&quot;,  1, &quot;circle-to-bottomright-extended-box&quot;, &quot;webkitShapeOutside&quot;, &quot;circle(35% at 75% 75%)&quot;, 0.05],
</span><del>-      [&quot;circle-to-bottomright-extended-using-keyword-anim&quot;,  1, &quot;circle-to-bottomright-extended-using-keyword-box&quot;, &quot;webkitShapeOutside&quot;, &quot;circle(35% at 70% calc((50% * 0.5) + ((100% - 20px) * 0.5)))&quot;, 0.01],
-      [&quot;circle-to-bottomright-extended-using-keyword-2-anim&quot;,  1, &quot;circle-to-bottomright-extended-using-keyword-2-box&quot;, &quot;webkitShapeOutside&quot;, &quot;circle(35% at 70% calc((50% * 0.5) + ((100% - 10px) * 0.5)))&quot;, 0.01],
</del><ins>+      [&quot;circle-to-bottomright-extended-using-keyword-anim&quot;,  1, &quot;circle-to-bottomright-extended-using-keyword-box&quot;, &quot;webkitShapeOutside&quot;, &quot;circle(35% at calc((50% * 0.5) + ((100% - 10%) * 0.5)) calc((50% * 0.5) + ((100% - 20px) * 0.5)))&quot;, 0.01],
+      [&quot;circle-to-bottomright-extended-using-keyword-2-anim&quot;,  1, &quot;circle-to-bottomright-extended-using-keyword-2-box&quot;, &quot;webkitShapeOutside&quot;, &quot;circle(35% at calc((50% * 0.5) + ((100% - 10%) * 0.5)) calc((50% * 0.5) + ((100% - 10px) * 0.5)))&quot;, 0.01],
</ins><span class="cx">     ];
</span><span class="cx">     
</span><span class="cx">     runAnimationTest(expectedValues);
</span></span></pre></div>
<a id="trunkLayoutTeststransitionsbackgroundpositiontransitionsexpectedtxt"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/transitions/background-position-transitions-expected.txt (206893 => 206894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/transitions/background-position-transitions-expected.txt        2016-10-07 01:54:14 UTC (rev 206893)
+++ trunk/LayoutTests/transitions/background-position-transitions-expected.txt        2016-10-07 02:33:38 UTC (rev 206894)
</span><span class="lines">@@ -1,4 +0,0 @@
</span><del>-PASS - &quot;background-position&quot; property for &quot;box1&quot; element at 0.5s saw something close to: 45,60
-PASS - &quot;background-position&quot; property for &quot;box2&quot; element at 0.5s saw something close to: 45,60
-PASS - &quot;background-position&quot; property for &quot;box3&quot; element at 0.5s saw something close to: 10,0.5,100,80,0,0.5,20,0.5,100,100,0,0.5
-
</del></span></pre></div>
<a id="trunkLayoutTeststransitionsbackgroundpositiontransitionshtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/transitions/background-position-transitions.html (206893 => 206894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/transitions/background-position-transitions.html        2016-10-07 01:54:14 UTC (rev 206893)
+++ trunk/LayoutTests/transitions/background-position-transitions.html        2016-10-07 02:33:38 UTC (rev 206894)
</span><span class="lines">@@ -1,66 +0,0 @@
</span><del>-&lt;!DOCTYPE&gt;
-
-&lt;html&gt;
-&lt;head&gt;
-    &lt;style&gt;
-        .box {
-            height: 100px;
-            width: 100px;
-            margin: 10px;
-            background: url('../fast/backgrounds/repeat/resources/gradient.gif') repeat 0 0;
-            transition-duration: 1s;
-            transition-timing-function: linear;
-            transition-property: background-position;
-        }
-
-        #box1 {
-            background-position: 10px 20px;
-        }
-
-        body.final #box1 {
-            background-position: left 80px top 100px;
-        }
-
-        #box2 {
-            background-position: right 10px bottom 20px;
-        }
-
-        body.final #box2 {
-            background-position: right 80px bottom 100px;
-        }
-
-        #box3 {
-            background-position: 10px 20px;
-        }
-
-        body.final #box3 {
-            background-position: right 80px bottom 100px;
-        }
-    &lt;/style&gt;
-    &lt;script src=&quot;resources/transition-test-helpers.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
-    &lt;script&gt;
-        const expectedValues = [
-        // [time, element-id, property, expected-value, tolerance]
-        [0.5, 'box1', 'background-position', [45, 60], 2],
-        [0.5, 'box2', 'background-position', [45, 60], 2],
-        [0.5, 'box3', 'background-position', [10,0.5,100,80,0,0.5,20,0.5,100,100,0,0.5], 2], // Numbers extracted from a calc() expression.
-        ];
-
-        function setupTest()
-        {
-            document.body.classList.add('final');
-        }
-
-        runTransitionTest(expectedValues, setupTest, usePauseAPI);
-    &lt;/script&gt;
-&lt;/head&gt;
-&lt;body&gt;
-
-    &lt;div id=&quot;box1&quot; class=&quot;box&quot;&gt;&lt;/div&gt;
-    &lt;div id=&quot;box2&quot; class=&quot;box&quot;&gt;&lt;/div&gt;
-    &lt;div id=&quot;box3&quot; class=&quot;box&quot;&gt;&lt;/div&gt;
-
-    &lt;pre id=&quot;result&quot;&gt;&lt;/pre&gt;
-
-&lt;/body&gt;
-&lt;/html&gt;
</del></span></pre></div>
<a id="trunkLayoutTeststransitionsresourcestransitiontesthelpersjs"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/transitions/resources/transition-test-helpers.js (206893 => 206894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/transitions/resources/transition-test-helpers.js        2016-10-07 01:54:14 UTC (rev 206893)
+++ trunk/LayoutTests/transitions/resources/transition-test-helpers.js        2016-10-07 02:33:38 UTC (rev 206894)
</span><span class="lines">@@ -110,77 +110,6 @@
</span><span class="cx">     return null;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-function hasFloatValue(value)
-{
-    switch (value.primitiveType) {
-    case CSSPrimitiveValue.CSS_FR:
-    case CSSPrimitiveValue.CSS_NUMBER:
-    case CSSPrimitiveValue.CSS_PARSER_INTEGER:
-    case CSSPrimitiveValue.CSS_PERCENTAGE:
-    case CSSPrimitiveValue.CSS_EMS:
-    case CSSPrimitiveValue.CSS_EXS:
-    case CSSPrimitiveValue.CSS_CHS:
-    case CSSPrimitiveValue.CSS_REMS:
-    case CSSPrimitiveValue.CSS_PX:
-    case CSSPrimitiveValue.CSS_CM:
-    case CSSPrimitiveValue.CSS_MM:
-    case CSSPrimitiveValue.CSS_IN:
-    case CSSPrimitiveValue.CSS_PT:
-    case CSSPrimitiveValue.CSS_PC:
-    case CSSPrimitiveValue.CSS_DEG:
-    case CSSPrimitiveValue.CSS_RAD:
-    case CSSPrimitiveValue.CSS_GRAD:
-    case CSSPrimitiveValue.CSS_TURN:
-    case CSSPrimitiveValue.CSS_MS:
-    case CSSPrimitiveValue.CSS_S:
-    case CSSPrimitiveValue.CSS_HZ:
-    case CSSPrimitiveValue.CSS_KHZ:
-    case CSSPrimitiveValue.CSS_DIMENSION:
-    case CSSPrimitiveValue.CSS_VW:
-    case CSSPrimitiveValue.CSS_VH:
-    case CSSPrimitiveValue.CSS_VMIN:
-    case CSSPrimitiveValue.CSS_VMAX:
-    case CSSPrimitiveValue.CSS_DPPX:
-    case CSSPrimitiveValue.CSS_DPI:
-    case CSSPrimitiveValue.CSS_DPCM:
-        return true;
-    }
-    return false;
-}
-
-function getNumericValue(cssValue)
-{
-    if (hasFloatValue(cssValue.primitiveType))
-        return cssValue.getFloatValue(cssValue.primitiveType);
-
-    return -1;
-}
-
-function isCalcPrimitiveValue(value)
-{
-    switch (value.primitiveType) {
-    case 113: // CSSPrimitiveValue.CSS_CALC:
-    case 114: // CSSPrimitiveValue.CSS_CALC_PERCENTAGE_WITH_NUMBER:
-    case 115: // CSSPrimitiveValue.CSS_CALC_PERCENTAGE_WITH_LENGTH:
-    return true;
-    }
-    return false;
-}
-
-function extractNumbersFromCalcExpression(value, values)
-{
-    var calcRegexp = /^calc\((.+)\)$/;
-    var result = calcRegexp.exec(value.cssText);
-    var numberMatch = /([^\.\-0-9]*)(-?[\.0-9]+)/;
-    var remainder = result[1];
-    var match;
-    while ((match = numberMatch.exec(remainder)) !== null) {
-        var skipLength = match[1].length + match[2].length;
-        values.push(parseFloat(match[2]))
-        remainder = remainder.substr(skipLength + 1);
-    }
-}
-
</del><span class="cx"> function checkExpectedValue(expected, index)
</span><span class="cx"> {
</span><span class="cx">     var time = expected[index][0];
</span><span class="lines">@@ -265,27 +194,23 @@
</span><span class="cx">         if (computedStyle.cssValueType == CSSValue.CSS_VALUE_LIST) {
</span><span class="cx">             var values = [];
</span><span class="cx">             for (var i = 0; i &lt; computedStyle.length; ++i) {
</span><del>-                var styleValue = computedStyle[i];
-                switch (styleValue.cssValueType) {
</del><ins>+                switch (computedStyle[i].cssValueType) {
</ins><span class="cx">                   case CSSValue.CSS_PRIMITIVE_VALUE:
</span><del>-                    if (hasFloatValue(styleValue))
-                        values.push(styleValue.getFloatValue(CSSPrimitiveValue.CSS_NUMBER));
-                    else if (isCalcPrimitiveValue(styleValue))
-                        extractNumbersFromCalcExpression(styleValue, values);
</del><ins>+                    values.push(computedStyle[i].getFloatValue(CSSPrimitiveValue.CSS_NUMBER));
</ins><span class="cx">                     break;
</span><span class="cx">                   case CSSValue.CSS_CUSTOM:
</span><span class="cx">                     // arbitrarily pick shadow-x and shadow-y
</span><span class="cx">                     if (isShadow) {
</span><del>-                      var shadowXY = getShadowXY(styleValue);
</del><ins>+                      var shadowXY = getShadowXY(computedStyle[i]);
</ins><span class="cx">                       values.push(shadowXY[0]);
</span><span class="cx">                       values.push(shadowXY[1]);
</span><span class="cx">                     } else
</span><del>-                      values.push(styleValue.cssText);
</del><ins>+                      values.push(computedStyle[i].cssText);
</ins><span class="cx">                     break;
</span><span class="cx">                 }
</span><span class="cx">             }
</span><span class="cx">             computedValue = values.join(',');
</span><del>-            pass = values.length &gt; 0;
</del><ins>+            pass = true;
</ins><span class="cx">             for (var i = 0; i &lt; values.length; ++i)
</span><span class="cx">                 pass &amp;= isCloseEnough(values[i], expectedValue[i], tolerance);
</span><span class="cx">         } else if (computedStyle.cssValueType == CSSValue.CSS_PRIMITIVE_VALUE) {
</span></span></pre></div>
<a id="trunkLayoutTeststransitionssvgtransitionsexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/transitions/svg-transitions-expected.txt (206893 => 206894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/transitions/svg-transitions-expected.txt        2016-10-07 01:54:14 UTC (rev 206893)
+++ trunk/LayoutTests/transitions/svg-transitions-expected.txt        2016-10-07 02:33:38 UTC (rev 206894)
</span><span class="lines">@@ -1,4 +1,4 @@
</span><del>-CONSOLE MESSAGE: line 368: Failed to pause 'fill' transition on element 'rect7'
</del><ins>+CONSOLE MESSAGE: line 293: Failed to pause 'fill' transition on element 'rect7'
</ins><span class="cx"> Example
</span><span class="cx"> PASS - &quot;fill-opacity&quot; property for &quot;rect1&quot; element at 1s saw something close to: 0.6
</span><span class="cx"> PASS - &quot;stroke-width&quot; property for &quot;rect1&quot; element at 1s saw something close to: 3
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (206893 => 206894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-10-07 01:54:14 UTC (rev 206893)
+++ trunk/Source/WebCore/ChangeLog        2016-10-07 02:33:38 UTC (rev 206894)
</span><span class="lines">@@ -1,3 +1,18 @@
</span><ins>+2016-10-06  Commit Queue  &lt;commit-queue@webkit.org&gt;
+
+        Unreviewed, rolling out r206713.
+        https://bugs.webkit.org/show_bug.cgi?id=163097
+
+        triggers apparent codegen bug on ARM 32-bit (Requested by smfr
+        on #webkit).
+
+        Reverted changeset:
+
+        &quot;Support transitions/animations of background-position with
+        right/bottom-relative values&quot;
+        https://bugs.webkit.org/show_bug.cgi?id=162048
+        http://trac.webkit.org/changeset/206713
+
</ins><span class="cx"> 2016-10-06  Daniel Bates  &lt;dabates@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Remove unused WebCore::contentDispositionType()
</span></span></pre></div>
<a id="trunkSourceWebCorecssStyleBuilderConverterh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/StyleBuilderConverter.h (206893 => 206894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/StyleBuilderConverter.h        2016-10-07 01:54:14 UTC (rev 206893)
+++ trunk/Source/WebCore/css/StyleBuilderConverter.h        2016-10-07 02:33:38 UTC (rev 206894)
</span><span class="lines">@@ -159,6 +159,7 @@
</span><span class="cx">     static Length parseSnapCoordinate(StyleResolver&amp;, const CSSValue&amp;);
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+    static Length convertTo100PercentMinusLength(const Length&amp;);
</ins><span class="cx">     static Length convertPositionComponent(StyleResolver&amp;, const CSSPrimitiveValue&amp;);
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CSS_GRID_LAYOUT)
</span><span class="lines">@@ -312,6 +313,18 @@
</span><span class="cx">     return LengthSize(radiusWidth, radiusHeight);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+inline Length StyleBuilderConverter::convertTo100PercentMinusLength(const Length&amp; length)
+{
+    if (length.isPercent())
+        return Length(100 - length.value(), Percent);
+    
+    // Turn this into a calc expression: calc(100% - length)
+    auto lhs = std::make_unique&lt;CalcExpressionLength&gt;(Length(100, Percent));
+    auto rhs = std::make_unique&lt;CalcExpressionLength&gt;(length);
+    auto op = std::make_unique&lt;CalcExpressionBinaryOperation&gt;(WTFMove(lhs), WTFMove(rhs), CalcSubtract);
+    return Length(CalculationValue::create(WTFMove(op), ValueRangeAll));
+}
+
</ins><span class="cx"> inline Length StyleBuilderConverter::convertPositionComponent(StyleResolver&amp; styleResolver, const CSSPrimitiveValue&amp; value)
</span><span class="cx"> {
</span><span class="cx">     Length length;
</span></span></pre></div>
<a id="trunkSourceWebCorepageanimationCSSPropertyAnimationcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/animation/CSSPropertyAnimation.cpp (206893 => 206894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/animation/CSSPropertyAnimation.cpp        2016-10-07 01:54:14 UTC (rev 206893)
+++ trunk/Source/WebCore/page/animation/CSSPropertyAnimation.cpp        2016-10-07 02:33:38 UTC (rev 206894)
</span><span class="lines">@@ -39,7 +39,6 @@
</span><span class="cx"> #include &quot;CSSPrimitiveValue.h&quot;
</span><span class="cx"> #include &quot;CSSPropertyNames.h&quot;
</span><span class="cx"> #include &quot;CachedImage.h&quot;
</span><del>-#include &quot;CalculationValue.h&quot;
</del><span class="cx"> #include &quot;ClipPathOperation.h&quot;
</span><span class="cx"> #include &quot;FloatConversion.h&quot;
</span><span class="cx"> #include &quot;FontTaggedSettings.h&quot;
</span><span class="lines">@@ -963,23 +962,14 @@
</span><span class="cx"> class FillLayerAnimationPropertyWrapperBase {
</span><span class="cx">     WTF_MAKE_FAST_ALLOCATED;
</span><span class="cx"> public:
</span><del>-    FillLayerAnimationPropertyWrapperBase(CSSPropertyID property)
-        : m_property(property)
</del><ins>+    FillLayerAnimationPropertyWrapperBase()
</ins><span class="cx">     {
</span><span class="cx">     }
</span><del>-    
-    CSSPropertyID property() const { return m_property; }
</del><span class="cx"> 
</span><span class="cx">     virtual ~FillLayerAnimationPropertyWrapperBase() { }
</span><span class="cx"> 
</span><span class="cx">     virtual bool equals(const FillLayer*, const FillLayer*) const = 0;
</span><span class="cx">     virtual void blend(const AnimationBase*, FillLayer*, const FillLayer*, const FillLayer*, double) const = 0;
</span><del>-
-#if !LOG_DISABLED
-    virtual void logBlend(const FillLayer* result, const FillLayer*, const FillLayer*, double) const = 0;
-#endif
-private:
-    CSSPropertyID m_property;
</del><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> template &lt;typename T&gt;
</span><span class="lines">@@ -987,9 +977,8 @@
</span><span class="cx">     WTF_MAKE_FAST_ALLOCATED;
</span><span class="cx">     WTF_MAKE_NONCOPYABLE(FillLayerPropertyWrapperGetter);
</span><span class="cx"> public:
</span><del>-    FillLayerPropertyWrapperGetter(CSSPropertyID property, T (FillLayer::*getter)() const)
-        : FillLayerAnimationPropertyWrapperBase(property)
-        , m_getter(getter)
</del><ins>+    FillLayerPropertyWrapperGetter(T (FillLayer::*getter)() const)
+        : m_getter(getter)
</ins><span class="cx">     {
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -1002,18 +991,6 @@
</span><span class="cx">         return (a-&gt;*m_getter)() == (b-&gt;*m_getter)();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    T value(const FillLayer* layer) const
-    {
-        return (layer-&gt;*m_getter)();
-    }
-
-#if !LOG_DISABLED
-    void logBlend(const FillLayer* result, const FillLayer* a, const FillLayer* b, double progress) const override
-    {
-        LOG_WITH_STREAM(Animations, stream &lt;&lt; &quot;  blending &quot; &lt;&lt; getPropertyName(property()) &lt;&lt; &quot; from &quot; &lt;&lt; value(a) &lt;&lt; &quot; to &quot; &lt;&lt; value(b) &lt;&lt; &quot; at &quot; &lt;&lt; TextStream::FormatNumberRespectingIntegers(progress) &lt;&lt; &quot; -&gt; &quot; &lt;&lt; value(result));
-    }
-#endif
-
</del><span class="cx"> protected:
</span><span class="cx">     T (FillLayer::*m_getter)() const;
</span><span class="cx"> };
</span><span class="lines">@@ -1022,119 +999,36 @@
</span><span class="cx"> class FillLayerPropertyWrapper : public FillLayerPropertyWrapperGetter&lt;const T&amp;&gt; {
</span><span class="cx">     WTF_MAKE_FAST_ALLOCATED;
</span><span class="cx"> public:
</span><del>-    FillLayerPropertyWrapper(CSSPropertyID property, const T&amp; (FillLayer::*getter)() const, void (FillLayer::*setter)(T))
-        : FillLayerPropertyWrapperGetter&lt;const T&amp;&gt;(property, getter)
</del><ins>+    FillLayerPropertyWrapper(const T&amp; (FillLayer::*getter)() const, void (FillLayer::*setter)(T))
+        : FillLayerPropertyWrapperGetter&lt;const T&amp;&gt;(getter)
</ins><span class="cx">         , m_setter(setter)
</span><span class="cx">     {
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void blend(const AnimationBase* anim, FillLayer* dst, const FillLayer* a, const FillLayer* b, double progress) const override
</del><ins>+    virtual void blend(const AnimationBase* anim, FillLayer* dst, const FillLayer* a, const FillLayer* b, double progress) const
</ins><span class="cx">     {
</span><span class="cx">         (dst-&gt;*m_setter)(blendFunc(anim, (a-&gt;*FillLayerPropertyWrapperGetter&lt;const T&amp;&gt;::m_getter)(), (b-&gt;*FillLayerPropertyWrapperGetter&lt;const T&amp;&gt;::m_getter)(), progress));
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-#if !LOG_DISABLED
-    void logBlend(const FillLayer* result, const FillLayer* a, const FillLayer* b, double progress) const override
-    {
-        LOG_WITH_STREAM(Animations, stream &lt;&lt; &quot;  blending &quot; &lt;&lt; getPropertyName(FillLayerPropertyWrapperGetter&lt;const T&amp;&gt;::property())
-            &lt;&lt; &quot; from &quot; &lt;&lt; FillLayerPropertyWrapperGetter&lt;const T&amp;&gt;::value(a)
-            &lt;&lt; &quot; to &quot; &lt;&lt; FillLayerPropertyWrapperGetter&lt;const T&amp;&gt;::value(b)
-            &lt;&lt; &quot; at &quot; &lt;&lt; TextStream::FormatNumberRespectingIntegers(progress) &lt;&lt; &quot; -&gt; &quot; &lt;&lt; FillLayerPropertyWrapperGetter&lt;const T&amp;&gt;::value(result));
-    }
-#endif
-
</del><span class="cx"> protected:
</span><span class="cx">     void (FillLayer::*m_setter)(T);
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-class FillLayerPositionPropertyWrapper : public FillLayerPropertyWrapperGetter&lt;const Length&amp;&gt; {
-    WTF_MAKE_FAST_ALLOCATED;
-public:
-    FillLayerPositionPropertyWrapper(CSSPropertyID property, const Length&amp; (FillLayer::*lengthGetter)() const, void (FillLayer::*lengthSetter)(Length), Edge (FillLayer::*originGetter)() const, void (FillLayer::*originSetter)(Edge), Edge farEdge)
-        : FillLayerPropertyWrapperGetter&lt;const Length&amp;&gt;(property, lengthGetter)
-        , m_lengthSetter(lengthSetter)
-        , m_originGetter(originGetter)
-        , m_originSetter(originSetter)
-        , m_farEdge(farEdge)
-    {
-    }
-
-    bool equals(const FillLayer* a, const FillLayer* b) const override
-    {
-        if (a == b)
-            return true;
-        if (!a || !b)
-            return false;
-
-        Length fromLength = (a-&gt;*FillLayerPropertyWrapperGetter&lt;const Length&amp;&gt;::m_getter)();
-        Length toLength = (b-&gt;*FillLayerPropertyWrapperGetter&lt;const Length&amp;&gt;::m_getter)();
-        
-        Edge fromEdge = (a-&gt;*m_originGetter)();
-        Edge toEdge = (b-&gt;*m_originGetter)();
-        
-        return fromLength == toLength &amp;&amp; fromEdge == toEdge;
-    }
-
-    void blend(const AnimationBase* anim, FillLayer* dst, const FillLayer* a, const FillLayer* b, double progress) const override
-    {
-        Length fromLength = (a-&gt;*FillLayerPropertyWrapperGetter&lt;const Length&amp;&gt;::m_getter)();
-        Length toLength = (b-&gt;*FillLayerPropertyWrapperGetter&lt;const Length&amp;&gt;::m_getter)();
-        
-        Edge fromEdge = (a-&gt;*m_originGetter)();
-        Edge toEdge = (b-&gt;*m_originGetter)();
-        
-        if (fromEdge != toEdge) {
-            // Convert the right/bottom into a calc expression,
-            if (fromEdge == m_farEdge)
-                fromLength = convertTo100PercentMinusLength(fromLength);
-            else if (toEdge == m_farEdge) {
-                toLength = convertTo100PercentMinusLength(toLength);
-                (dst-&gt;*m_originSetter)(fromEdge); // Now we have a calc(100% - l), it's relative to the left/top edge.
-            }
-        }
-
-        (dst-&gt;*m_lengthSetter)(blendFunc(anim, fromLength, toLength, progress));
-    }
-
-#if !LOG_DISABLED
-    void logBlend(const FillLayer* result, const FillLayer* a, const FillLayer* b, double progress) const override
-    {
-        LOG_WITH_STREAM(Animations, stream &lt;&lt; &quot;  blending &quot; &lt;&lt; getPropertyName(property()) &lt;&lt; &quot; from &quot; &lt;&lt; value(a) &lt;&lt; &quot; to &quot; &lt;&lt; value(b) &lt;&lt; &quot; at &quot; &lt;&lt; TextStream::FormatNumberRespectingIntegers(progress) &lt;&lt; &quot; -&gt; &quot; &lt;&lt; value(result));
-    }
-#endif
-
-protected:
-    void (FillLayer::*m_lengthSetter)(Length);
-    Edge (FillLayer::*m_originGetter)() const;
-    void (FillLayer::*m_originSetter)(Edge);
-    Edge m_farEdge;
-};
-
</del><span class="cx"> template &lt;typename T&gt;
</span><span class="cx"> class FillLayerRefCountedPropertyWrapper : public FillLayerPropertyWrapperGetter&lt;T*&gt; {
</span><span class="cx">     WTF_MAKE_FAST_ALLOCATED;
</span><span class="cx"> public:
</span><del>-    FillLayerRefCountedPropertyWrapper(CSSPropertyID property, T* (FillLayer::*getter)() const, void (FillLayer::*setter)(PassRefPtr&lt;T&gt;))
-        : FillLayerPropertyWrapperGetter&lt;T*&gt;(property, getter)
</del><ins>+    FillLayerRefCountedPropertyWrapper(T* (FillLayer::*getter)() const, void (FillLayer::*setter)(PassRefPtr&lt;T&gt;))
+        : FillLayerPropertyWrapperGetter&lt;T*&gt;(getter)
</ins><span class="cx">         , m_setter(setter)
</span><span class="cx">     {
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void blend(const AnimationBase* anim, FillLayer* dst, const FillLayer* a, const FillLayer* b, double progress) const override
</del><ins>+    virtual void blend(const AnimationBase* anim, FillLayer* dst, const FillLayer* a, const FillLayer* b, double progress) const
</ins><span class="cx">     {
</span><span class="cx">         (dst-&gt;*m_setter)(blendFunc(anim, (a-&gt;*FillLayerPropertyWrapperGetter&lt;T*&gt;::m_getter)(), (b-&gt;*FillLayerPropertyWrapperGetter&lt;T*&gt;::m_getter)(), progress));
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-#if !LOG_DISABLED
-    void logBlend(const FillLayer* result, const FillLayer* a, const FillLayer* b, double progress) const override
-    {
-        LOG_WITH_STREAM(Animations, stream &lt;&lt; &quot;  blending &quot; &lt;&lt; getPropertyName(FillLayerPropertyWrapperGetter&lt;T*&gt;::property())
-            &lt;&lt; &quot; from &quot; &lt;&lt; FillLayerPropertyWrapperGetter&lt;T*&gt;::value(a)
-            &lt;&lt; &quot; to &quot; &lt;&lt; FillLayerPropertyWrapperGetter&lt;T*&gt;::value(b)
-            &lt;&lt; &quot; at &quot; &lt;&lt; TextStream::FormatNumberRespectingIntegers(progress) &lt;&lt; &quot; -&gt; &quot; &lt;&lt; FillLayerPropertyWrapperGetter&lt;T*&gt;::value(result));
-    }
-#endif
-
</del><span class="cx"> protected:
</span><span class="cx">     void (FillLayer::*m_setter)(PassRefPtr&lt;T&gt;);
</span><span class="cx"> };
</span><span class="lines">@@ -1142,8 +1036,8 @@
</span><span class="cx"> class FillLayerStyleImagePropertyWrapper : public FillLayerRefCountedPropertyWrapper&lt;StyleImage&gt; {
</span><span class="cx">     WTF_MAKE_FAST_ALLOCATED;
</span><span class="cx"> public:
</span><del>-    FillLayerStyleImagePropertyWrapper(CSSPropertyID property, StyleImage* (FillLayer::*getter)() const, void (FillLayer::*setter)(PassRefPtr&lt;StyleImage&gt;))
-        : FillLayerRefCountedPropertyWrapper&lt;StyleImage&gt;(property, getter, setter)
</del><ins>+    FillLayerStyleImagePropertyWrapper(StyleImage* (FillLayer::*getter)() const, void (FillLayer::*setter)(PassRefPtr&lt;StyleImage&gt;))
+        : FillLayerRefCountedPropertyWrapper&lt;StyleImage&gt;(getter, setter)
</ins><span class="cx">     {
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -1158,13 +1052,6 @@
</span><span class="cx">         StyleImage* imageB = (b-&gt;*m_getter)();
</span><span class="cx">         return arePointingToEqualData(imageA, imageB);
</span><span class="cx">     }
</span><del>-
-#if !LOG_DISABLED
-    void logBlend(const FillLayer* result, const FillLayer* a, const FillLayer* b, double progress) const override
-    {
-        LOG_WITH_STREAM(Animations, stream &lt;&lt; &quot;  blending &quot; &lt;&lt; getPropertyName(property()) &lt;&lt; &quot; from &quot; &lt;&lt; value(a) &lt;&lt; &quot; to &quot; &lt;&lt; value(b) &lt;&lt; &quot; at &quot; &lt;&lt; TextStream::FormatNumberRespectingIntegers(progress) &lt;&lt; &quot; -&gt; &quot; &lt;&lt; value(result));
-    }
-#endif
</del><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> class FillLayersPropertyWrapper : public AnimationPropertyWrapperBase {
</span><span class="lines">@@ -1173,27 +1060,27 @@
</span><span class="cx">     typedef const FillLayer* (RenderStyle::*LayersGetter)() const;
</span><span class="cx">     typedef FillLayer&amp; (RenderStyle::*LayersAccessor)();
</span><span class="cx"> 
</span><del>-    FillLayersPropertyWrapper(CSSPropertyID property, LayersGetter getter, LayersAccessor accessor)
-        : AnimationPropertyWrapperBase(property)
</del><ins>+    FillLayersPropertyWrapper(CSSPropertyID prop, LayersGetter getter, LayersAccessor accessor)
+        : AnimationPropertyWrapperBase(prop)
</ins><span class="cx">         , m_layersGetter(getter)
</span><span class="cx">         , m_layersAccessor(accessor)
</span><span class="cx">     {
</span><del>-        switch (property) {
</del><ins>+        switch (prop) {
</ins><span class="cx">         case CSSPropertyBackgroundPositionX:
</span><span class="cx">         case CSSPropertyWebkitMaskPositionX:
</span><del>-            m_fillLayerPropertyWrapper = std::make_unique&lt;FillLayerPositionPropertyWrapper&gt;(property, &amp;FillLayer::xPosition, &amp;FillLayer::setXPosition, &amp;FillLayer::backgroundXOrigin, &amp;FillLayer::setBackgroundXOrigin, Edge::Right);
</del><ins>+            m_fillLayerPropertyWrapper = std::make_unique&lt;FillLayerPropertyWrapper&lt;Length&gt;&gt;(&amp;FillLayer::xPosition, &amp;FillLayer::setXPosition);
</ins><span class="cx">             break;
</span><span class="cx">         case CSSPropertyBackgroundPositionY:
</span><span class="cx">         case CSSPropertyWebkitMaskPositionY:
</span><del>-            m_fillLayerPropertyWrapper = std::make_unique&lt;FillLayerPositionPropertyWrapper&gt;(property, &amp;FillLayer::yPosition, &amp;FillLayer::setYPosition, &amp;FillLayer::backgroundYOrigin, &amp;FillLayer::setBackgroundYOrigin, Edge::Bottom);
</del><ins>+            m_fillLayerPropertyWrapper = std::make_unique&lt;FillLayerPropertyWrapper&lt;Length&gt;&gt;(&amp;FillLayer::yPosition, &amp;FillLayer::setYPosition);
</ins><span class="cx">             break;
</span><span class="cx">         case CSSPropertyBackgroundSize:
</span><span class="cx">         case CSSPropertyWebkitBackgroundSize:
</span><span class="cx">         case CSSPropertyWebkitMaskSize:
</span><del>-            m_fillLayerPropertyWrapper = std::make_unique&lt;FillLayerPropertyWrapper&lt;LengthSize&gt;&gt;(property, &amp;FillLayer::sizeLength, &amp;FillLayer::setSizeLength);
</del><ins>+            m_fillLayerPropertyWrapper = std::make_unique&lt;FillLayerPropertyWrapper&lt;LengthSize&gt;&gt;(&amp;FillLayer::sizeLength, &amp;FillLayer::setSizeLength);
</ins><span class="cx">             break;
</span><span class="cx">         case CSSPropertyBackgroundImage:
</span><del>-            m_fillLayerPropertyWrapper = std::make_unique&lt;FillLayerStyleImagePropertyWrapper&gt;(property, &amp;FillLayer::image, &amp;FillLayer::setImage);
</del><ins>+            m_fillLayerPropertyWrapper = std::make_unique&lt;FillLayerStyleImagePropertyWrapper&gt;(&amp;FillLayer::image, &amp;FillLayer::setImage);
</ins><span class="cx">             break;
</span><span class="cx">         default:
</span><span class="cx">             break;
</span><span class="lines">@@ -1236,18 +1123,10 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> #if !LOG_DISABLED
</span><del>-    void logBlend(const RenderStyle* from, const RenderStyle* to, const RenderStyle* result, double progress) const final
</del><ins>+    void logBlend(const RenderStyle*, const RenderStyle*, const RenderStyle*, double progress) const final
</ins><span class="cx">     {
</span><del>-        const FillLayer* aLayer = (from-&gt;*m_layersGetter)();
-        const FillLayer* bLayer = (to-&gt;*m_layersGetter)();
-        const FillLayer* dstLayer = (result-&gt;*m_layersGetter)();
-
-        while (aLayer &amp;&amp; bLayer &amp;&amp; dstLayer) {
-            m_fillLayerPropertyWrapper-&gt;logBlend(dstLayer, aLayer, bLayer, progress);
-            aLayer = aLayer-&gt;next();
-            bLayer = bLayer-&gt;next();
-            dstLayer = dstLayer-&gt;next();
-        }
</del><ins>+        // FIXME: better logging.
+        LOG_WITH_STREAM(Animations, stream &lt;&lt; &quot;  blending FillLayers at &quot; &lt;&lt; TextStream::FormatNumberRespectingIntegers(progress));
</ins><span class="cx">     }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="lines">@@ -1290,10 +1169,10 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> #if !LOG_DISABLED
</span><del>-    void logBlend(const RenderStyle* a, const RenderStyle* b, const RenderStyle* dst, double progress) const final
</del><ins>+    void logBlend(const RenderStyle*, const RenderStyle*, const RenderStyle*, double progress) const final
</ins><span class="cx">     {
</span><del>-        for (auto&amp; wrapper : m_propertyWrappers)
-            wrapper-&gt;logBlend(a, b, dst, progress);
</del><ins>+        // FIXME: better logging.
+        LOG_WITH_STREAM(Animations, stream &lt;&lt; &quot;  blending shorthand property &quot; &lt;&lt; getPropertyName(property()) &lt;&lt; &quot; at &quot; &lt;&lt; TextStream::FormatNumberRespectingIntegers(progress));
</ins><span class="cx">     }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="lines">@@ -1706,10 +1585,10 @@
</span><span class="cx"> 
</span><span class="cx">     AnimationPropertyWrapperBase* wrapper = CSSPropertyAnimationWrapperMap::singleton().wrapperForProperty(prop);
</span><span class="cx">     if (wrapper) {
</span><del>-        wrapper-&gt;blend(anim, dst, a, b, progress);
</del><span class="cx"> #if !LOG_DISABLED
</span><span class="cx">         wrapper-&gt;logBlend(a, b, dst, progress);
</span><span class="cx"> #endif
</span><ins>+        wrapper-&gt;blend(anim, dst, a, b, progress);
</ins><span class="cx">         return !wrapper-&gt;animationIsAccelerated() || !anim-&gt;isAccelerated();
</span><span class="cx">     }
</span><span class="cx">     return false;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformCalculationValuecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/CalculationValue.cpp (206893 => 206894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/CalculationValue.cpp        2016-10-07 01:54:14 UTC (rev 206893)
+++ trunk/Source/WebCore/platform/CalculationValue.cpp        2016-10-07 02:33:38 UTC (rev 206894)
</span><span class="lines">@@ -31,7 +31,6 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> #include &quot;CalculationValue.h&quot;
</span><del>-#include &quot;TextStream.h&quot;
</del><span class="cx"> 
</span><span class="cx"> #include &lt;limits&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -47,11 +46,6 @@
</span><span class="cx">     return m_value;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void CalcExpressionNumber::dump(TextStream&amp; ts) const
-{
-    ts &lt;&lt; TextStream::FormatNumberRespectingIntegers(m_value);
-}
-
</del><span class="cx"> bool CalcExpressionNumber::operator==(const CalcExpressionNode&amp; other) const
</span><span class="cx"> {
</span><span class="cx">     return other.type() == CalcExpressionNodeNumber &amp;&amp; *this == toCalcExpressionNumber(other);
</span><span class="lines">@@ -92,11 +86,6 @@
</span><span class="cx">     return other.type() == CalcExpressionNodeBinaryOperation &amp;&amp; *this == toCalcExpressionBinaryOperation(other);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void CalcExpressionBinaryOperation::dump(TextStream&amp; ts) const
-{
-    ts &lt;&lt; *m_leftSide &lt;&lt; &quot; &quot; &lt;&lt; m_operator &lt;&lt; &quot; &quot; &lt;&lt; *m_rightSide;
-}
-
</del><span class="cx"> float CalcExpressionLength::evaluate(float maxValue) const
</span><span class="cx"> {
</span><span class="cx">     return floatValueForLength(m_length, maxValue);
</span><span class="lines">@@ -107,11 +96,6 @@
</span><span class="cx">     return other.type() == CalcExpressionNodeLength &amp;&amp; *this == toCalcExpressionLength(other);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void CalcExpressionLength::dump(TextStream&amp; ts) const
-{
-    ts &lt;&lt; m_length;
-}
-
</del><span class="cx"> float CalcExpressionBlendLength::evaluate(float maxValue) const
</span><span class="cx"> {
</span><span class="cx">     return (1.0f - m_progress) * floatValueForLength(m_from, maxValue) + m_progress * floatValueForLength(m_to, maxValue);
</span><span class="lines">@@ -122,34 +106,4 @@
</span><span class="cx">     return other.type() == CalcExpressionNodeBlendLength &amp;&amp; *this == toCalcExpressionBlendLength(other);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void CalcExpressionBlendLength::dump(TextStream&amp; ts) const
-{
-    ts &lt;&lt; &quot;blend(&quot; &lt;&lt; m_from &lt;&lt; &quot;, &quot; &lt;&lt; m_to &lt;&lt; &quot;, &quot; &lt;&lt; m_progress &lt;&lt; &quot;)&quot;;
-}
-
-TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, CalcOperator op)
-{
-    switch (op) {
-    case CalcAdd: ts &lt;&lt; &quot;+&quot;; break;
-    case CalcSubtract: ts &lt;&lt; &quot;-&quot;; break;
-    case CalcMultiply: ts &lt;&lt; &quot;*&quot;; break;
-    case CalcDivide: ts &lt;&lt; &quot;/&quot;; break;
-    }
-    return ts;
-}
-
-TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, const CalculationValue&amp; value)
-{
-    ts &lt;&lt; &quot;calc(&quot;;
-    ts &lt;&lt; value.expression();
-    ts &lt;&lt; &quot;)&quot;;
-    return ts;
-}
-
-TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, const CalcExpressionNode&amp; expressionNode)
-{
-    expressionNode.dump(ts);
-    return ts;
-}
-
</del><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformCalculationValueh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/CalculationValue.h (206893 => 206894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/CalculationValue.h        2016-10-07 01:54:14 UTC (rev 206893)
+++ trunk/Source/WebCore/platform/CalculationValue.h        2016-10-07 02:33:38 UTC (rev 206894)
</span><span class="lines">@@ -39,8 +39,6 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class TextStream;
-
</del><span class="cx"> enum CalcOperator {
</span><span class="cx">     CalcAdd = '+',
</span><span class="cx">     CalcSubtract = '-',
</span><span class="lines">@@ -66,7 +64,6 @@
</span><span class="cx"> 
</span><span class="cx">     virtual float evaluate(float maxValue) const = 0;
</span><span class="cx">     virtual bool operator==(const CalcExpressionNode&amp;) const = 0;
</span><del>-    virtual void dump(TextStream&amp;) const = 0;
</del><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     CalcExpressionNodeType m_type;
</span><span class="lines">@@ -81,7 +78,6 @@
</span><span class="cx"> private:
</span><span class="cx">     float evaluate(float) const override;
</span><span class="cx">     bool operator==(const CalcExpressionNode&amp;) const override;
</span><del>-    void dump(TextStream&amp;) const override;
</del><span class="cx"> 
</span><span class="cx">     float m_value;
</span><span class="cx"> };
</span><span class="lines">@@ -95,7 +91,6 @@
</span><span class="cx"> private:
</span><span class="cx">     float evaluate(float maxValue) const override;
</span><span class="cx">     bool operator==(const CalcExpressionNode&amp;) const override;
</span><del>-    void dump(TextStream&amp;) const override;
</del><span class="cx"> 
</span><span class="cx">     Length m_length;
</span><span class="cx"> };
</span><span class="lines">@@ -111,7 +106,6 @@
</span><span class="cx"> private:
</span><span class="cx">     float evaluate(float maxValue) const override;
</span><span class="cx">     bool operator==(const CalcExpressionNode&amp;) const override;
</span><del>-    void dump(TextStream&amp;) const override;
</del><span class="cx"> 
</span><span class="cx">     std::unique_ptr&lt;CalcExpressionNode&gt; m_leftSide;
</span><span class="cx">     std::unique_ptr&lt;CalcExpressionNode&gt; m_rightSide;
</span><span class="lines">@@ -129,7 +123,6 @@
</span><span class="cx"> private:
</span><span class="cx">     float evaluate(float maxValue) const override;
</span><span class="cx">     bool operator==(const CalcExpressionNode&amp;) const override;
</span><del>-    void dump(TextStream&amp;) const override;
</del><span class="cx"> 
</span><span class="cx">     Length m_from;
</span><span class="cx">     Length m_to;
</span><span class="lines">@@ -239,10 +232,6 @@
</span><span class="cx">     return static_cast&lt;const CalcExpressionBlendLength&amp;&gt;(value);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-TextStream&amp; operator&lt;&lt;(TextStream&amp;, const CalculationValue&amp;);
-TextStream&amp; operator&lt;&lt;(TextStream&amp;, const CalcExpressionNode&amp;);
-TextStream&amp; operator&lt;&lt;(TextStream&amp;, CalcOperator);
-
</del><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #endif // CalculationValue_h
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformLengthcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/Length.cpp (206893 => 206894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/Length.cpp        2016-10-07 01:54:14 UTC (rev 206893)
+++ trunk/Source/WebCore/platform/Length.cpp        2016-10-07 02:33:38 UTC (rev 206894)
</span><span class="lines">@@ -284,18 +284,6 @@
</span><span class="cx">     return calculationValue() == other.calculationValue();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-Length convertTo100PercentMinusLength(const Length&amp; length)
-{
-    if (length.isPercent())
-        return Length(100 - length.value(), Percent);
-    
-    // Turn this into a calc expression: calc(100% - length)
-    auto lhs = std::make_unique&lt;CalcExpressionLength&gt;(Length(100, Percent));
-    auto rhs = std::make_unique&lt;CalcExpressionLength&gt;(length);
-    auto op = std::make_unique&lt;CalcExpressionBinaryOperation&gt;(WTFMove(lhs), WTFMove(rhs), CalcSubtract);
-    return Length(CalculationValue::create(WTFMove(op), ValueRangeAll));
-}
-
</del><span class="cx"> static Length blendMixedTypes(const Length&amp; from, const Length&amp; to, double progress)
</span><span class="cx"> {
</span><span class="cx">     if (progress &lt;= 0.0)
</span><span class="lines">@@ -382,7 +370,8 @@
</span><span class="cx">         ts &lt;&lt; TextStream::FormatNumberRespectingIntegers(length.percent()) &lt;&lt; &quot;%&quot;;
</span><span class="cx">         break;
</span><span class="cx">     case Calculated:
</span><del>-        ts &lt;&lt; length.calculationValue();
</del><ins>+        // FIXME: dump CalculationValue.
+        ts &lt;&lt; &quot;calc(...)&quot;;
</ins><span class="cx">         break;
</span><span class="cx">     }
</span><span class="cx">     
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformLengthh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/Length.h (206893 => 206894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/Length.h        2016-10-07 01:54:14 UTC (rev 206893)
+++ trunk/Source/WebCore/platform/Length.h        2016-10-07 02:33:38 UTC (rev 206894)
</span><span class="lines">@@ -415,8 +415,6 @@
</span><span class="cx">     return type() == FitContent;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-Length convertTo100PercentMinusLength(const Length&amp;);
-
</del><span class="cx"> TextStream&amp; operator&lt;&lt;(TextStream&amp;, Length);
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingstyleBasicShapescpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/style/BasicShapes.cpp (206893 => 206894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/style/BasicShapes.cpp        2016-10-07 01:54:14 UTC (rev 206893)
+++ trunk/Source/WebCore/rendering/style/BasicShapes.cpp        2016-10-07 02:33:38 UTC (rev 206894)
</span><span class="lines">@@ -52,13 +52,15 @@
</span><span class="cx">         m_computedLength = m_length.isUndefined() ? Length(0, Fixed) : m_length;
</span><span class="cx">         return;
</span><span class="cx">     }
</span><del>-
</del><span class="cx">     if (m_length.isUndefined()) {
</span><span class="cx">         m_computedLength = Length(100, Percent);
</span><span class="cx">         return;
</span><span class="cx">     }
</span><del>-    
-    m_computedLength = convertTo100PercentMinusLength(m_length);
</del><ins>+
+    auto lhs = std::make_unique&lt;CalcExpressionLength&gt;(Length(100, Percent));
+    auto rhs = std::make_unique&lt;CalcExpressionLength&gt;(m_length);
+    auto op = std::make_unique&lt;CalcExpressionBinaryOperation&gt;(WTFMove(lhs), WTFMove(rhs), CalcSubtract);
+    m_computedLength = Length(CalculationValue::create(WTFMove(op), ValueRangeAll));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> struct SVGPathTranslatedByteStream {
</span></span></pre></div>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (206893 => 206894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog        2016-10-07 01:54:14 UTC (rev 206893)
+++ trunk/Tools/ChangeLog        2016-10-07 02:33:38 UTC (rev 206894)
</span><span class="lines">@@ -1,3 +1,18 @@
</span><ins>+2016-10-06  Commit Queue  &lt;commit-queue@webkit.org&gt;
+
+        Unreviewed, rolling out r206713.
+        https://bugs.webkit.org/show_bug.cgi?id=163097
+
+        triggers apparent codegen bug on ARM 32-bit (Requested by smfr
+        on #webkit).
+
+        Reverted changeset:
+
+        &quot;Support transitions/animations of background-position with
+        right/bottom-relative values&quot;
+        https://bugs.webkit.org/show_bug.cgi?id=162048
+        http://trac.webkit.org/changeset/206713
+
</ins><span class="cx"> 2016-10-06  Alex Christensen  &lt;achristensen@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         URLParser: Non-ASCII characters in Non-UTF-8 encoded queries of relative URLs with ws, wss, or nonspecial schemes should be UTF-8 encoded
</span></span></pre></div>
<a id="trunkToolsTestWebKitAPITestsWebCoreCalculationValuecpp"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestWebKitAPI/Tests/WebCore/CalculationValue.cpp (206893 => 206894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/Tests/WebCore/CalculationValue.cpp        2016-10-07 01:54:14 UTC (rev 206893)
+++ trunk/Tools/TestWebKitAPI/Tests/WebCore/CalculationValue.cpp        2016-10-07 02:33:38 UTC (rev 206894)
</span><span class="lines">@@ -27,10 +27,6 @@
</span><span class="cx"> 
</span><span class="cx"> #include &lt;WebCore/CalculationValue.h&gt;
</span><span class="cx"> 
</span><del>-namespace WebCore {
-class TextStream;
-};
-
</del><span class="cx"> namespace TestWebKitAPI {
</span><span class="cx"> 
</span><span class="cx"> static unsigned deletionCount;
</span><span class="lines">@@ -44,9 +40,6 @@
</span><span class="cx"> 
</span><span class="cx">     float evaluate(float) const override { return 0; }
</span><span class="cx">     bool operator==(const CalcExpressionNode&amp;) const override { ASSERT_NOT_REACHED(); return false; }
</span><del>-
-private:
-    void dump(WebCore::TextStream&amp;) const override { };
</del><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> static Ref&lt;WebCore::CalculationValue&gt; createTestValue()
</span></span></pre>
</div>
</div>

</body>
</html>