<!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>[210227] trunk/Source</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/210227">210227</a></dd>
<dt>Author</dt> <dd>utatane.tea@gmail.com</dd>
<dt>Date</dt> <dd>2017-01-02 13:22:19 -0800 (Mon, 02 Jan 2017)</dd>
</dl>

<h3>Log Message</h3>
<pre>Use StaticStringImpl instead of StaticASCIILiteral
https://bugs.webkit.org/show_bug.cgi?id=166586

Reviewed by Darin Adler.

Source/WebCore:

* bindings/scripts/StaticString.pm:
(GenerateStrings):

Source/WTF:

It is more handy way to define static StringImpl. It calculates the length
and hash value by using the constexpr constructor and function. So we do
not need to calculate these things in Perl script.
And it allows us to use StaticStringImpl in the hand written C++ code.
Previously, we need to calculate the length and hash value by hand if we
would like to use StaticASCIILiteral in the hand written C++ code, and it
meant that we cannot use it at all in the hand written C++ code.

* wtf/text/AtomicStringImpl.cpp:
(WTF::AtomicStringImpl::addSlowCase):
(WTF::AtomicStringImpl::lookUpSlowCase):
* wtf/text/AtomicStringImpl.h:
* wtf/text/StringImpl.h:
* wtf/text/SymbolImpl.h:
* wtf/text/UniquedStringImpl.h:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWTFChangeLog">trunk/Source/WTF/ChangeLog</a></li>
<li><a href="#trunkSourceWTFwtftextAtomicStringImplcpp">trunk/Source/WTF/wtf/text/AtomicStringImpl.cpp</a></li>
<li><a href="#trunkSourceWTFwtftextAtomicStringImplh">trunk/Source/WTF/wtf/text/AtomicStringImpl.h</a></li>
<li><a href="#trunkSourceWTFwtftextStringImplh">trunk/Source/WTF/wtf/text/StringImpl.h</a></li>
<li><a href="#trunkSourceWTFwtftextSymbolImplh">trunk/Source/WTF/wtf/text/SymbolImpl.h</a></li>
<li><a href="#trunkSourceWTFwtftextUniquedStringImplh">trunk/Source/WTF/wtf/text/UniquedStringImpl.h</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptsStaticStringpm">trunk/Source/WebCore/bindings/scripts/StaticString.pm</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWTFChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/ChangeLog (210226 => 210227)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/ChangeLog        2017-01-02 21:16:09 UTC (rev 210226)
+++ trunk/Source/WTF/ChangeLog        2017-01-02 21:22:19 UTC (rev 210227)
</span><span class="lines">@@ -1,3 +1,26 @@
</span><ins>+2017-01-02  Yusuke Suzuki  &lt;utatane.tea@gmail.com&gt;
+
+        Use StaticStringImpl instead of StaticASCIILiteral
+        https://bugs.webkit.org/show_bug.cgi?id=166586
+
+        Reviewed by Darin Adler.
+
+        It is more handy way to define static StringImpl. It calculates the length
+        and hash value by using the constexpr constructor and function. So we do
+        not need to calculate these things in Perl script.
+        And it allows us to use StaticStringImpl in the hand written C++ code.
+        Previously, we need to calculate the length and hash value by hand if we
+        would like to use StaticASCIILiteral in the hand written C++ code, and it
+        meant that we cannot use it at all in the hand written C++ code.
+
+        * wtf/text/AtomicStringImpl.cpp:
+        (WTF::AtomicStringImpl::addSlowCase):
+        (WTF::AtomicStringImpl::lookUpSlowCase):
+        * wtf/text/AtomicStringImpl.h:
+        * wtf/text/StringImpl.h:
+        * wtf/text/SymbolImpl.h:
+        * wtf/text/UniquedStringImpl.h:
+
</ins><span class="cx"> 2017-01-02  Andreas Kling  &lt;akling@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Discard media controls JS/CSS caches under memory pressure.
</span></span></pre></div>
<a id="trunkSourceWTFwtftextAtomicStringImplcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/text/AtomicStringImpl.cpp (210226 => 210227)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/text/AtomicStringImpl.cpp        2017-01-02 21:16:09 UTC (rev 210226)
+++ trunk/Source/WTF/wtf/text/AtomicStringImpl.cpp        2017-01-02 21:22:19 UTC (rev 210227)
</span><span class="lines">@@ -405,7 +405,7 @@
</span><span class="cx">     if (!string.length())
</span><span class="cx">         return *static_cast&lt;AtomicStringImpl*&gt;(StringImpl::empty());
</span><span class="cx"> 
</span><del>-    if (string.isSymbol()) {
</del><ins>+    if (string.isSymbol() || string.isStatic()) {
</ins><span class="cx">         if (string.is8Bit())
</span><span class="cx">             return *add(string.characters8(), string.length());
</span><span class="cx">         return *add(string.characters16(), string.length());
</span><span class="lines">@@ -429,7 +429,7 @@
</span><span class="cx">     if (!string.length())
</span><span class="cx">         return *static_cast&lt;AtomicStringImpl*&gt;(StringImpl::empty());
</span><span class="cx"> 
</span><del>-    if (string.isSymbol()) {
</del><ins>+    if (string.isSymbol() || string.isStatic()) {
</ins><span class="cx">         if (string.is8Bit())
</span><span class="cx">             return *add(string.characters8(), string.length());
</span><span class="cx">         return *add(string.characters16(), string.length());
</span><span class="lines">@@ -466,7 +466,7 @@
</span><span class="cx">     if (!string.length())
</span><span class="cx">         return static_cast&lt;AtomicStringImpl*&gt;(StringImpl::empty());
</span><span class="cx"> 
</span><del>-    if (string.isSymbol()) {
</del><ins>+    if (string.isSymbol() || string.isStatic()) {
</ins><span class="cx">         if (string.is8Bit())
</span><span class="cx">             return lookUpInternal(string.characters8(), string.length());
</span><span class="cx">         return lookUpInternal(string.characters16(), string.length());
</span></span></pre></div>
<a id="trunkSourceWTFwtftextAtomicStringImplh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/text/AtomicStringImpl.h (210226 => 210227)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/text/AtomicStringImpl.h        2017-01-02 21:16:09 UTC (rev 210226)
+++ trunk/Source/WTF/wtf/text/AtomicStringImpl.h        2017-01-02 21:22:19 UTC (rev 210227)
</span><span class="lines">@@ -111,7 +111,7 @@
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> #if !ASSERT_DISABLED
</span><del>-// AtomicStringImpls created from StaticASCIILiteral will ASSERT
</del><ins>+// AtomicStringImpls created from StaticStringImpl will ASSERT
</ins><span class="cx"> // in the generic ValueCheck&lt;T&gt;::checkConsistency
</span><span class="cx"> // as they are not allocated by fastMalloc.
</span><span class="cx"> // We don't currently have any way to detect that case
</span></span></pre></div>
<a id="trunkSourceWTFwtftextStringImplh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/text/StringImpl.h (210226 => 210227)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/text/StringImpl.h        2017-01-02 21:16:09 UTC (rev 210226)
+++ trunk/Source/WTF/wtf/text/StringImpl.h        2017-01-02 21:22:19 UTC (rev 210227)
</span><span class="lines">@@ -845,21 +845,6 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> public:
</span><del>-    // FIXME: It should be replaced with StaticStringImpl.
-    // https://bugs.webkit.org/show_bug.cgi?id=165134
-    struct StaticASCIILiteral {
-        // These member variables must match the layout of StringImpl.
-        unsigned m_refCount;
-        unsigned m_length;
-        const LChar* m_data8;
-        unsigned m_hashAndFlags;
-
-        // These values mimic ConstructFromLiteral.
-        static const unsigned s_initialRefCount = s_refCountIncrement;
-        static const unsigned s_initialFlags = s_hashFlag8BitBuffer | StringNormal | BufferInternal;
-        static const unsigned s_hashShift = s_flagCount;
-    };
-
</del><span class="cx"> #ifndef NDEBUG
</span><span class="cx">     void assertHashIsCorrect()
</span><span class="cx">     {
</span><span class="lines">@@ -869,7 +854,7 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    // These member variables must match the layout of StaticASCIILiteral and StaticStringImpl.
</del><ins>+    // These member variables must match the layout of StaticStringImpl.
</ins><span class="cx">     unsigned m_refCount;
</span><span class="cx">     unsigned m_length;
</span><span class="cx">     union {
</span><span class="lines">@@ -879,11 +864,10 @@
</span><span class="cx">     mutable unsigned m_hashAndFlags;
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static_assert(sizeof(StringImpl) == sizeof(StringImpl::StaticASCIILiteral), &quot;&quot;);
</del><span class="cx"> static_assert(sizeof(StringImpl) == sizeof(StringImpl::StaticStringImpl), &quot;&quot;);
</span><span class="cx"> 
</span><span class="cx"> #if !ASSERT_DISABLED
</span><del>-// StringImpls created from StaticASCIILiteral will ASSERT
</del><ins>+// StringImpls created from StaticStringImpl will ASSERT
</ins><span class="cx"> // in the generic ValueCheck&lt;T&gt;::checkConsistency
</span><span class="cx"> // as they are not allocated by fastMalloc.
</span><span class="cx"> // We don't currently have any way to detect that case
</span></span></pre></div>
<a id="trunkSourceWTFwtftextSymbolImplh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/text/SymbolImpl.h (210226 => 210227)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/text/SymbolImpl.h        2017-01-02 21:16:09 UTC (rev 210226)
+++ trunk/Source/WTF/wtf/text/SymbolImpl.h        2017-01-02 21:22:19 UTC (rev 210227)
</span><span class="lines">@@ -105,7 +105,7 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if !ASSERT_DISABLED
</span><del>-// SymbolImpls created from StaticASCIILiteral will ASSERT
</del><ins>+// SymbolImpls created from StaticStringImpl will ASSERT
</ins><span class="cx"> // in the generic ValueCheck&lt;T&gt;::checkConsistency
</span><span class="cx"> // as they are not allocated by fastMalloc.
</span><span class="cx"> // We don't currently have any way to detect that case
</span></span></pre></div>
<a id="trunkSourceWTFwtftextUniquedStringImplh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/text/UniquedStringImpl.h (210226 => 210227)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/text/UniquedStringImpl.h        2017-01-02 21:16:09 UTC (rev 210226)
+++ trunk/Source/WTF/wtf/text/UniquedStringImpl.h        2017-01-02 21:22:19 UTC (rev 210227)
</span><span class="lines">@@ -42,7 +42,7 @@
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> #if !ASSERT_DISABLED
</span><del>-// UniquedStringImpls created from StaticASCIILiteral will ASSERT
</del><ins>+// UniquedStringImpls created from StaticStringImpl will ASSERT
</ins><span class="cx"> // in the generic ValueCheck&lt;T&gt;::checkConsistency
</span><span class="cx"> // as they are not allocated by fastMalloc.
</span><span class="cx"> // We don't currently have any way to detect that case
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (210226 => 210227)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2017-01-02 21:16:09 UTC (rev 210226)
+++ trunk/Source/WebCore/ChangeLog        2017-01-02 21:22:19 UTC (rev 210227)
</span><span class="lines">@@ -1,3 +1,13 @@
</span><ins>+2017-01-02  Yusuke Suzuki  &lt;utatane.tea@gmail.com&gt;
+
+        Use StaticStringImpl instead of StaticASCIILiteral
+        https://bugs.webkit.org/show_bug.cgi?id=166586
+
+        Reviewed by Darin Adler.
+
+        * bindings/scripts/StaticString.pm:
+        (GenerateStrings):
+
</ins><span class="cx"> 2017-01-02  Andreas Kling  &lt;akling@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Drop the render tree for documents in the page cache.
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsStaticStringpm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/StaticString.pm (210226 => 210227)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/StaticString.pm        2017-01-02 21:16:09 UTC (rev 210226)
+++ trunk/Source/WebCore/bindings/scripts/StaticString.pm        2017-01-02 21:22:19 UTC (rev 210227)
</span><span class="lines">@@ -33,28 +33,28 @@
</span><span class="cx"> 
</span><span class="cx">     my @result = ();
</span><span class="cx"> 
</span><del>-    for my $name (sort keys %strings) {
-        push(@result, &quot;static const LChar ${name}String8[] = \&quot;$strings{$name}\&quot;;\n&quot;);
-    }
</del><ins>+    push(@result, &lt;&lt;END);
+#if COMPILER(MSVC)
+#pragma warning(push)
+#pragma warning(disable: 4307)
+#endif
+END
</ins><span class="cx"> 
</span><span class="cx">     push(@result, &quot;\n&quot;);
</span><span class="cx"> 
</span><span class="cx">     for my $name (sort keys %strings) {
</span><span class="cx">         my $value = $strings{$name};
</span><del>-        my $length = length($value);
-        my $hash = Hasher::GenerateHashValue($value);
-        push(@result, &lt;&lt;END);
-static StringImpl::StaticASCIILiteral ${name}Data = {
-    StringImpl::StaticASCIILiteral::s_initialRefCount,
-    $length,
-    ${name}String8,
-    StringImpl::StaticASCIILiteral::s_initialFlags | (${hash} &lt;&lt; StringImpl::StaticASCIILiteral::s_hashShift)
-};
-END
</del><ins>+        push(@result, &quot;static StringImpl::StaticStringImpl ${name}Data(\&quot;${value}\&quot;);\n&quot;);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     push(@result, &quot;\n&quot;);
</span><span class="cx"> 
</span><ins>+    push(@result, &lt;&lt;END);
+#if COMPILER(MSVC)
+#pragma warning(pop)
+#endif
+END
+
</ins><span class="cx">     return join &quot;&quot;, @result;
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>