<!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>[194509] 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/194509">194509</a></dd>
<dt>Author</dt> <dd>akling@apple.com</dd>
<dt>Date</dt> <dd>2016-01-03 01:48:58 -0800 (Sun, 03 Jan 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Remove redundant StringImpl substring creation function.
&lt;https://webkit.org/b/152652&gt;

Reviewed by Daniel Bates.

Source/JavaScriptCore:

Remove jsSubstring8() and make the only call site use jsSubstring().

* runtime/JSString.h:
(JSC::jsSubstring8): Deleted.
* runtime/StringPrototype.cpp:
(JSC::replaceUsingRegExpSearch):

Source/WTF:

Remove StringImpl::createSubstringSharingImpl8() and make the only
caller use createSubstringSharingImpl() instead.

They do the same thing anyway, the only difference is that the branch
on is8Bit() now happens in the callee instead of at the call site.

* wtf/text/StringImpl.h:
(WTF::StringImpl::createSubstringSharingImpl8): Deleted.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSStringh">trunk/Source/JavaScriptCore/runtime/JSString.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeStringPrototypecpp">trunk/Source/JavaScriptCore/runtime/StringPrototype.cpp</a></li>
<li><a href="#trunkSourceWTFChangeLog">trunk/Source/WTF/ChangeLog</a></li>
<li><a href="#trunkSourceWTFwtftextStringImplh">trunk/Source/WTF/wtf/text/StringImpl.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (194508 => 194509)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2016-01-03 06:21:23 UTC (rev 194508)
+++ trunk/Source/JavaScriptCore/ChangeLog        2016-01-03 09:48:58 UTC (rev 194509)
</span><span class="lines">@@ -1,3 +1,17 @@
</span><ins>+2016-01-03  Andreas Kling  &lt;akling@apple.com&gt;
+
+        Remove redundant StringImpl substring creation function.
+        &lt;https://webkit.org/b/152652&gt;
+
+        Reviewed by Daniel Bates.
+
+        Remove jsSubstring8() and make the only call site use jsSubstring().
+
+        * runtime/JSString.h:
+        (JSC::jsSubstring8): Deleted.
+        * runtime/StringPrototype.cpp:
+        (JSC::replaceUsingRegExpSearch):
+
</ins><span class="cx"> 2016-01-02  Khem Raj  &lt;raj.khem@gmail.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Clang's builtin for clear_cache accepts char* and errors out
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSStringh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSString.h (194508 => 194509)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSString.h        2016-01-03 06:21:23 UTC (rev 194508)
+++ trunk/Source/JavaScriptCore/runtime/JSString.h        2016-01-03 09:48:58 UTC (rev 194509)
</span><span class="lines">@@ -47,8 +47,6 @@
</span><span class="cx"> JSString* jsSingleCharacterString(ExecState*, UChar);
</span><span class="cx"> JSString* jsSubstring(VM*, const String&amp;, unsigned offset, unsigned length);
</span><span class="cx"> JSString* jsSubstring(ExecState*, const String&amp;, unsigned offset, unsigned length);
</span><del>-JSString* jsSubstring8(VM*, const String&amp;, unsigned offset, unsigned length);
-JSString* jsSubstring8(ExecState*, const String&amp;, unsigned offset, unsigned length);
</del><span class="cx"> 
</span><span class="cx"> // Non-trivial strings are two or more characters long.
</span><span class="cx"> // These functions are faster than just calling jsString.
</span><span class="lines">@@ -555,21 +553,6 @@
</span><span class="cx">     return JSRopeString::create(*exec, *s, offset, length);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline JSString* jsSubstring8(VM* vm, const String&amp; s, unsigned offset, unsigned length)
-{
-    ASSERT(offset &lt;= static_cast&lt;unsigned&gt;(s.length()));
-    ASSERT(length &lt;= static_cast&lt;unsigned&gt;(s.length()));
-    ASSERT(offset + length &lt;= static_cast&lt;unsigned&gt;(s.length()));
-    if (!length)
-        return vm-&gt;smallStrings.emptyString();
-    if (length == 1) {
-        UChar c = s.characterAt(offset);
-        if (c &lt;= maxSingleCharacterString)
-            return vm-&gt;smallStrings.singleCharacterString(c);
-    }
-    return JSString::createHasOtherOwner(*vm, StringImpl::createSubstringSharingImpl8(s.impl(), offset, length));
-}
-
</del><span class="cx"> inline JSString* jsSubstring(VM* vm, const String&amp; s, unsigned offset, unsigned length)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(offset &lt;= static_cast&lt;unsigned&gt;(s.length()));
</span><span class="lines">@@ -606,7 +589,6 @@
</span><span class="cx"> inline JSString* jsEmptyString(ExecState* exec) { return jsEmptyString(&amp;exec-&gt;vm()); }
</span><span class="cx"> inline JSString* jsString(ExecState* exec, const String&amp; s) { return jsString(&amp;exec-&gt;vm(), s); }
</span><span class="cx"> inline JSString* jsSingleCharacterString(ExecState* exec, UChar c) { return jsSingleCharacterString(&amp;exec-&gt;vm(), c); }
</span><del>-inline JSString* jsSubstring8(ExecState* exec, const String&amp; s, unsigned offset, unsigned length) { return jsSubstring8(&amp;exec-&gt;vm(), s, offset, length); }
</del><span class="cx"> inline JSString* jsSubstring(ExecState* exec, const String&amp; s, unsigned offset, unsigned length) { return jsSubstring(&amp;exec-&gt;vm(), s, offset, length); }
</span><span class="cx"> inline JSString* jsNontrivialString(ExecState* exec, const String&amp; s) { return jsNontrivialString(&amp;exec-&gt;vm(), s); }
</span><span class="cx"> inline JSString* jsNontrivialString(ExecState* exec, String&amp;&amp; s) { return jsNontrivialString(&amp;exec-&gt;vm(), WTFMove(s)); }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeStringPrototypecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/StringPrototype.cpp (194508 => 194509)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/StringPrototype.cpp        2016-01-03 06:21:23 UTC (rev 194508)
+++ trunk/Source/JavaScriptCore/runtime/StringPrototype.cpp        2016-01-03 09:48:58 UTC (rev 194509)
</span><span class="lines">@@ -529,7 +529,7 @@
</span><span class="cx">                     if (matchStart &lt; 0)
</span><span class="cx">                         cachedCall.setArgument(i, jsUndefined());
</span><span class="cx">                     else
</span><del>-                        cachedCall.setArgument(i, jsSubstring8(vm, source, matchStart, matchLen));
</del><ins>+                        cachedCall.setArgument(i, jsSubstring(vm, source, matchStart, matchLen));
</ins><span class="cx">                 }
</span><span class="cx"> 
</span><span class="cx">                 cachedCall.setArgument(i++, jsNumber(result.start));
</span></span></pre></div>
<a id="trunkSourceWTFChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/ChangeLog (194508 => 194509)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/ChangeLog        2016-01-03 06:21:23 UTC (rev 194508)
+++ trunk/Source/WTF/ChangeLog        2016-01-03 09:48:58 UTC (rev 194509)
</span><span class="lines">@@ -1,3 +1,19 @@
</span><ins>+2016-01-03  Andreas Kling  &lt;akling@apple.com&gt;
+
+        Remove redundant StringImpl substring creation function.
+        &lt;https://webkit.org/b/152652&gt;
+
+        Reviewed by Daniel Bates.
+
+        Remove StringImpl::createSubstringSharingImpl8() and make the only
+        caller use createSubstringSharingImpl() instead.
+        
+        They do the same thing anyway, the only difference is that the branch
+        on is8Bit() now happens in the callee instead of at the call site.
+
+        * wtf/text/StringImpl.h:
+        (WTF::StringImpl::createSubstringSharingImpl8): Deleted.
+
</ins><span class="cx"> 2015-12-31  Andy Estes  &lt;aestes@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Replace WTF::move with WTFMove
</span></span></pre></div>
<a id="trunkSourceWTFwtftextStringImplh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/text/StringImpl.h (194508 => 194509)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/text/StringImpl.h        2016-01-03 06:21:23 UTC (rev 194508)
+++ trunk/Source/WTF/wtf/text/StringImpl.h        2016-01-03 09:48:58 UTC (rev 194509)
</span><span class="lines">@@ -348,22 +348,6 @@
</span><span class="cx">     WTF_EXPORT_STRING_API static Ref&lt;StringImpl&gt; create(const LChar*);
</span><span class="cx">     ALWAYS_INLINE static Ref&lt;StringImpl&gt; create(const char* s) { return create(reinterpret_cast&lt;const LChar*&gt;(s)); }
</span><span class="cx"> 
</span><del>-    static ALWAYS_INLINE Ref&lt;StringImpl&gt; createSubstringSharingImpl8(PassRefPtr&lt;StringImpl&gt; rep, unsigned offset, unsigned length)
-    {
-        ASSERT(rep);
-        ASSERT(length &lt;= rep-&gt;length());
-
-        if (!length)
-            return *empty();
-
-        ASSERT(rep-&gt;is8Bit());
-        StringImpl* ownerRep = (rep-&gt;bufferOwnership() == BufferSubstring) ? rep-&gt;substringBuffer() : rep.get();
-
-        // We allocate a buffer that contains both the StringImpl struct as well as the pointer to the owner string.
-        StringImpl* stringImpl = static_cast&lt;StringImpl*&gt;(fastMalloc(allocationSize&lt;StringImpl*&gt;(1)));
-        return adoptRef(*new (NotNull, stringImpl) StringImpl(rep-&gt;m_data8 + offset, length, ownerRep));
-    }
-
</del><span class="cx">     static ALWAYS_INLINE Ref&lt;StringImpl&gt; createSubstringSharingImpl(PassRefPtr&lt;StringImpl&gt; rep, unsigned offset, unsigned length)
</span><span class="cx">     {
</span><span class="cx">         ASSERT(rep);
</span></span></pre>
</div>
</div>

</body>
</html>