<!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>[180824] releases/WebKitGTK/webkit-2.8</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/180824">180824</a></dd>
<dt>Author</dt> <dd>carlosgc@webkit.org</dd>
<dt>Date</dt> <dd>2015-02-28 02:56:57 -0800 (Sat, 28 Feb 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>Merge <a href="http://trac.webkit.org/projects/webkit/changeset/180558">r180558</a> - Always serialize :lang()'s arguments to strings
https://bugs.webkit.org/show_bug.cgi?id=141944

Reviewed by Benjamin Poulain.

Source/WebCore:

As specified in [1] :lang()'s arguments are always serialized to strings.

[1] http://dev.w3.org/csswg/cssom/#serializing-selectors

Related tests are updated.

* css/CSSGrammar.y.in:
* css/CSSParserValues.cpp:
(WebCore::CSSParserSelector::setLangArgumentList):
* css/CSSParserValues.h:
(WebCore::CSSParserString::init):
(WebCore::CSSParserString::clear):
(WebCore::CSSParserString::tokenType): Deleted.
(WebCore::CSSParserString::setTokenType): Deleted.
* css/CSSSelector.cpp:
(WebCore::appendLangArgumentList):
(WebCore::CSSSelector::setLangArgumentList):
* css/CSSSelector.h:
(WebCore::CSSSelector::langArgumentList):
* css/SelectorCheckerTestFunctions.h:
(WebCore::matchesLangPseudoClass):
* cssjit/SelectorCompiler.cpp:
(WebCore::SelectorCompiler::addPseudoClassType):
(WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsInLanguage):

LayoutTests:

Some tests results are updated to reflect the always serialize
:lang()'s arguments to strings.

* fast/css/css-lang-selector-with-string-arguments-text-expected.txt:
* fast/css/css-lang-selector-with-string-arguments-text.html:
* fast/css/parsing-css-lang-expected.txt:
* fast/css/parsing-css-lang.html:
* fast/css/css-selector-text-expected.txt:
* fast/css/css-selector-text.html:
* fast/css/css-set-selector-text-expected.txt:
* fast/css/css-set-selector-text.html:
* fast/dom/css-selectorText-expected.txt:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#releasesWebKitGTKwebkit28LayoutTestsChangeLog">releases/WebKitGTK/webkit-2.8/LayoutTests/ChangeLog</a></li>
<li><a href="#releasesWebKitGTKwebkit28LayoutTestsfastcsscsslangselectorwithstringargumentstextexpectedtxt">releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-lang-selector-with-string-arguments-text-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit28LayoutTestsfastcsscsslangselectorwithstringargumentstexthtml">releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-lang-selector-with-string-arguments-text.html</a></li>
<li><a href="#releasesWebKitGTKwebkit28LayoutTestsfastcsscssselectortextexpectedtxt">releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-selector-text-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit28LayoutTestsfastcsscssselectortexthtml">releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-selector-text.html</a></li>
<li><a href="#releasesWebKitGTKwebkit28LayoutTestsfastcsscsssetselectortextexpectedtxt">releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-set-selector-text-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit28LayoutTestsfastcsscsssetselectortexthtml">releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-set-selector-text.html</a></li>
<li><a href="#releasesWebKitGTKwebkit28LayoutTestsfastcssparsingcsslangexpectedtxt">releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/parsing-css-lang-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit28LayoutTestsfastcssparsingcsslanghtml">releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/parsing-css-lang.html</a></li>
<li><a href="#releasesWebKitGTKwebkit28LayoutTestsfastdomcssselectorTextexpectedtxt">releases/WebKitGTK/webkit-2.8/LayoutTests/fast/dom/css-selectorText-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit28SourceWebCoreChangeLog">releases/WebKitGTK/webkit-2.8/Source/WebCore/ChangeLog</a></li>
<li><a href="#releasesWebKitGTKwebkit28SourceWebCorecssCSSGrammaryin">releases/WebKitGTK/webkit-2.8/Source/WebCore/css/CSSGrammar.y.in</a></li>
<li><a href="#releasesWebKitGTKwebkit28SourceWebCorecssCSSParserValuescpp">releases/WebKitGTK/webkit-2.8/Source/WebCore/css/CSSParserValues.cpp</a></li>
<li><a href="#releasesWebKitGTKwebkit28SourceWebCorecssCSSParserValuesh">releases/WebKitGTK/webkit-2.8/Source/WebCore/css/CSSParserValues.h</a></li>
<li><a href="#releasesWebKitGTKwebkit28SourceWebCorecssCSSSelectorcpp">releases/WebKitGTK/webkit-2.8/Source/WebCore/css/CSSSelector.cpp</a></li>
<li><a href="#releasesWebKitGTKwebkit28SourceWebCorecssCSSSelectorh">releases/WebKitGTK/webkit-2.8/Source/WebCore/css/CSSSelector.h</a></li>
<li><a href="#releasesWebKitGTKwebkit28SourceWebCorecssSelectorCheckerTestFunctionsh">releases/WebKitGTK/webkit-2.8/Source/WebCore/css/SelectorCheckerTestFunctions.h</a></li>
<li><a href="#releasesWebKitGTKwebkit28SourceWebCorecssjitSelectorCompilercpp">releases/WebKitGTK/webkit-2.8/Source/WebCore/cssjit/SelectorCompiler.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="releasesWebKitGTKwebkit28LayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/LayoutTests/ChangeLog (180823 => 180824)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/LayoutTests/ChangeLog        2015-02-28 10:51:58 UTC (rev 180823)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/ChangeLog        2015-02-28 10:56:57 UTC (rev 180824)
</span><span class="lines">@@ -1,3 +1,23 @@
</span><ins>+2015-02-24  Dhi Aurrahman  &lt;diorahman@rockybars.com&gt;
+
+        Always serialize :lang()'s arguments to strings
+        https://bugs.webkit.org/show_bug.cgi?id=141944
+
+        Reviewed by Benjamin Poulain.
+
+        Some tests results are updated to reflect the always serialize
+        :lang()'s arguments to strings.
+
+        * fast/css/css-lang-selector-with-string-arguments-text-expected.txt:
+        * fast/css/css-lang-selector-with-string-arguments-text.html:
+        * fast/css/parsing-css-lang-expected.txt:
+        * fast/css/parsing-css-lang.html:
+        * fast/css/css-selector-text-expected.txt:
+        * fast/css/css-selector-text.html:
+        * fast/css/css-set-selector-text-expected.txt:
+        * fast/css/css-set-selector-text.html:
+        * fast/dom/css-selectorText-expected.txt:
+
</ins><span class="cx"> 2015-02-23  Shivakumar JM  &lt;shiva.jm@samsung.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Default value of HTMLSelectElement size IDL attribute should be 0.
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit28LayoutTestsfastcsscsslangselectorwithstringargumentstextexpectedtxt"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-lang-selector-with-string-arguments-text-expected.txt (180823 => 180824)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-lang-selector-with-string-arguments-text-expected.txt        2015-02-28 10:51:58 UTC (rev 180823)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-lang-selector-with-string-arguments-text-expected.txt        2015-02-28 10:56:57 UTC (rev 180824)
</span><span class="lines">@@ -4,18 +4,18 @@
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> PASS parseThenSerializeRule(':lang(&quot;a&quot;) { }') is ':lang(&quot;a&quot;) { }'
</span><del>-PASS parseThenSerializeRule(':lang(&quot;bb&quot;, cc) { }') is ':lang(&quot;bb&quot;, cc) { }'
-PASS parseThenSerializeRule(':lang(&quot;ddd&quot;, eee) { }') is ':lang(&quot;ddd&quot;, eee) { }'
-PASS parseThenSerializeRule(':lang(&quot;ddd&quot;, eee, ffff) { }') is ':lang(&quot;ddd&quot;, eee, ffff) { }'
-PASS parseThenSerializeRule(':lang(&quot;ddd&quot;, eee, &quot;ffff&quot;) { }') is ':lang(&quot;ddd&quot;, eee, &quot;ffff&quot;) { }'
</del><ins>+PASS parseThenSerializeRule(':lang(&quot;bb&quot;, cc) { }') is ':lang(&quot;bb&quot;, &quot;cc&quot;) { }'
+PASS parseThenSerializeRule(':lang(&quot;ddd&quot;, eee) { }') is ':lang(&quot;ddd&quot;, &quot;eee&quot;) { }'
+PASS parseThenSerializeRule(':lang(&quot;ddd&quot;, eee, ffff) { }') is ':lang(&quot;ddd&quot;, &quot;eee&quot;, &quot;ffff&quot;) { }'
+PASS parseThenSerializeRule(':lang(&quot;ddd&quot;, eee, &quot;ffff&quot;) { }') is ':lang(&quot;ddd&quot;, &quot;eee&quot;, &quot;ffff&quot;) { }'
</ins><span class="cx"> PASS parseThenSerializeRule(':lang(&quot;*-1997&quot;) { }') is ':lang(&quot;*-1997&quot;) { }'
</span><span class="cx"> PASS parseThenSerializeRule(':lang(&quot;*-1997&quot;, &quot;*-1998&quot;) { }') is ':lang(&quot;*-1997&quot;, &quot;*-1998&quot;) { }'
</span><span class="cx"> PASS parseThenSerializeRule(':lang(&quot;*-1997&quot;, &quot;*-1998&quot;, &quot;*-1999&quot;) { }') is ':lang(&quot;*-1997&quot;, &quot;*-1998&quot;, &quot;*-1999&quot;) { }'
</span><span class="cx"> PASS parseThenSerializeRule(':lang(&quot;&quot;) { }') is ':lang(&quot;&quot;) { }'
</span><span class="cx"> 
</span><del>-PASS parseThenSerializeRule(':lang(foo, &quot;bar&quot;, baz) { }') is ':lang(foo, &quot;bar&quot;, baz) { }'
-PASS parseThenSerializeRule(':lang(foo,      &quot;bar&quot;     , baz) { }') is ':lang(foo, &quot;bar&quot;, baz) { }'
-PASS parseThenSerializeRule(':lang(    foo    ,     &quot;bar&quot;    ,     baz    ) { }') is ':lang(foo, &quot;bar&quot;, baz) { }'
</del><ins>+PASS parseThenSerializeRule(':lang(foo, &quot;bar&quot;, baz) { }') is ':lang(&quot;foo&quot;, &quot;bar&quot;, &quot;baz&quot;) { }'
+PASS parseThenSerializeRule(':lang(foo,      &quot;bar&quot;     , baz) { }') is ':lang(&quot;foo&quot;, &quot;bar&quot;, &quot;baz&quot;) { }'
+PASS parseThenSerializeRule(':lang(    foo    ,     &quot;bar&quot;    ,     baz    ) { }') is ':lang(&quot;foo&quot;, &quot;bar&quot;, &quot;baz&quot;) { }'
</ins><span class="cx"> PASS successfullyParsed is true
</span><span class="cx"> 
</span><span class="cx"> TEST COMPLETE
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit28LayoutTestsfastcsscsslangselectorwithstringargumentstexthtml"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-lang-selector-with-string-arguments-text.html (180823 => 180824)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-lang-selector-with-string-arguments-text.html        2015-02-28 10:51:58 UTC (rev 180823)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-lang-selector-with-string-arguments-text.html        2015-02-28 10:56:57 UTC (rev 180824)
</span><span class="lines">@@ -23,9 +23,32 @@
</span><span class="cx">     return styleElement.sheet.cssRules[0].cssText;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+function expectedSerializedSelector(selector)
+{
+    var args = /\(([^)]+)/.exec(selector);
+    if (!args[1])
+        return;
+
+    args = args[1].split(/\s*,\s*/);
+    var expected = ':lang(';
+    for (var i = 0; i &lt; args.length; ++i) {
+        var arg = args[i];
+        var hasQuotes = arg.indexOf('&quot;') == 0 &amp;&amp; arg.lastIndexOf('&quot;') == arg.length - 1;
+        if (!hasQuotes)
+            expected += '&quot;';
+        expected += args[i];
+        if (!hasQuotes)
+            expected += '&quot;';
+        if (i &lt; args.length - 1)
+            expected += ', ';
+    }
+    expected += ')';
+    return expected;
+}
+
</ins><span class="cx"> function testSelectorRoundTrip(selector)
</span><span class="cx"> {
</span><del>-    shouldBe(&quot;parseThenSerializeRule('&quot; + selector + &quot; { }')&quot;, &quot;'&quot; + selector + &quot; { }'&quot;);
</del><ins>+    shouldBe(&quot;parseThenSerializeRule('&quot; + selector + &quot; { }')&quot;, &quot;'&quot; + expectedSerializedSelector(selector) + &quot; { }'&quot;);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> testSelectorRoundTrip(':lang(&quot;a&quot;)');
</span><span class="lines">@@ -40,9 +63,9 @@
</span><span class="cx"> 
</span><span class="cx"> debug('');
</span><span class="cx"> 
</span><del>-shouldBe(&quot;parseThenSerializeRule(':lang(foo, \&quot;bar\&quot;, baz) { }')&quot;, &quot;':lang(foo, \&quot;bar\&quot;, baz) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(foo,      \&quot;bar\&quot;     , baz) { }')&quot;, &quot;':lang(foo, \&quot;bar\&quot;, baz) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(    foo    ,     \&quot;bar\&quot;    ,     baz    ) { }')&quot;, &quot;':lang(foo, \&quot;bar\&quot;, baz) { }'&quot;);
</del><ins>+shouldBe(&quot;parseThenSerializeRule(':lang(foo, \&quot;bar\&quot;, baz) { }')&quot;, &quot;':lang(\&quot;foo\&quot;, \&quot;bar\&quot;, \&quot;baz\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(foo,      \&quot;bar\&quot;     , baz) { }')&quot;, &quot;':lang(\&quot;foo\&quot;, \&quot;bar\&quot;, \&quot;baz\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(    foo    ,     \&quot;bar\&quot;    ,     baz    ) { }')&quot;, &quot;':lang(\&quot;foo\&quot;, \&quot;bar\&quot;, \&quot;baz\&quot;) { }'&quot;);
</ins><span class="cx"> &lt;/script&gt;
</span><span class="cx"> &lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
</span><span class="cx"> &lt;/body&gt;
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit28LayoutTestsfastcsscssselectortextexpectedtxt"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-selector-text-expected.txt (180823 => 180824)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-selector-text-expected.txt        2015-02-28 10:51:58 UTC (rev 180823)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-selector-text-expected.txt        2015-02-28 10:56:57 UTC (rev 180824)
</span><span class="lines">@@ -58,20 +58,20 @@
</span><span class="cx"> PASS parseThenSerializeRule(':lang(&quot;*-ab-&quot;) { }') is ':lang(&quot;*-ab-&quot;) { }'
</span><span class="cx"> PASS parseThenSerializeRule(':lang(&quot;*-DE-1996&quot;) { }') is ':lang(&quot;*-DE-1996&quot;) { }'
</span><span class="cx"> 
</span><del>-PASS parseThenSerializeRule(':lang(a) { }') is ':lang(a) { }'
-PASS parseThenSerializeRule(':lang(a, b, c) { }') is ':lang(a, b, c) { }'
-PASS parseThenSerializeRule(':lang(fr, de, en, id) { }') is ':lang(fr, de, en, id) { }'
-PASS parseThenSerializeRule(':lang(fr, fr-ca, fr-be) { }') is ':lang(fr, fr-ca, fr-be) { }'
-PASS parseThenSerializeRule(':lang(de-DE, de-DE-1996, de-Latn-DE, de-Latf-DE, de-Latn-DE-1996) { }') is ':lang(de-DE, de-DE-1996, de-Latn-DE, de-Latf-DE, de-Latn-DE-1996) { }'
-PASS parseThenSerializeRule(':lang(de-CH, it-CH, fr-CH, rm-CH) { }') is ':lang(de-CH, it-CH, fr-CH, rm-CH) { }'
-PASS parseThenSerializeRule(':lang(de-DE, de-DE-1996, de-Latn-DE, de-Latf-DE, de-Latn-DE-1996, de-CH, it-CH, fr-CH, rm-CH) { }') is ':lang(de-DE, de-DE-1996, de-Latn-DE, de-Latf-DE, de-Latn-DE-1996, de-CH, it-CH, fr-CH, rm-CH) { }'
</del><ins>+PASS parseThenSerializeRule(':lang(a) { }') is ':lang(&quot;a&quot;) { }'
+PASS parseThenSerializeRule(':lang(a, b, c) { }') is ':lang(&quot;a&quot;, &quot;b&quot;, &quot;c&quot;) { }'
+PASS parseThenSerializeRule(':lang(fr, de, en, id) { }') is ':lang(&quot;fr&quot;, &quot;de&quot;, &quot;en&quot;, &quot;id&quot;) { }'
+PASS parseThenSerializeRule(':lang(fr, fr-ca, fr-be) { }') is ':lang(&quot;fr&quot;, &quot;fr-ca&quot;, &quot;fr-be&quot;) { }'
+PASS parseThenSerializeRule(':lang(de-DE, de-DE-1996, de-Latn-DE, de-Latf-DE, de-Latn-DE-1996) { }') is ':lang(&quot;de-DE&quot;, &quot;de-DE-1996&quot;, &quot;de-Latn-DE&quot;, &quot;de-Latf-DE&quot;, &quot;de-Latn-DE-1996&quot;) { }'
+PASS parseThenSerializeRule(':lang(de-CH, it-CH, fr-CH, rm-CH) { }') is ':lang(&quot;de-CH&quot;, &quot;it-CH&quot;, &quot;fr-CH&quot;, &quot;rm-CH&quot;) { }'
+PASS parseThenSerializeRule(':lang(de-DE, de-DE-1996, de-Latn-DE, de-Latf-DE, de-Latn-DE-1996, de-CH, it-CH, fr-CH, rm-CH) { }') is ':lang(&quot;de-DE&quot;, &quot;de-DE-1996&quot;, &quot;de-Latn-DE&quot;, &quot;de-Latf-DE&quot;, &quot;de-Latn-DE-1996&quot;, &quot;de-CH&quot;, &quot;it-CH&quot;, &quot;fr-CH&quot;, &quot;rm-CH&quot;) { }'
</ins><span class="cx"> 
</span><del>-PASS parseThenSerializeRule(':lang(a, a, a) { }') is ':lang(a, a, a) { }'
-PASS parseThenSerializeRule(':lang(en, en, en) { }') is ':lang(en, en, en) { }'
-PASS parseThenSerializeRule(':lang(en-us, en-us, en-us) { }') is ':lang(en-us, en-us, en-us) { }'
-PASS parseThenSerializeRule(':lang(de-DE-1996, de-DE-1996, de-DE-1996) { }') is ':lang(de-DE-1996, de-DE-1996, de-DE-1996) { }'
-PASS parseThenSerializeRule(':lang(de-Latn-DE-1996, de-Latn-DE-1996, de-Latn-DE-1996) { }') is ':lang(de-Latn-DE-1996, de-Latn-DE-1996, de-Latn-DE-1996) { }'
-PASS parseThenSerializeRule(':lang(java, java, java) { }') is ':lang(java, java, java) { }'
</del><ins>+PASS parseThenSerializeRule(':lang(a, a, a) { }') is ':lang(&quot;a&quot;, &quot;a&quot;, &quot;a&quot;) { }'
+PASS parseThenSerializeRule(':lang(en, en, en) { }') is ':lang(&quot;en&quot;, &quot;en&quot;, &quot;en&quot;) { }'
+PASS parseThenSerializeRule(':lang(en-us, en-us, en-us) { }') is ':lang(&quot;en-us&quot;, &quot;en-us&quot;, &quot;en-us&quot;) { }'
+PASS parseThenSerializeRule(':lang(de-DE-1996, de-DE-1996, de-DE-1996) { }') is ':lang(&quot;de-DE-1996&quot;, &quot;de-DE-1996&quot;, &quot;de-DE-1996&quot;) { }'
+PASS parseThenSerializeRule(':lang(de-Latn-DE-1996, de-Latn-DE-1996, de-Latn-DE-1996) { }') is ':lang(&quot;de-Latn-DE-1996&quot;, &quot;de-Latn-DE-1996&quot;, &quot;de-Latn-DE-1996&quot;) { }'
+PASS parseThenSerializeRule(':lang(java, java, java) { }') is ':lang(&quot;java&quot;, &quot;java&quot;, &quot;java&quot;) { }'
</ins><span class="cx"> 
</span><span class="cx"> PASS parseThenSerializeRule(':not(a) { }') is ':not(a) { }'
</span><span class="cx"> PASS parseThenSerializeRule(':-webkit-any(a, b, p) { }') is ':-webkit-any(a, b, p) { }'
</span><span class="lines">@@ -287,40 +287,40 @@
</span><span class="cx"> PASS parseThenSerializeRule(':not(a.class1.class2.class3:hover   ) { }') is ':not(a.class1.class2.class3:hover) { }'
</span><span class="cx"> PASS parseThenSerializeRule(':not(:matches(single    ),:matches(a,b    ,p),:matches(#alice,                   #bob,#chris)) { }') is ':not(:matches(single), :matches(a, b, p), :matches(#alice, #bob, #chris)) { }'
</span><span class="cx"> 
</span><del>-PASS parseThenSerializeRule(':lang(a    ) { }') is ':lang(a) { }'
-PASS parseThenSerializeRule(':lang(    a) { }') is ':lang(a) { }'
-PASS parseThenSerializeRule(':lang(a,    b,    c) { }') is ':lang(a, b, c) { }'
-PASS parseThenSerializeRule(':lang(    a, b ,c) { }') is ':lang(a, b, c) { }'
-PASS parseThenSerializeRule(':lang(  a  ,  b  ,  c  ) { }') is ':lang(a, b, c) { }'
-PASS parseThenSerializeRule(':lang(    a  ,b,c) { }') is ':lang(a, b, c) { }'
-PASS parseThenSerializeRule(':lang(    a  ,b  ,c) { }') is ':lang(a, b, c) { }'
-PASS parseThenSerializeRule(':lang(    a  ,b  ,c  ) { }') is ':lang(a, b, c) { }'
-PASS parseThenSerializeRule(':lang(a,b    ,c) { }') is ':lang(a, b, c) { }'
-PASS parseThenSerializeRule(':lang(a,b,    c) { }') is ':lang(a, b, c) { }'
-PASS parseThenSerializeRule(':lang(a,b,    c    ) { }') is ':lang(a, b, c) { }'
</del><ins>+PASS parseThenSerializeRule(':lang(a    ) { }') is ':lang(&quot;a&quot;) { }'
+PASS parseThenSerializeRule(':lang(    a) { }') is ':lang(&quot;a&quot;) { }'
+PASS parseThenSerializeRule(':lang(a,    b,    c) { }') is ':lang(&quot;a&quot;, &quot;b&quot;, &quot;c&quot;) { }'
+PASS parseThenSerializeRule(':lang(    a, b ,c) { }') is ':lang(&quot;a&quot;, &quot;b&quot;, &quot;c&quot;) { }'
+PASS parseThenSerializeRule(':lang(  a  ,  b  ,  c  ) { }') is ':lang(&quot;a&quot;, &quot;b&quot;, &quot;c&quot;) { }'
+PASS parseThenSerializeRule(':lang(    a  ,b,c) { }') is ':lang(&quot;a&quot;, &quot;b&quot;, &quot;c&quot;) { }'
+PASS parseThenSerializeRule(':lang(    a  ,b  ,c) { }') is ':lang(&quot;a&quot;, &quot;b&quot;, &quot;c&quot;) { }'
+PASS parseThenSerializeRule(':lang(    a  ,b  ,c  ) { }') is ':lang(&quot;a&quot;, &quot;b&quot;, &quot;c&quot;) { }'
+PASS parseThenSerializeRule(':lang(a,b    ,c) { }') is ':lang(&quot;a&quot;, &quot;b&quot;, &quot;c&quot;) { }'
+PASS parseThenSerializeRule(':lang(a,b,    c) { }') is ':lang(&quot;a&quot;, &quot;b&quot;, &quot;c&quot;) { }'
+PASS parseThenSerializeRule(':lang(a,b,    c    ) { }') is ':lang(&quot;a&quot;, &quot;b&quot;, &quot;c&quot;) { }'
</ins><span class="cx"> 
</span><del>-PASS parseThenSerializeRule(':lang(en, en, en) { }') is ':lang(en, en, en) { }'
-PASS parseThenSerializeRule(':lang(en,en,en) { }') is ':lang(en, en, en) { }'
-PASS parseThenSerializeRule(':lang(en,en,    en) { }') is ':lang(en, en, en) { }'
-PASS parseThenSerializeRule(':lang(en,    en,en) { }') is ':lang(en, en, en) { }'
-PASS parseThenSerializeRule(':lang(en,    en,en    ) { }') is ':lang(en, en, en) { }'
-PASS parseThenSerializeRule(':lang(    en,    en,en    ) { }') is ':lang(en, en, en) { }'
-PASS parseThenSerializeRule(':lang(en,   en,   en) { }') is ':lang(en, en, en) { }'
-PASS parseThenSerializeRule(':lang(    en,    en,    en) { }') is ':lang(en, en, en) { }'
-PASS parseThenSerializeRule(':lang(    en,    en,    en    ) { }') is ':lang(en, en, en) { }'
-PASS parseThenSerializeRule(':lang(    en    ,    en    ,   en    ) { }') is ':lang(en, en, en) { }'
-PASS parseThenSerializeRule(':lang(    en,en,en    ) { }') is ':lang(en, en, en) { }'
</del><ins>+PASS parseThenSerializeRule(':lang(en, en, en) { }') is ':lang(&quot;en&quot;, &quot;en&quot;, &quot;en&quot;) { }'
+PASS parseThenSerializeRule(':lang(en,en,en) { }') is ':lang(&quot;en&quot;, &quot;en&quot;, &quot;en&quot;) { }'
+PASS parseThenSerializeRule(':lang(en,en,    en) { }') is ':lang(&quot;en&quot;, &quot;en&quot;, &quot;en&quot;) { }'
+PASS parseThenSerializeRule(':lang(en,    en,en) { }') is ':lang(&quot;en&quot;, &quot;en&quot;, &quot;en&quot;) { }'
+PASS parseThenSerializeRule(':lang(en,    en,en    ) { }') is ':lang(&quot;en&quot;, &quot;en&quot;, &quot;en&quot;) { }'
+PASS parseThenSerializeRule(':lang(    en,    en,en    ) { }') is ':lang(&quot;en&quot;, &quot;en&quot;, &quot;en&quot;) { }'
+PASS parseThenSerializeRule(':lang(en,   en,   en) { }') is ':lang(&quot;en&quot;, &quot;en&quot;, &quot;en&quot;) { }'
+PASS parseThenSerializeRule(':lang(    en,    en,    en) { }') is ':lang(&quot;en&quot;, &quot;en&quot;, &quot;en&quot;) { }'
+PASS parseThenSerializeRule(':lang(    en,    en,    en    ) { }') is ':lang(&quot;en&quot;, &quot;en&quot;, &quot;en&quot;) { }'
+PASS parseThenSerializeRule(':lang(    en    ,    en    ,   en    ) { }') is ':lang(&quot;en&quot;, &quot;en&quot;, &quot;en&quot;) { }'
+PASS parseThenSerializeRule(':lang(    en,en,en    ) { }') is ':lang(&quot;en&quot;, &quot;en&quot;, &quot;en&quot;) { }'
</ins><span class="cx"> 
</span><span class="cx"> PASS parseThenSerializeRule(':lang(&quot;*-DE&quot;, &quot;*-CH&quot;, &quot;*-EN&quot;) { }') is ':lang(&quot;*-DE&quot;, &quot;*-CH&quot;, &quot;*-EN&quot;) { }'
</span><span class="cx"> PASS parseThenSerializeRule(':lang(&quot;*-DE&quot;,&quot;*-CH&quot;,&quot;*-EN&quot;) { }') is ':lang(&quot;*-DE&quot;, &quot;*-CH&quot;, &quot;*-EN&quot;) { }'
</span><span class="cx"> PASS parseThenSerializeRule(':lang(   &quot;*-DE&quot;  ,  &quot;*-CH&quot;  ,  &quot;*-EN&quot;  ) { }') is ':lang(&quot;*-DE&quot;, &quot;*-CH&quot;, &quot;*-EN&quot;) { }'
</span><span class="cx"> 
</span><del>-PASS parseThenSerializeRule(':lang(\\*) { }') is ':lang(*) { }'
</del><ins>+PASS parseThenSerializeRule(':lang(\\*) { }') is ':lang(&quot;*&quot;) { }'
</ins><span class="cx"> PASS parseThenSerializeRule(':lang(&quot;*-\\*&quot;) { }') is ':lang(&quot;*-*&quot;) { }'
</span><span class="cx"> PASS parseThenSerializeRule(':lang(&quot;*-\\*-\\*&quot;) { }') is ':lang(&quot;*-*-*&quot;) { }'
</span><span class="cx"> PASS parseThenSerializeRule(':lang(&quot;*-\\*-\\*-\\*&quot;) { }') is ':lang(&quot;*-*-*-*&quot;) { }'
</span><span class="cx"> 
</span><del>-PASS parseThenSerializeRule(':lang(ab-\\*) { }') is ':lang(ab-*) { }'
</del><ins>+PASS parseThenSerializeRule(':lang(ab-\\*) { }') is ':lang(&quot;ab-*&quot;) { }'
</ins><span class="cx"> PASS parseThenSerializeRule(':lang(&quot;*-ab-\\*&quot;) { }') is ':lang(&quot;*-ab-*&quot;) { }'
</span><span class="cx"> PASS parseThenSerializeRule(':lang(&quot;*-ab-\\*-&quot;) { }') is ':lang(&quot;*-ab-*-&quot;) { }'
</span><span class="cx"> PASS parseThenSerializeRule(':lang(&quot;*-foo-\\3A&quot;) { }') is ':lang(&quot;*-foo-:&quot;) { }'
</span><span class="lines">@@ -330,48 +330,48 @@
</span><span class="cx"> PASS parseThenSerializeRule(':lang(&quot;*-foo-\\0062 \\0061 r&quot;) { }') is ':lang(&quot;*-foo-bar&quot;) { }'
</span><span class="cx"> PASS parseThenSerializeRule(':lang(&quot;*-foo-col\\6Fr&quot;) { }') is ':lang(&quot;*-foo-color&quot;) { }'
</span><span class="cx"> 
</span><del>-PASS parseThenSerializeRule(':lang(\\*    ) { }') is ':lang(*) { }'
</del><ins>+PASS parseThenSerializeRule(':lang(\\*    ) { }') is ':lang(&quot;*&quot;) { }'
</ins><span class="cx"> PASS parseThenSerializeRule(':lang(&quot;*-en&quot;    ) { }') is ':lang(&quot;*-en&quot;) { }'
</span><span class="cx"> PASS parseThenSerializeRule(':lang(&quot;*-en-\\*&quot;    ) { }') is ':lang(&quot;*-en-*&quot;) { }'
</span><span class="cx"> PASS parseThenSerializeRule(':lang(&quot;*-en-\\*-fr&quot;    ) { }') is ':lang(&quot;*-en-*-fr&quot;) { }'
</span><del>-PASS parseThenSerializeRule(':lang(&quot;*-en-\\*-fr&quot;,br    ) { }') is ':lang(&quot;*-en-*-fr&quot;, br) { }'
-PASS parseThenSerializeRule(':lang(&quot;*-en-\\*-fr&quot;, br    ) { }') is ':lang(&quot;*-en-*-fr&quot;, br) { }'
-PASS parseThenSerializeRule(':lang(&quot;*-en-\\*-fr&quot;,   br    ) { }') is ':lang(&quot;*-en-*-fr&quot;, br) { }'
-PASS parseThenSerializeRule(':lang(  &quot;*-en-\\*-fr&quot;,   br    ) { }') is ':lang(&quot;*-en-*-fr&quot;, br) { }'
-PASS parseThenSerializeRule(':lang(    &quot;*-en-\\*-fr&quot;,   br    ) { }') is ':lang(&quot;*-en-*-fr&quot;, br) { }'
-PASS parseThenSerializeRule(':lang(    &quot;*-en-\\*-fr&quot;  ,   br    ) { }') is ':lang(&quot;*-en-*-fr&quot;, br) { }'
</del><ins>+PASS parseThenSerializeRule(':lang(&quot;*-en-\\*-fr&quot;,br    ) { }') is ':lang(&quot;*-en-*-fr&quot;, &quot;br&quot;) { }'
+PASS parseThenSerializeRule(':lang(&quot;*-en-\\*-fr&quot;, br    ) { }') is ':lang(&quot;*-en-*-fr&quot;, &quot;br&quot;) { }'
+PASS parseThenSerializeRule(':lang(&quot;*-en-\\*-fr&quot;,   br    ) { }') is ':lang(&quot;*-en-*-fr&quot;, &quot;br&quot;) { }'
+PASS parseThenSerializeRule(':lang(  &quot;*-en-\\*-fr&quot;,   br    ) { }') is ':lang(&quot;*-en-*-fr&quot;, &quot;br&quot;) { }'
+PASS parseThenSerializeRule(':lang(    &quot;*-en-\\*-fr&quot;,   br    ) { }') is ':lang(&quot;*-en-*-fr&quot;, &quot;br&quot;) { }'
+PASS parseThenSerializeRule(':lang(    &quot;*-en-\\*-fr&quot;  ,   br    ) { }') is ':lang(&quot;*-en-*-fr&quot;, &quot;br&quot;) { }'
</ins><span class="cx"> PASS parseThenSerializeRule(':lang(&quot;*-en-\\*-fr&quot;,&quot;*-br-zh&quot;    ) { }') is ':lang(&quot;*-en-*-fr&quot;, &quot;*-br-zh&quot;) { }'
</span><span class="cx"> PASS parseThenSerializeRule(':lang(&quot;*-en-\\*-fr&quot;, &quot;*-br-zh&quot;    ) { }') is ':lang(&quot;*-en-*-fr&quot;, &quot;*-br-zh&quot;) { }'
</span><span class="cx"> PASS parseThenSerializeRule(':lang(&quot;*-en-\\*-fr&quot;,   &quot;*-br-zh&quot;    ) { }') is ':lang(&quot;*-en-*-fr&quot;, &quot;*-br-zh&quot;) { }'
</span><span class="cx"> PASS parseThenSerializeRule(':lang(&quot;*-en-\\*-fr&quot;,     &quot;*-br-zh&quot;    ) { }') is ':lang(&quot;*-en-*-fr&quot;, &quot;*-br-zh&quot;) { }'
</span><span class="cx"> PASS parseThenSerializeRule(':lang(&quot;*-en-\\*-fr&quot;,       &quot;*-br-zh&quot;    ) { }') is ':lang(&quot;*-en-*-fr&quot;, &quot;*-br-zh&quot;) { }'
</span><span class="cx"> 
</span><del>-PASS parseThenSerializeRule(':lang(&quot;*-en-\\*-fr&quot;,br-\\*-zh    ) { }') is ':lang(&quot;*-en-*-fr&quot;, br-*-zh) { }'
-PASS parseThenSerializeRule(':lang(&quot;*-en-\\*-fr&quot;, br-\\*-zh    ) { }') is ':lang(&quot;*-en-*-fr&quot;, br-*-zh) { }'
-PASS parseThenSerializeRule(':lang(&quot;*-en-\\*-fr&quot;,   br-\\*-zh    ) { }') is ':lang(&quot;*-en-*-fr&quot;, br-*-zh) { }'
-PASS parseThenSerializeRule(':lang(&quot;*-en-\\*-fr&quot;,      br-\\*-zh    ) { }') is ':lang(&quot;*-en-*-fr&quot;, br-*-zh) { }'
-PASS parseThenSerializeRule(':lang(  &quot;*-en-\\*-fr&quot;,      br-\\*-zh    ) { }') is ':lang(&quot;*-en-*-fr&quot;, br-*-zh) { }'
-PASS parseThenSerializeRule(':lang(  &quot;*-en-\\*-fr&quot; ,      br-\\*-zh    ) { }') is ':lang(&quot;*-en-*-fr&quot;, br-*-zh) { }'
-PASS parseThenSerializeRule(':lang(  &quot;*-en-\\*-fr&quot;  ,      br-\\*-zh    ) { }') is ':lang(&quot;*-en-*-fr&quot;, br-*-zh) { }'
</del><ins>+PASS parseThenSerializeRule(':lang(&quot;*-en-\\*-fr&quot;,br-\\*-zh    ) { }') is ':lang(&quot;*-en-*-fr&quot;, &quot;br-*-zh&quot;) { }'
+PASS parseThenSerializeRule(':lang(&quot;*-en-\\*-fr&quot;, br-\\*-zh    ) { }') is ':lang(&quot;*-en-*-fr&quot;, &quot;br-*-zh&quot;) { }'
+PASS parseThenSerializeRule(':lang(&quot;*-en-\\*-fr&quot;,   br-\\*-zh    ) { }') is ':lang(&quot;*-en-*-fr&quot;, &quot;br-*-zh&quot;) { }'
+PASS parseThenSerializeRule(':lang(&quot;*-en-\\*-fr&quot;,      br-\\*-zh    ) { }') is ':lang(&quot;*-en-*-fr&quot;, &quot;br-*-zh&quot;) { }'
+PASS parseThenSerializeRule(':lang(  &quot;*-en-\\*-fr&quot;,      br-\\*-zh    ) { }') is ':lang(&quot;*-en-*-fr&quot;, &quot;br-*-zh&quot;) { }'
+PASS parseThenSerializeRule(':lang(  &quot;*-en-\\*-fr&quot; ,      br-\\*-zh    ) { }') is ':lang(&quot;*-en-*-fr&quot;, &quot;br-*-zh&quot;) { }'
+PASS parseThenSerializeRule(':lang(  &quot;*-en-\\*-fr&quot;  ,      br-\\*-zh    ) { }') is ':lang(&quot;*-en-*-fr&quot;, &quot;br-*-zh&quot;) { }'
</ins><span class="cx"> 
</span><del>-PASS parseThenSerializeRule(':lang(\\*) { }') is ':lang(*) { }'
-PASS parseThenSerializeRule(':lang(\\* ) { }') is ':lang(*) { }'
-PASS parseThenSerializeRule(':lang(\\*   ) { }') is ':lang(*) { }'
-PASS parseThenSerializeRule(':lang( \\*   ) { }') is ':lang(*) { }'
-PASS parseThenSerializeRule(':lang(  \\*) { }') is ':lang(*) { }'
-PASS parseThenSerializeRule(':lang(   \\*   ) { }') is ':lang(*) { }'
</del><ins>+PASS parseThenSerializeRule(':lang(\\*) { }') is ':lang(&quot;*&quot;) { }'
+PASS parseThenSerializeRule(':lang(\\* ) { }') is ':lang(&quot;*&quot;) { }'
+PASS parseThenSerializeRule(':lang(\\*   ) { }') is ':lang(&quot;*&quot;) { }'
+PASS parseThenSerializeRule(':lang( \\*   ) { }') is ':lang(&quot;*&quot;) { }'
+PASS parseThenSerializeRule(':lang(  \\*) { }') is ':lang(&quot;*&quot;) { }'
+PASS parseThenSerializeRule(':lang(   \\*   ) { }') is ':lang(&quot;*&quot;) { }'
</ins><span class="cx"> 
</span><del>-PASS parseThenSerializeRule(':lang(   \\*,id-\\*-sumatra   ) { }') is ':lang(*, id-*-sumatra) { }'
-PASS parseThenSerializeRule(':lang(   \\* ,id-\\*-sumatra) { }') is ':lang(*, id-*-sumatra) { }'
-PASS parseThenSerializeRule(':lang(   \\*  ,  id-\\*-sumatra  ) { }') is ':lang(*, id-*-sumatra) { }'
-PASS parseThenSerializeRule(':lang(   \\*   ,    id-\\*-sumatra  ) { }') is ':lang(*, id-*-sumatra) { }'
</del><ins>+PASS parseThenSerializeRule(':lang(   \\*,id-\\*-sumatra   ) { }') is ':lang(&quot;*&quot;, &quot;id-*-sumatra&quot;) { }'
+PASS parseThenSerializeRule(':lang(   \\* ,id-\\*-sumatra) { }') is ':lang(&quot;*&quot;, &quot;id-*-sumatra&quot;) { }'
+PASS parseThenSerializeRule(':lang(   \\*  ,  id-\\*-sumatra  ) { }') is ':lang(&quot;*&quot;, &quot;id-*-sumatra&quot;) { }'
+PASS parseThenSerializeRule(':lang(   \\*   ,    id-\\*-sumatra  ) { }') is ':lang(&quot;*&quot;, &quot;id-*-sumatra&quot;) { }'
</ins><span class="cx"> 
</span><del>-PASS parseThenSerializeRule(':lang(en-\\*) { }') is ':lang(en-*) { }'
-PASS parseThenSerializeRule(':lang(en-\\*, fr-\\*) { }') is ':lang(en-*, fr-*) { }'
-PASS parseThenSerializeRule(':lang(en-\\*, fr-\\* ) { }') is ':lang(en-*, fr-*) { }'
-PASS parseThenSerializeRule(':lang(   en-\\*   ,  fr-\\*   ) { }') is ':lang(en-*, fr-*) { }'
-PASS parseThenSerializeRule(':lang(   en-\\*   ,fr-\\*   ) { }') is ':lang(en-*, fr-*) { }'
-PASS parseThenSerializeRule(':lang(   en-\\*,fr-\\*   ) { }') is ':lang(en-*, fr-*) { }'
</del><ins>+PASS parseThenSerializeRule(':lang(en-\\*) { }') is ':lang(&quot;en-*&quot;) { }'
+PASS parseThenSerializeRule(':lang(en-\\*, fr-\\*) { }') is ':lang(&quot;en-*&quot;, &quot;fr-*&quot;) { }'
+PASS parseThenSerializeRule(':lang(en-\\*, fr-\\* ) { }') is ':lang(&quot;en-*&quot;, &quot;fr-*&quot;) { }'
+PASS parseThenSerializeRule(':lang(   en-\\*   ,  fr-\\*   ) { }') is ':lang(&quot;en-*&quot;, &quot;fr-*&quot;) { }'
+PASS parseThenSerializeRule(':lang(   en-\\*   ,fr-\\*   ) { }') is ':lang(&quot;en-*&quot;, &quot;fr-*&quot;) { }'
+PASS parseThenSerializeRule(':lang(   en-\\*,fr-\\*   ) { }') is ':lang(&quot;en-*&quot;, &quot;fr-*&quot;) { }'
</ins><span class="cx"> 
</span><span class="cx"> PASS parseThenSerializeRule(':lang() { }') threw exception TypeError: undefined is not an object (evaluating 'styleElement.sheet.cssRules[0].cssText').
</span><span class="cx"> PASS parseThenSerializeRule(':lang(12, b, c) { }') threw exception TypeError: undefined is not an object (evaluating 'styleElement.sheet.cssRules[0].cssText').
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit28LayoutTestsfastcsscssselectortexthtml"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-selector-text.html (180823 => 180824)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-selector-text.html        2015-02-28 10:51:58 UTC (rev 180823)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-selector-text.html        2015-02-28 10:56:57 UTC (rev 180824)
</span><span class="lines">@@ -23,9 +23,33 @@
</span><span class="cx">     return styleElement.sheet.cssRules[0].cssText;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+function expectedSerializedLangSelector(selector)
+{
+    var args = /:lang\(([^)]+)/.exec(selector);
+    if (!args || !args[1])
+        return selector;
+
+    args = args[1].split(/\s*,\s*/);
+    var expected = ':lang(';
+    for (var i = 0; i &lt; args.length; ++i) {
+        var arg = args[i];
+        var hasQuotes = arg.indexOf('&quot;') == 0 &amp;&amp; arg.lastIndexOf('&quot;') == arg.length - 1;
+        if (!hasQuotes)
+            expected += '&quot;';
+        expected += args[i];
+        if (!hasQuotes)
+            expected += '&quot;';
+        if (i &lt; args.length - 1)
+            expected += ', ';
+    }
+    expected += ')';
+    return expected;
+}
+
</ins><span class="cx"> function testSelectorRoundTrip(selector)
</span><span class="cx"> {
</span><del>-    shouldBe(&quot;parseThenSerializeRule('&quot; + selector + &quot; { }')&quot;, &quot;'&quot; + selector + &quot; { }'&quot;);
</del><ins>+    var expected = selector.indexOf(&quot;:lang&quot;) == 0 ? expectedSerializedLangSelector(selector) : selector;
+    shouldBe(&quot;parseThenSerializeRule('&quot; + selector + &quot; { }')&quot;, &quot;'&quot; + expected + &quot; { }'&quot;);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> testSelectorRoundTrip('*');
</span><span class="lines">@@ -366,31 +390,31 @@
</span><span class="cx"> 
</span><span class="cx"> debug('');
</span><span class="cx"> 
</span><del>-shouldBe(&quot;parseThenSerializeRule(':lang(a    ) { }')&quot;, &quot;':lang(a) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(    a) { }')&quot;, &quot;':lang(a) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(a,    b,    c) { }')&quot;, &quot;':lang(a, b, c) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(    a, b ,c) { }')&quot;, &quot;':lang(a, b, c) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(  a  ,  b  ,  c  ) { }')&quot;, &quot;':lang(a, b, c) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(    a  ,b,c) { }')&quot;, &quot;':lang(a, b, c) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(    a  ,b  ,c) { }')&quot;, &quot;':lang(a, b, c) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(    a  ,b  ,c  ) { }')&quot;, &quot;':lang(a, b, c) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(a,b    ,c) { }')&quot;, &quot;':lang(a, b, c) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(a,b,    c) { }')&quot;, &quot;':lang(a, b, c) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(a,b,    c    ) { }')&quot;, &quot;':lang(a, b, c) { }'&quot;);
</del><ins>+shouldBe(&quot;parseThenSerializeRule(':lang(a    ) { }')&quot;, &quot;':lang(\&quot;a\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(    a) { }')&quot;, &quot;':lang(\&quot;a\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(a,    b,    c) { }')&quot;, &quot;':lang(\&quot;a\&quot;, \&quot;b\&quot;, \&quot;c\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(    a, b ,c) { }')&quot;, &quot;':lang(\&quot;a\&quot;, \&quot;b\&quot;, \&quot;c\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(  a  ,  b  ,  c  ) { }')&quot;, &quot;':lang(\&quot;a\&quot;, \&quot;b\&quot;, \&quot;c\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(    a  ,b,c) { }')&quot;, &quot;':lang(\&quot;a\&quot;, \&quot;b\&quot;, \&quot;c\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(    a  ,b  ,c) { }')&quot;, &quot;':lang(\&quot;a\&quot;, \&quot;b\&quot;, \&quot;c\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(    a  ,b  ,c  ) { }')&quot;, &quot;':lang(\&quot;a\&quot;, \&quot;b\&quot;, \&quot;c\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(a,b    ,c) { }')&quot;, &quot;':lang(\&quot;a\&quot;, \&quot;b\&quot;, \&quot;c\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(a,b,    c) { }')&quot;, &quot;':lang(\&quot;a\&quot;, \&quot;b\&quot;, \&quot;c\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(a,b,    c    ) { }')&quot;, &quot;':lang(\&quot;a\&quot;, \&quot;b\&quot;, \&quot;c\&quot;) { }'&quot;);
</ins><span class="cx"> 
</span><span class="cx"> debug('');
</span><span class="cx"> 
</span><del>-shouldBe(&quot;parseThenSerializeRule(':lang(en, en, en) { }')&quot;, &quot;':lang(en, en, en) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(en,en,en) { }')&quot;, &quot;':lang(en, en, en) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(en,en,    en) { }')&quot;, &quot;':lang(en, en, en) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(en,    en,en) { }')&quot;, &quot;':lang(en, en, en) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(en,    en,en    ) { }')&quot;, &quot;':lang(en, en, en) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(    en,    en,en    ) { }')&quot;, &quot;':lang(en, en, en) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(en,   en,   en) { }')&quot;, &quot;':lang(en, en, en) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(    en,    en,    en) { }')&quot;, &quot;':lang(en, en, en) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(    en,    en,    en    ) { }')&quot;, &quot;':lang(en, en, en) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(    en    ,    en    ,   en    ) { }')&quot;, &quot;':lang(en, en, en) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(    en,en,en    ) { }')&quot;, &quot;':lang(en, en, en) { }'&quot;);
</del><ins>+shouldBe(&quot;parseThenSerializeRule(':lang(en, en, en) { }')&quot;, &quot;':lang(\&quot;en\&quot;, \&quot;en\&quot;, \&quot;en\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(en,en,en) { }')&quot;, &quot;':lang(\&quot;en\&quot;, \&quot;en\&quot;, \&quot;en\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(en,en,    en) { }')&quot;, &quot;':lang(\&quot;en\&quot;, \&quot;en\&quot;, \&quot;en\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(en,    en,en) { }')&quot;, &quot;':lang(\&quot;en\&quot;, \&quot;en\&quot;, \&quot;en\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(en,    en,en    ) { }')&quot;, &quot;':lang(\&quot;en\&quot;, \&quot;en\&quot;, \&quot;en\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(    en,    en,en    ) { }')&quot;, &quot;':lang(\&quot;en\&quot;, \&quot;en\&quot;, \&quot;en\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(en,   en,   en) { }')&quot;, &quot;':lang(\&quot;en\&quot;, \&quot;en\&quot;, \&quot;en\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(    en,    en,    en) { }')&quot;, &quot;':lang(\&quot;en\&quot;, \&quot;en\&quot;, \&quot;en\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(    en,    en,    en    ) { }')&quot;, &quot;':lang(\&quot;en\&quot;, \&quot;en\&quot;, \&quot;en\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(    en    ,    en    ,   en    ) { }')&quot;, &quot;':lang(\&quot;en\&quot;, \&quot;en\&quot;, \&quot;en\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(    en,en,en    ) { }')&quot;, &quot;':lang(\&quot;en\&quot;, \&quot;en\&quot;, \&quot;en\&quot;) { }'&quot;);
</ins><span class="cx"> 
</span><span class="cx"> debug('');
</span><span class="cx"> 
</span><span class="lines">@@ -400,14 +424,14 @@
</span><span class="cx"> 
</span><span class="cx"> debug('');
</span><span class="cx"> 
</span><del>-shouldBe(&quot;parseThenSerializeRule(':lang(\\\\*) { }')&quot;, &quot;':lang(*) { }'&quot;);
</del><ins>+shouldBe(&quot;parseThenSerializeRule(':lang(\\\\*) { }')&quot;, &quot;':lang(\&quot;*\&quot;) { }'&quot;);
</ins><span class="cx"> shouldBe(&quot;parseThenSerializeRule(':lang(\&quot;*-\\\\*\&quot;) { }')&quot;, &quot;':lang(\&quot;*-*\&quot;) { }'&quot;);
</span><span class="cx"> shouldBe(&quot;parseThenSerializeRule(':lang(\&quot;*-\\\\*-\\\\*\&quot;) { }')&quot;, &quot;':lang(\&quot;*-*-*\&quot;) { }'&quot;);
</span><span class="cx"> shouldBe(&quot;parseThenSerializeRule(':lang(\&quot;*-\\\\*-\\\\*-\\\\*\&quot;) { }')&quot;, &quot;':lang(\&quot;*-*-*-*\&quot;) { }'&quot;);
</span><span class="cx"> 
</span><span class="cx"> debug('');
</span><span class="cx"> 
</span><del>-shouldBe(&quot;parseThenSerializeRule(':lang(ab-\\\\*) { }')&quot;, &quot;':lang(ab-*) { }'&quot;);
</del><ins>+shouldBe(&quot;parseThenSerializeRule(':lang(ab-\\\\*) { }')&quot;, &quot;':lang(\&quot;ab-*\&quot;) { }'&quot;);
</ins><span class="cx"> shouldBe(&quot;parseThenSerializeRule(':lang(\&quot;*-ab-\\\\*\&quot;) { }')&quot;, &quot;':lang(\&quot;*-ab-*\&quot;) { }'&quot;);
</span><span class="cx"> shouldBe(&quot;parseThenSerializeRule(':lang(\&quot;*-ab-\\\\*-\&quot;) { }')&quot;, &quot;':lang(\&quot;*-ab-*-\&quot;) { }'&quot;);
</span><span class="cx"> 
</span><span class="lines">@@ -421,16 +445,16 @@
</span><span class="cx"> 
</span><span class="cx"> debug('');
</span><span class="cx"> 
</span><del>-shouldBe(&quot;parseThenSerializeRule(':lang(\\\\*    ) { }')&quot;, &quot;':lang(*) { }'&quot;);
</del><ins>+shouldBe(&quot;parseThenSerializeRule(':lang(\\\\*    ) { }')&quot;, &quot;':lang(\&quot;*\&quot;) { }'&quot;);
</ins><span class="cx"> shouldBe(&quot;parseThenSerializeRule(':lang(\&quot;*-en\&quot;    ) { }')&quot;, &quot;':lang(\&quot;*-en\&quot;) { }'&quot;);
</span><span class="cx"> shouldBe(&quot;parseThenSerializeRule(':lang(\&quot;*-en-\\\\*\&quot;    ) { }')&quot;, &quot;':lang(\&quot;*-en-*\&quot;) { }'&quot;);
</span><span class="cx"> shouldBe(&quot;parseThenSerializeRule(':lang(\&quot;*-en-\\\\*-fr\&quot;    ) { }')&quot;, &quot;':lang(\&quot;*-en-*-fr\&quot;) { }'&quot;);
</span><del>-shouldBe(&quot;parseThenSerializeRule(':lang(\&quot;*-en-\\\\*-fr\&quot;,br    ) { }')&quot;, &quot;':lang(\&quot;*-en-*-fr\&quot;, br) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(\&quot;*-en-\\\\*-fr\&quot;, br    ) { }')&quot;, &quot;':lang(\&quot;*-en-*-fr\&quot;, br) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(\&quot;*-en-\\\\*-fr\&quot;,   br    ) { }')&quot;, &quot;':lang(\&quot;*-en-*-fr\&quot;, br) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(  \&quot;*-en-\\\\*-fr\&quot;,   br    ) { }')&quot;, &quot;':lang(\&quot;*-en-*-fr\&quot;, br) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(    \&quot;*-en-\\\\*-fr\&quot;,   br    ) { }')&quot;, &quot;':lang(\&quot;*-en-*-fr\&quot;, br) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(    \&quot;*-en-\\\\*-fr\&quot;  ,   br    ) { }')&quot;, &quot;':lang(\&quot;*-en-*-fr\&quot;, br) { }'&quot;);
</del><ins>+shouldBe(&quot;parseThenSerializeRule(':lang(\&quot;*-en-\\\\*-fr\&quot;,br    ) { }')&quot;, &quot;':lang(\&quot;*-en-*-fr\&quot;, \&quot;br\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(\&quot;*-en-\\\\*-fr\&quot;, br    ) { }')&quot;, &quot;':lang(\&quot;*-en-*-fr\&quot;, \&quot;br\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(\&quot;*-en-\\\\*-fr\&quot;,   br    ) { }')&quot;, &quot;':lang(\&quot;*-en-*-fr\&quot;, \&quot;br\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(  \&quot;*-en-\\\\*-fr\&quot;,   br    ) { }')&quot;, &quot;':lang(\&quot;*-en-*-fr\&quot;, \&quot;br\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(    \&quot;*-en-\\\\*-fr\&quot;,   br    ) { }')&quot;, &quot;':lang(\&quot;*-en-*-fr\&quot;, \&quot;br\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(    \&quot;*-en-\\\\*-fr\&quot;  ,   br    ) { }')&quot;, &quot;':lang(\&quot;*-en-*-fr\&quot;, \&quot;br\&quot;) { }'&quot;);
</ins><span class="cx"> shouldBe(&quot;parseThenSerializeRule(':lang(\&quot;*-en-\\\\*-fr\&quot;,\&quot;*-br-zh\&quot;    ) { }')&quot;, &quot;':lang(\&quot;*-en-*-fr\&quot;, \&quot;*-br-zh\&quot;) { }'&quot;);
</span><span class="cx"> shouldBe(&quot;parseThenSerializeRule(':lang(\&quot;*-en-\\\\*-fr\&quot;, \&quot;*-br-zh\&quot;    ) { }')&quot;, &quot;':lang(\&quot;*-en-*-fr\&quot;, \&quot;*-br-zh\&quot;) { }'&quot;);
</span><span class="cx"> shouldBe(&quot;parseThenSerializeRule(':lang(\&quot;*-en-\\\\*-fr\&quot;,   \&quot;*-br-zh\&quot;    ) { }')&quot;, &quot;':lang(\&quot;*-en-*-fr\&quot;, \&quot;*-br-zh\&quot;) { }'&quot;);
</span><span class="lines">@@ -439,38 +463,38 @@
</span><span class="cx"> 
</span><span class="cx"> debug('');
</span><span class="cx"> 
</span><del>-shouldBe(&quot;parseThenSerializeRule(':lang(\&quot;*-en-\\\\*-fr\&quot;,br-\\\\*-zh    ) { }')&quot;, &quot;':lang(\&quot;*-en-*-fr\&quot;, br-*-zh) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(\&quot;*-en-\\\\*-fr\&quot;, br-\\\\*-zh    ) { }')&quot;, &quot;':lang(\&quot;*-en-*-fr\&quot;, br-*-zh) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(\&quot;*-en-\\\\*-fr\&quot;,   br-\\\\*-zh    ) { }')&quot;, &quot;':lang(\&quot;*-en-*-fr\&quot;, br-*-zh) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(\&quot;*-en-\\\\*-fr\&quot;,      br-\\\\*-zh    ) { }')&quot;, &quot;':lang(\&quot;*-en-*-fr\&quot;, br-*-zh) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(  \&quot;*-en-\\\\*-fr\&quot;,      br-\\\\*-zh    ) { }')&quot;, &quot;':lang(\&quot;*-en-*-fr\&quot;, br-*-zh) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(  \&quot;*-en-\\\\*-fr\&quot; ,      br-\\\\*-zh    ) { }')&quot;, &quot;':lang(\&quot;*-en-*-fr\&quot;, br-*-zh) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(  \&quot;*-en-\\\\*-fr\&quot;  ,      br-\\\\*-zh    ) { }')&quot;, &quot;':lang(\&quot;*-en-*-fr\&quot;, br-*-zh) { }'&quot;);
</del><ins>+shouldBe(&quot;parseThenSerializeRule(':lang(\&quot;*-en-\\\\*-fr\&quot;,br-\\\\*-zh    ) { }')&quot;, &quot;':lang(\&quot;*-en-*-fr\&quot;, \&quot;br-*-zh\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(\&quot;*-en-\\\\*-fr\&quot;, br-\\\\*-zh    ) { }')&quot;, &quot;':lang(\&quot;*-en-*-fr\&quot;, \&quot;br-*-zh\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(\&quot;*-en-\\\\*-fr\&quot;,   br-\\\\*-zh    ) { }')&quot;, &quot;':lang(\&quot;*-en-*-fr\&quot;, \&quot;br-*-zh\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(\&quot;*-en-\\\\*-fr\&quot;,      br-\\\\*-zh    ) { }')&quot;, &quot;':lang(\&quot;*-en-*-fr\&quot;, \&quot;br-*-zh\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(  \&quot;*-en-\\\\*-fr\&quot;,      br-\\\\*-zh    ) { }')&quot;, &quot;':lang(\&quot;*-en-*-fr\&quot;, \&quot;br-*-zh\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(  \&quot;*-en-\\\\*-fr\&quot; ,      br-\\\\*-zh    ) { }')&quot;, &quot;':lang(\&quot;*-en-*-fr\&quot;, \&quot;br-*-zh\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(  \&quot;*-en-\\\\*-fr\&quot;  ,      br-\\\\*-zh    ) { }')&quot;, &quot;':lang(\&quot;*-en-*-fr\&quot;, \&quot;br-*-zh\&quot;) { }'&quot;);
</ins><span class="cx"> 
</span><span class="cx"> debug('');
</span><span class="cx"> 
</span><del>-shouldBe(&quot;parseThenSerializeRule(':lang(\\\\*) { }')&quot;, &quot;':lang(*) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(\\\\* ) { }')&quot;, &quot;':lang(*) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(\\\\*   ) { }')&quot;, &quot;':lang(*) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang( \\\\*   ) { }')&quot;, &quot;':lang(*) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(  \\\\*) { }')&quot;, &quot;':lang(*) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(   \\\\*   ) { }')&quot;, &quot;':lang(*) { }'&quot;);
</del><ins>+shouldBe(&quot;parseThenSerializeRule(':lang(\\\\*) { }')&quot;, &quot;':lang(\&quot;*\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(\\\\* ) { }')&quot;, &quot;':lang(\&quot;*\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(\\\\*   ) { }')&quot;, &quot;':lang(\&quot;*\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang( \\\\*   ) { }')&quot;, &quot;':lang(\&quot;*\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(  \\\\*) { }')&quot;, &quot;':lang(\&quot;*\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(   \\\\*   ) { }')&quot;, &quot;':lang(\&quot;*\&quot;) { }'&quot;);
</ins><span class="cx"> 
</span><span class="cx"> debug('');
</span><span class="cx"> 
</span><del>-shouldBe(&quot;parseThenSerializeRule(':lang(   \\\\*,id-\\\\*-sumatra   ) { }')&quot;, &quot;':lang(*, id-*-sumatra) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(   \\\\* ,id-\\\\*-sumatra) { }')&quot;, &quot;':lang(*, id-*-sumatra) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(   \\\\*  ,  id-\\\\*-sumatra  ) { }')&quot;, &quot;':lang(*, id-*-sumatra) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(   \\\\*   ,    id-\\\\*-sumatra  ) { }')&quot;, &quot;':lang(*, id-*-sumatra) { }'&quot;);
</del><ins>+shouldBe(&quot;parseThenSerializeRule(':lang(   \\\\*,id-\\\\*-sumatra   ) { }')&quot;, &quot;':lang(\&quot;*\&quot;, \&quot;id-*-sumatra\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(   \\\\* ,id-\\\\*-sumatra) { }')&quot;, &quot;':lang(\&quot;*\&quot;, \&quot;id-*-sumatra\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(   \\\\*  ,  id-\\\\*-sumatra  ) { }')&quot;, &quot;':lang(\&quot;*\&quot;, \&quot;id-*-sumatra\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(   \\\\*   ,    id-\\\\*-sumatra  ) { }')&quot;, &quot;':lang(\&quot;*\&quot;, \&quot;id-*-sumatra\&quot;) { }'&quot;);
</ins><span class="cx"> 
</span><span class="cx"> debug('');
</span><span class="cx"> 
</span><del>-shouldBe(&quot;parseThenSerializeRule(':lang(en-\\\\*) { }')&quot;, &quot;':lang(en-*) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(en-\\\\*, fr-\\\\*) { }')&quot;, &quot;':lang(en-*, fr-*) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(en-\\\\*, fr-\\\\* ) { }')&quot;, &quot;':lang(en-*, fr-*) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(   en-\\\\*   ,  fr-\\\\*   ) { }')&quot;, &quot;':lang(en-*, fr-*) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(   en-\\\\*   ,fr-\\\\*   ) { }')&quot;, &quot;':lang(en-*, fr-*) { }'&quot;);
-shouldBe(&quot;parseThenSerializeRule(':lang(   en-\\\\*,fr-\\\\*   ) { }')&quot;, &quot;':lang(en-*, fr-*) { }'&quot;);
</del><ins>+shouldBe(&quot;parseThenSerializeRule(':lang(en-\\\\*) { }')&quot;, &quot;':lang(\&quot;en-*\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(en-\\\\*, fr-\\\\*) { }')&quot;, &quot;':lang(\&quot;en-*\&quot;, \&quot;fr-*\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(en-\\\\*, fr-\\\\* ) { }')&quot;, &quot;':lang(\&quot;en-*\&quot;, \&quot;fr-*\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(   en-\\\\*   ,  fr-\\\\*   ) { }')&quot;, &quot;':lang(\&quot;en-*\&quot;, \&quot;fr-*\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(   en-\\\\*   ,fr-\\\\*   ) { }')&quot;, &quot;':lang(\&quot;en-*\&quot;, \&quot;fr-*\&quot;) { }'&quot;);
+shouldBe(&quot;parseThenSerializeRule(':lang(   en-\\\\*,fr-\\\\*   ) { }')&quot;, &quot;':lang(\&quot;en-*\&quot;, \&quot;fr-*\&quot;) { }'&quot;);
</ins><span class="cx"> 
</span><span class="cx"> debug('');
</span><span class="cx"> 
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit28LayoutTestsfastcsscsssetselectortextexpectedtxt"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-set-selector-text-expected.txt (180823 => 180824)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-set-selector-text-expected.txt        2015-02-28 10:51:58 UTC (rev 180823)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-set-selector-text-expected.txt        2015-02-28 10:56:57 UTC (rev 180824)
</span><span class="lines">@@ -65,7 +65,8 @@
</span><span class="cx"> PASS setThenReadSelectorText(':visited') is ':visited'
</span><span class="cx"> 
</span><span class="cx"> PASS setThenReadSelectorText(':dir(a)') is ':dir(a)'
</span><del>-PASS setThenReadSelectorText(':lang(a)') is ':lang(a)'
</del><ins>+PASS setThenReadSelectorText(':lang(&quot;a&quot;)') is ':lang(&quot;a&quot;)'
+PASS setThenReadSelectorText(':lang(a)') is ':lang(&quot;a&quot;)'
</ins><span class="cx"> PASS setThenReadSelectorText(':not(a)') is ':not(a)'
</span><span class="cx"> PASS setThenReadSelectorText(':role(a)') is ':role(a)'
</span><span class="cx"> PASS setThenReadSelectorText(':-webkit-any(a, b, p)') is ':-webkit-any(a, b, p)'
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit28LayoutTestsfastcsscsssetselectortexthtml"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-set-selector-text.html (180823 => 180824)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-set-selector-text.html        2015-02-28 10:51:58 UTC (rev 180823)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-set-selector-text.html        2015-02-28 10:56:57 UTC (rev 180824)
</span><span class="lines">@@ -28,9 +28,33 @@
</span><span class="cx">     return styleElement.sheet.cssRules[0].selectorText;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+function expectedSerializedLangSelector(selector)
+{
+    var args = /:lang\(([^)]+)/.exec(selector);
+    if (!args || !args[1])
+        return selector;
+
+    args = args[1].split(/\s*,\s*/);
+    var expected = ':lang(';
+    for (var i = 0; i &lt; args.length; ++i) {
+        var arg = args[i];
+        var hasQuotes = arg.indexOf('&quot;') == 0 &amp;&amp; arg.lastIndexOf('&quot;') == arg.length - 1;
+        if (!hasQuotes)
+            expected += '&quot;';
+        expected += args[i];
+        if (!hasQuotes)
+            expected += '&quot;';
+        if (i &lt; args.length - 1)
+            expected += ', ';
+    }
+    expected += ')';
+    return expected;
+}
+
</ins><span class="cx"> function testSelectorRoundTrip(selector, expectFailure)
</span><span class="cx"> {
</span><del>-    shouldBe(&quot;setThenReadSelectorText('&quot; + selector + &quot;')&quot;, &quot;'&quot; + (expectFailure ? bogusSelector : selector) + &quot;'&quot;);
</del><ins>+    var expected = selector.indexOf(&quot;:lang&quot;) == 0 ? expectedSerializedLangSelector(selector) : selector;
+    shouldBe(&quot;setThenReadSelectorText('&quot; + selector + &quot;')&quot;, &quot;'&quot; + (expectFailure ? bogusSelector : expected) + &quot;'&quot;);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> testSelectorRoundTrip('', true);
</span><span class="lines">@@ -105,6 +129,7 @@
</span><span class="cx"> debug('');
</span><span class="cx"> 
</span><span class="cx"> testSelectorRoundTrip(&quot;:dir(a)&quot;);
</span><ins>+testSelectorRoundTrip(&quot;:lang(\&quot;a\&quot;)&quot;);
</ins><span class="cx"> testSelectorRoundTrip(&quot;:lang(a)&quot;);
</span><span class="cx"> testSelectorRoundTrip(&quot;:not(a)&quot;);
</span><span class="cx"> testSelectorRoundTrip(&quot;:role(a)&quot;);
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit28LayoutTestsfastcssparsingcsslangexpectedtxt"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/parsing-css-lang-expected.txt (180823 => 180824)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/parsing-css-lang-expected.txt        2015-02-28 10:51:58 UTC (rev 180823)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/parsing-css-lang-expected.txt        2015-02-28 10:56:57 UTC (rev 180824)
</span><span class="lines">@@ -6,124 +6,124 @@
</span><span class="cx"> valid language ranges
</span><span class="cx"> PASS document.querySelector(':lang(e)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(e)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;e\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(e    )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(e)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;e\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(en)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(en)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;en\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(en    )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(en)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;en\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(en-)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(en-)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;en-\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(en-    )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(en-)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;en-\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(en--)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(en--)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;en--\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(en--    )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(en--)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;en--\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(en---)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(en---)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;en---\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(en---    )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(en---)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;en---\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(en-fr)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(en-fr)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;en-fr\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(en-fr    )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(en-fr)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;en-fr\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(en-fr-)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(en-fr-)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;en-fr-\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(en-fr-    )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(en-fr-)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;en-fr-\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(en-fr--)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(en-fr--)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;en-fr--\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(en-fr--    )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(en-fr--)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;en-fr--\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(en--fr)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(en--fr)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;en--fr\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(en--fr    )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(en--fr)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;en--fr\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(en---fr)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(en---fr)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;en---fr\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(en---fr    )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(en---fr)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;en---fr\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(en---fr---)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(en---fr---)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;en---fr---\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(en---fr---    )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(en---fr---)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;en---fr---\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(de-DE)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(de-DE)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;de-DE\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(de-DE    )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(de-DE)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;de-DE\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(de-DE-1996)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(de-DE-1996)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;de-DE-1996\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(de-DE-1996    )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(de-DE-1996)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;de-DE-1996\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(de-Latn-DE)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(de-Latn-DE)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;de-Latn-DE\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(de-Latn-DE    )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(de-Latn-DE)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;de-Latn-DE\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(de-Latf-DE)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(de-Latf-DE)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;de-Latf-DE\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(de-Latf-DE    )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(de-Latf-DE)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;de-Latf-DE\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(de-Latn-DE-1996)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(de-Latn-DE-1996)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;de-Latn-DE-1996\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(de-Latn-DE-1996    )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(de-Latn-DE-1996)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;de-Latn-DE-1996\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(de-CH)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(de-CH)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;de-CH\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(de-CH    )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(de-CH)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;de-CH\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(it-CH)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(it-CH)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;it-CH\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(it-CH    )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(it-CH)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;it-CH\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(fr-CH)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(fr-CH)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;fr-CH\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(fr-CH    )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(fr-CH)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;fr-CH\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(rm-CH)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(rm-CH)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;rm-CH\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(rm-CH    )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(rm-CH)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;rm-CH\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(&quot;*-CH&quot;)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;*-CH\&quot;)&quot;
</span><span class="lines">@@ -144,10 +144,10 @@
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;*-br-zh\&quot;)&quot;
</span><span class="cx"> PASS document.querySelector(':lang(id-\\*-sumatra)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(id-*-sumatra)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;id-*-sumatra\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(id-\\*-sumatra    )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(id-*-sumatra)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;id-*-sumatra\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(&quot;*-en-\\*-fr&quot;)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;*-en-*-fr\&quot;)&quot;
</span><span class="lines">@@ -162,10 +162,10 @@
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;*-en-*-*\&quot;)&quot;
</span><span class="cx"> PASS document.querySelector(':lang(\\*)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(*)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;*\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(\\*    )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(*)&quot;
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;*\&quot;)&quot;
</ins><span class="cx"> PASS document.querySelector(':lang(&quot;*-\\*&quot;)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is &quot;:lang(\&quot;*-*\&quot;)&quot;
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit28LayoutTestsfastcssparsingcsslanghtml"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/parsing-css-lang.html (180823 => 180824)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/parsing-css-lang.html        2015-02-28 10:51:58 UTC (rev 180823)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/parsing-css-lang.html        2015-02-28 10:56:57 UTC (rev 180824)
</span><span class="lines">@@ -18,7 +18,10 @@
</span><span class="cx">     shouldBe(&quot;document.getElementById('style-container').sheet.cssRules.length&quot;, &quot;1&quot;);
</span><span class="cx">     if (!expectedSerializedLanguageRange)
</span><span class="cx">         expectedSerializedLanguageRange = languageRangeString;
</span><del>-    shouldBeEqualToString(&quot;document.getElementById('style-container').sheet.cssRules[0].selectorText&quot;, ':lang(' + expectedSerializedLanguageRange.replace(/\\/g, '') + ')');
</del><ins>+    expectedSerializedLanguageRange = expectedSerializedLanguageRange.replace(/\\/g, '');
+    if (expectedSerializedLanguageRange.indexOf('&quot;') != 0)
+        expectedSerializedLanguageRange = '&quot;' + expectedSerializedLanguageRange + '&quot;';
+    shouldBeEqualToString(&quot;document.getElementById('style-container').sheet.cssRules[0].selectorText&quot;, ':lang(' + expectedSerializedLanguageRange + ')');
</ins><span class="cx">     styleContainer.innerHTML = '';
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit28LayoutTestsfastdomcssselectorTextexpectedtxt"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/LayoutTests/fast/dom/css-selectorText-expected.txt (180823 => 180824)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/LayoutTests/fast/dom/css-selectorText-expected.txt        2015-02-28 10:51:58 UTC (rev 180823)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/fast/dom/css-selectorText-expected.txt        2015-02-28 10:56:57 UTC (rev 180824)
</span><span class="lines">@@ -23,7 +23,7 @@
</span><span class="cx"> :active
</span><span class="cx"> :focus
</span><span class="cx"> :target
</span><del>-:lang(en)
</del><ins>+:lang(&quot;en&quot;)
</ins><span class="cx"> :not(table)
</span><span class="cx"> :root
</span><span class="cx"> :enabled
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit28SourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/Source/WebCore/ChangeLog (180823 => 180824)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/Source/WebCore/ChangeLog        2015-02-28 10:51:58 UTC (rev 180823)
+++ releases/WebKitGTK/webkit-2.8/Source/WebCore/ChangeLog        2015-02-28 10:56:57 UTC (rev 180824)
</span><span class="lines">@@ -1,3 +1,35 @@
</span><ins>+2015-02-24  Dhi Aurrahman  &lt;diorahman@rockybars.com&gt;
+
+        Always serialize :lang()'s arguments to strings
+        https://bugs.webkit.org/show_bug.cgi?id=141944
+
+        Reviewed by Benjamin Poulain.
+
+        As specified in [1] :lang()'s arguments are always serialized to strings.
+
+        [1] http://dev.w3.org/csswg/cssom/#serializing-selectors
+
+        Related tests are updated.
+
+        * css/CSSGrammar.y.in:
+        * css/CSSParserValues.cpp:
+        (WebCore::CSSParserSelector::setLangArgumentList):
+        * css/CSSParserValues.h:
+        (WebCore::CSSParserString::init):
+        (WebCore::CSSParserString::clear):
+        (WebCore::CSSParserString::tokenType): Deleted.
+        (WebCore::CSSParserString::setTokenType): Deleted.
+        * css/CSSSelector.cpp:
+        (WebCore::appendLangArgumentList):
+        (WebCore::CSSSelector::setLangArgumentList):
+        * css/CSSSelector.h:
+        (WebCore::CSSSelector::langArgumentList):
+        * css/SelectorCheckerTestFunctions.h:
+        (WebCore::matchesLangPseudoClass):
+        * cssjit/SelectorCompiler.cpp:
+        (WebCore::SelectorCompiler::addPseudoClassType):
+        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsInLanguage):
+
</ins><span class="cx"> 2015-02-24  Antti Koivisto  &lt;antti@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">        Give TemporaryChange for m_inLoadPendingImages assertion a name so it actually does something.
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit28SourceWebCorecssCSSGrammaryin"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/Source/WebCore/css/CSSGrammar.y.in (180823 => 180824)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/Source/WebCore/css/CSSGrammar.y.in        2015-02-28 10:51:58 UTC (rev 180823)
+++ releases/WebKitGTK/webkit-2.8/Source/WebCore/css/CSSGrammar.y.in        2015-02-28 10:56:57 UTC (rev 180824)
</span><span class="lines">@@ -1090,7 +1090,7 @@
</span><span class="cx">     ;
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE_CSS_SELECTORS_LEVEL4
</span><del>-lang_range: IDENT | STRING { $$.setTokenType(TokenType::AtomicStringToken); } ;
</del><ins>+lang_range: IDENT | STRING ;
</ins><span class="cx"> 
</span><span class="cx"> comma_separated_lang_ranges:
</span><span class="cx">     lang_range %prec UNIMPORTANT_TOK {
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit28SourceWebCorecssCSSParserValuescpp"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/Source/WebCore/css/CSSParserValues.cpp (180823 => 180824)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/Source/WebCore/css/CSSParserValues.cpp        2015-02-28 10:51:58 UTC (rev 180823)
+++ releases/WebKitGTK/webkit-2.8/Source/WebCore/css/CSSParserValues.cpp        2015-02-28 10:56:57 UTC (rev 180824)
</span><span class="lines">@@ -266,14 +266,10 @@
</span><span class="cx"> void CSSParserSelector::setLangArgumentList(const Vector&lt;CSSParserString&gt;&amp; stringVector)
</span><span class="cx"> {
</span><span class="cx">     ASSERT_WITH_MESSAGE(!stringVector.isEmpty(), &quot;No CSS Selector takes an empty argument list.&quot;);
</span><del>-    auto argumentList = std::make_unique&lt;Vector&lt;LanguageArgument&gt;&gt;();
</del><ins>+    auto argumentList = std::make_unique&lt;Vector&lt;AtomicString&gt;&gt;();
</ins><span class="cx">     argumentList-&gt;reserveInitialCapacity(stringVector.size());
</span><del>-    for (const CSSParserString&amp; string : stringVector) {
-        LanguageArgument languageArgument;
-        languageArgument.languageRange = string;
-        languageArgument.tokenType = string.tokenType();
</del><ins>+    for (const AtomicString&amp; languageArgument : stringVector)
</ins><span class="cx">         argumentList-&gt;append(languageArgument);
</span><del>-    }
</del><span class="cx">     m_selector-&gt;setLangArgumentList(WTF::move(argumentList));
</span><span class="cx"> }
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit28SourceWebCorecssCSSParserValuesh"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/Source/WebCore/css/CSSParserValues.h (180823 => 180824)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/Source/WebCore/css/CSSParserValues.h        2015-02-28 10:51:58 UTC (rev 180823)
+++ releases/WebKitGTK/webkit-2.8/Source/WebCore/css/CSSParserValues.h        2015-02-28 10:56:57 UTC (rev 180824)
</span><span class="lines">@@ -38,9 +38,6 @@
</span><span class="cx">         m_data.characters8 = characters;
</span><span class="cx">         m_length = length;
</span><span class="cx">         m_is8Bit = true;
</span><del>-#if ENABLE(CSS_SELECTORS_LEVEL4)
-        m_tokenType = TokenType::IdentifierToken;
-#endif
</del><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void init(UChar* characters, unsigned length)
</span><span class="lines">@@ -48,9 +45,6 @@
</span><span class="cx">         m_data.characters16 = characters;
</span><span class="cx">         m_length = length;
</span><span class="cx">         m_is8Bit = false;
</span><del>-#if ENABLE(CSS_SELECTORS_LEVEL4)
-        m_tokenType = TokenType::IdentifierToken;
-#endif
</del><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void init(const String&amp; string)
</span><span class="lines">@@ -63,9 +57,6 @@
</span><span class="cx">             m_data.characters16 = const_cast&lt;UChar*&gt;(string.characters16());
</span><span class="cx">             m_is8Bit = false;
</span><span class="cx">         }
</span><del>-#if ENABLE(CSS_SELECTORS_LEVEL4)
-        m_tokenType = TokenType::IdentifierToken;
-#endif
</del><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void clear()
</span><span class="lines">@@ -73,9 +64,6 @@
</span><span class="cx">         m_data.characters8 = 0;
</span><span class="cx">         m_length = 0;
</span><span class="cx">         m_is8Bit = true;
</span><del>-#if ENABLE(CSS_SELECTORS_LEVEL4)
-        m_tokenType = TokenType::IdentifierToken;
-#endif
</del><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     bool is8Bit() const { return m_is8Bit; }
</span><span class="lines">@@ -87,11 +75,6 @@
</span><span class="cx">     unsigned length() const { return m_length; }
</span><span class="cx">     void setLength(unsigned length) { m_length = length; }
</span><span class="cx"> 
</span><del>-#if ENABLE(CSS_SELECTORS_LEVEL4)
-    TokenType tokenType() const { return m_tokenType; }
-    void setTokenType(TokenType tokenType) { m_tokenType = tokenType; }
-#endif
-
</del><span class="cx">     void lower();
</span><span class="cx"> 
</span><span class="cx">     UChar operator[](unsigned i) const
</span><span class="lines">@@ -118,9 +101,6 @@
</span><span class="cx">     } m_data;
</span><span class="cx">     unsigned m_length;
</span><span class="cx">     bool m_is8Bit;
</span><del>-#if ENABLE(CSS_SELECTORS_LEVEL4)
-    TokenType m_tokenType;
-#endif
</del><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> struct CSSParserFunction;
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit28SourceWebCorecssCSSSelectorcpp"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/Source/WebCore/css/CSSSelector.cpp (180823 => 180824)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/Source/WebCore/css/CSSSelector.cpp        2015-02-28 10:51:58 UTC (rev 180823)
+++ releases/WebKitGTK/webkit-2.8/Source/WebCore/css/CSSSelector.cpp        2015-02-28 10:56:57 UTC (rev 180824)
</span><span class="lines">@@ -373,17 +373,13 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CSS_SELECTORS_LEVEL4)
</span><del>-static void appendLangArgumentList(StringBuilder&amp; str, const Vector&lt;LanguageArgument&gt;&amp; argumentList)
</del><ins>+static void appendLangArgumentList(StringBuilder&amp; str, const Vector&lt;AtomicString&gt;&amp; argumentList)
</ins><span class="cx"> {
</span><span class="cx">     unsigned argumentListSize = argumentList.size();
</span><span class="cx">     for (unsigned i = 0; i &lt; argumentListSize; ++i) {
</span><del>-        const LanguageArgument&amp; argument = argumentList[i];
-        bool isAtomicStringToken = argument.tokenType == TokenType::AtomicStringToken;
-        if (isAtomicStringToken)
-            str.append('&quot;');
-        str.append(argument.languageRange);
-        if (isAtomicStringToken)
-            str.append('&quot;');
</del><ins>+        str.append('&quot;');
+        str.append(argumentList[i]);
+        str.append('&quot;');
</ins><span class="cx">         if (i != argumentListSize - 1)
</span><span class="cx">             str.appendLiteral(&quot;, &quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -746,7 +742,7 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CSS_SELECTORS_LEVEL4)
</span><del>-void CSSSelector::setLangArgumentList(std::unique_ptr&lt;Vector&lt;LanguageArgument&gt;&gt; argumentList)
</del><ins>+void CSSSelector::setLangArgumentList(std::unique_ptr&lt;Vector&lt;AtomicString&gt;&gt; argumentList)
</ins><span class="cx"> {
</span><span class="cx">     createRareData();
</span><span class="cx">     m_data.m_rareData-&gt;m_langArgumentList = WTF::move(argumentList);
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit28SourceWebCorecssCSSSelectorh"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/Source/WebCore/css/CSSSelector.h (180823 => 180824)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/Source/WebCore/css/CSSSelector.h        2015-02-28 10:51:58 UTC (rev 180823)
+++ releases/WebKitGTK/webkit-2.8/Source/WebCore/css/CSSSelector.h        2015-02-28 10:56:57 UTC (rev 180824)
</span><span class="lines">@@ -29,17 +29,6 @@
</span><span class="cx"> namespace WebCore {
</span><span class="cx">     class CSSSelectorList;
</span><span class="cx"> 
</span><del>-#if ENABLE(CSS_SELECTORS_LEVEL4)
-    enum class TokenType {
-        IdentifierToken = 0,
-        AtomicStringToken
-    };
-    
-    struct LanguageArgument {
-        AtomicString languageRange;
-        TokenType tokenType;
-    };
-#endif
</del><span class="cx">     enum class SelectorSpecificityIncrement {
</span><span class="cx">         ClassA = 0x10000,
</span><span class="cx">         ClassB = 0x100,
</span><span class="lines">@@ -236,7 +225,7 @@
</span><span class="cx">         const AtomicString&amp; argument() const { return m_hasRareData ? m_data.m_rareData-&gt;m_argument : nullAtom; }
</span><span class="cx">         bool attributeValueMatchingIsCaseInsensitive() const;
</span><span class="cx"> #if ENABLE(CSS_SELECTORS_LEVEL4)
</span><del>-        const Vector&lt;LanguageArgument&gt;* langArgumentList() const { return m_hasRareData ? m_data.m_rareData-&gt;m_langArgumentList.get() : nullptr; }
</del><ins>+        const Vector&lt;AtomicString&gt;* langArgumentList() const { return m_hasRareData ? m_data.m_rareData-&gt;m_langArgumentList.get() : nullptr; }
</ins><span class="cx"> #endif
</span><span class="cx">         const CSSSelectorList* selectorList() const { return m_hasRareData ? m_data.m_rareData-&gt;m_selectorList.get() : nullptr; }
</span><span class="cx"> 
</span><span class="lines">@@ -245,7 +234,7 @@
</span><span class="cx">         void setArgument(const AtomicString&amp;);
</span><span class="cx">         void setAttributeValueMatchingIsCaseInsensitive(bool);
</span><span class="cx"> #if ENABLE(CSS_SELECTORS_LEVEL4)
</span><del>-        void setLangArgumentList(std::unique_ptr&lt;Vector&lt;LanguageArgument&gt;&gt;);
</del><ins>+        void setLangArgumentList(std::unique_ptr&lt;Vector&lt;AtomicString&gt;&gt;);
</ins><span class="cx"> #endif
</span><span class="cx">         void setSelectorList(std::unique_ptr&lt;CSSSelectorList&gt;);
</span><span class="cx"> 
</span><span class="lines">@@ -354,7 +343,7 @@
</span><span class="cx">             AtomicString m_attributeCanonicalLocalName;
</span><span class="cx">             AtomicString m_argument; // Used for :contains and :nth-*
</span><span class="cx"> #if ENABLE(CSS_SELECTORS_LEVEL4)
</span><del>-            std::unique_ptr&lt;Vector&lt;LanguageArgument&gt;&gt; m_langArgumentList;
</del><ins>+            std::unique_ptr&lt;Vector&lt;AtomicString&gt;&gt; m_langArgumentList;
</ins><span class="cx"> #endif
</span><span class="cx">             std::unique_ptr&lt;CSSSelectorList&gt; m_selectorList; // Used for :-webkit-any and :not
</span><span class="cx">         
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit28SourceWebCorecssSelectorCheckerTestFunctionsh"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/Source/WebCore/css/SelectorCheckerTestFunctions.h (180823 => 180824)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/Source/WebCore/css/SelectorCheckerTestFunctions.h        2015-02-28 10:51:58 UTC (rev 180823)
+++ releases/WebKitGTK/webkit-2.8/Source/WebCore/css/SelectorCheckerTestFunctions.h        2015-02-28 10:56:57 UTC (rev 180824)
</span><span class="lines">@@ -162,7 +162,7 @@
</span><span class="cx">     return false;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-ALWAYS_INLINE bool matchesLangPseudoClass(const Element* element, const Vector&lt;LanguageArgument&gt;&amp; argumentList)
</del><ins>+ALWAYS_INLINE bool matchesLangPseudoClass(const Element* element, const Vector&lt;AtomicString&gt;&amp; argumentList)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(element);
</span><span class="cx"> 
</span><span class="lines">@@ -181,8 +181,7 @@
</span><span class="cx">     // as specified in www.ietf.org/rfc/rfc4647.txt.
</span><span class="cx">     StringView languageStringView = language.string();
</span><span class="cx">     unsigned languageLength = language.length();
</span><del>-    for (const LanguageArgument&amp; argument : argumentList) {
-        const AtomicString&amp; range = argument.languageRange;
</del><ins>+    for (const AtomicString&amp; range : argumentList) {
</ins><span class="cx">         if (range.isEmpty())
</span><span class="cx">             continue;
</span><span class="cx"> 
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit28SourceWebCorecssjitSelectorCompilercpp"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/Source/WebCore/cssjit/SelectorCompiler.cpp (180823 => 180824)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/Source/WebCore/cssjit/SelectorCompiler.cpp        2015-02-28 10:51:58 UTC (rev 180823)
+++ releases/WebKitGTK/webkit-2.8/Source/WebCore/cssjit/SelectorCompiler.cpp        2015-02-28 10:56:57 UTC (rev 180824)
</span><span class="lines">@@ -170,7 +170,7 @@
</span><span class="cx">     const CSSSelector* tagNameSelector = nullptr;
</span><span class="cx">     const AtomicString* id = nullptr;
</span><span class="cx"> #if ENABLE(CSS_SELECTORS_LEVEL4)
</span><del>-    Vector&lt;const Vector&lt;LanguageArgument&gt;*&gt; languageArgumentsList;
</del><ins>+    Vector&lt;const Vector&lt;AtomicString&gt;*&gt; languageArgumentsList;
</ins><span class="cx"> #else
</span><span class="cx">     const AtomicString* langFilter = nullptr;
</span><span class="cx"> #endif
</span><span class="lines">@@ -275,7 +275,7 @@
</span><span class="cx">     void generateElementIsHovered(Assembler::JumpList&amp; failureCases, const SelectorFragment&amp;);
</span><span class="cx"> #if ENABLE(CSS_SELECTORS_LEVEL4)
</span><span class="cx">     void generateElementIsInLanguage(Assembler::JumpList&amp; failureCases, const SelectorFragment&amp;);
</span><del>-    void generateElementIsInLanguage(Assembler::JumpList&amp; failureCases, const Vector&lt;LanguageArgument&gt;*);
</del><ins>+    void generateElementIsInLanguage(Assembler::JumpList&amp; failureCases, const Vector&lt;AtomicString&gt;*);
</ins><span class="cx"> #else
</span><span class="cx">     void generateElementIsInLanguage(Assembler::JumpList&amp; failureCases, const AtomicString&amp;);
</span><span class="cx"> #endif
</span><span class="lines">@@ -765,7 +765,7 @@
</span><span class="cx">     case CSSSelector::PseudoClassLang:
</span><span class="cx">         {
</span><span class="cx"> #if ENABLE(CSS_SELECTORS_LEVEL4)
</span><del>-            const Vector&lt;LanguageArgument&gt;* selectorLangArgumentList = selector.langArgumentList();
</del><ins>+            const Vector&lt;AtomicString&gt;* selectorLangArgumentList = selector.langArgumentList();
</ins><span class="cx">             ASSERT(selectorLangArgumentList &amp;&amp; !selectorLangArgumentList-&gt;isEmpty());
</span><span class="cx">             fragment.languageArgumentsList.append(selectorLangArgumentList);
</span><span class="cx">             return FunctionType::SimpleSelectorChecker;
</span><span class="lines">@@ -3233,11 +3233,11 @@
</span><span class="cx"> #if ENABLE(CSS_SELECTORS_LEVEL4)
</span><span class="cx"> void SelectorCodeGenerator::generateElementIsInLanguage(Assembler::JumpList&amp; failureCases, const SelectorFragment&amp; fragment)
</span><span class="cx"> {
</span><del>-    for (const Vector&lt;LanguageArgument&gt;* languageArguments : fragment.languageArgumentsList)
</del><ins>+    for (const Vector&lt;AtomicString&gt;* languageArguments : fragment.languageArgumentsList)
</ins><span class="cx">         generateElementIsInLanguage(failureCases, languageArguments);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void SelectorCodeGenerator::generateElementIsInLanguage(Assembler::JumpList&amp; failureCases, const Vector&lt;LanguageArgument&gt;* languageArguments)
</del><ins>+void SelectorCodeGenerator::generateElementIsInLanguage(Assembler::JumpList&amp; failureCases, const Vector&lt;AtomicString&gt;* languageArguments)
</ins><span class="cx"> {
</span><span class="cx">     LocalRegisterWithPreference langRangeRegister(m_registerAllocator, JSC::GPRInfo::argumentGPR1);
</span><span class="cx">     m_assembler.move(Assembler::TrustedImmPtr(languageArguments), langRangeRegister);
</span></span></pre>
</div>
</div>

</body>
</html>