<!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>[209906] 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/209906">209906</a></dd>
<dt>Author</dt> <dd>darin@apple.com</dd>
<dt>Date</dt> <dd>2016-12-15 20:52:20 -0800 (Thu, 15 Dec 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Use asString instead of toWTFString, toString, or getString when we already checked isString
https://bugs.webkit.org/show_bug.cgi?id=165895

Reviewed by Yusuke Suzuki.

Source/JavaScriptCore:

Once we have called isString, we should always use asString and value rather than using
functions that have to deal with non-JSString objects. This leads to slightly fewer branches,
slightly less reference count churn, since the string is stored right inside the JSString,
and obviates the need for exception handling.

* bindings/ScriptValue.cpp:
(Inspector::jsToInspectorValue): Use asString/value instead of getString.
* dfg/DFGOperations.cpp:
(JSC::DFG::operationMapHash): Call jsMapHash with its new arguments.
* inspector/JSInjectedScriptHost.cpp:
(Inspector::JSInjectedScriptHost::evaluateWithScopeExtension): Use asString/value instead
of toWTFString.
* inspector/JSJavaScriptCallFrame.cpp:
(Inspector::JSJavaScriptCallFrame::evaluateWithScopeExtension): Ditto.
* inspector/agents/InspectorHeapAgent.cpp:
(Inspector::InspectorHeapAgent::getPreview): Use asString/tryGetValue, instead of the
peculiar getString(nullptr) that was here before.
* jsc.cpp:
(functionGetGetterSetter): Use asString/toIdentifier instead of the much less efficient
toWTFString/Identifier::fromString.
(functionIsRope): Use asString instead of jsCast&lt;JSString*&gt;; same thing, but we should
prefer the asString function, since it exists.
(functionFindTypeForExpression): Use asString/value instead of getString.
(functionHasBasicBlockExecuted): Ditto.
(functionBasicBlockExecutionCount): Ditto.
(functionCreateBuiltin): Use asString/value instead of toWTFString and removed
unneeded RETURN_IF_EXCEPTION.
(valueWithTypeOfWasmValue): Use asString instead of jsCast&lt;String*&gt;.
(box): Ditto.
* runtime/DateConstructor.cpp:
(JSC::constructDate): Use asString/values instead of getString.
* runtime/ExceptionHelpers.cpp:
(JSC::errorDescriptionForValue): Tweaked formatting.

* runtime/HashMapImpl.h:
(JSC::jsMapHash): Changed this function to use asString/value.

* runtime/JSCJSValue.cpp:
(JSC::JSValue::dumpInContextAssumingStructure): Use asString instead of
jsCast&lt;JSString*&gt;.
(JSC::JSValue::dumpForBacktrace): Ditto.
* runtime/JSCJSValueInlines.h:
(JSC::toPreferredPrimitiveType): Ditto.

* runtime/JSGlobalObjectFunctions.cpp:
(JSC::globalFuncEval): Use asString/value instead of toWTFString.

* runtime/JSString.cpp:
(JSC::JSString::destroy): Streamlined by removing local variable.
(JSC::JSString::estimatedSize): Use asString instead of jsCast&lt;JSString*&gt;.
(JSC::JSString::visitChildren): Ditto.
(JSC::JSString::toThis): Ditto.
* runtime/JSString.h:
(JSC::JSValue::toString): Ditto.
(JSC::JSValue::toStringOrNull): Ditto.
* runtime/NumberPrototype.cpp:
(JSC::numberProtoFuncValueOf): Ditto.
* runtime/ObjectPrototype.cpp:
(JSC::objectProtoFuncToString): Ditto.
* runtime/StringPrototype.cpp:
(JSC::stringProtoFuncRepeatCharacter): Ditto.
(JSC::stringProtoFuncSubstr): Ditto.
(JSC::builtinStringSubstrInternal): Simplified assertion by removing local variable.

Source/WebCore:

* Modules/fetch/FetchBody.cpp:
(WebCore::FetchBody::extract): Use asString/value instead of toWTFString.

* Modules/mediastream/SDPProcessor.cpp:
(WebCore::SDPProcessor::callScript): Use asString/value instead of getString.

* bindings/js/ArrayValue.cpp:
(WebCore::ArrayValue::get): Use asString/value instead of toWTFString.

* bindings/js/IDBBindingUtilities.cpp:
(WebCore::get): Use asString/length instead of toString/length.
(WebCore::createIDBKeyFromValue): Use asString/value instead of toWTFString.
* bindings/js/JSCryptoAlgorithmDictionary.cpp:
(WebCore::JSCryptoAlgorithmDictionary::getAlgorithmIdentifier): Ditto.
* bindings/js/JSDataCueCustom.cpp:
(WebCore::constructJSDataCue): Use asString/value instead of getString.
* bindings/js/JSInspectorFrontendHostCustom.cpp:
(WebCore::populateContextMenuItems): Use asString/value instead of toWTFString.

* bindings/js/ScriptController.cpp:
(WebCore::jsValueToModuleKey): Use asString/toIdentifier instead of
jsCast&lt;JSString*&gt;/value/Identifier::fromString.

* bindings/js/SerializedScriptValue.cpp:
(WebCore::CloneSerializer::dumpIfTerminal): Streamline by getting rid of local variable.

* contentextensions/ContentExtensionParser.cpp:
(WebCore::ContentExtensions::getDomainList): Use asString instead of jsCast&lt;JSString*&gt;.
(WebCore::ContentExtensions::loadTrigger): Use asString/value instead of toWTFString.
(WebCore::ContentExtensions::loadAction): Ditto.

* css/FontFace.cpp:
(WebCore::FontFace::create): Use asString/value instead of getString.

Source/WebKit/mac:

* Plugins/Hosted/NetscapePluginInstanceProxy.mm:
(WebKit::NetscapePluginInstanceProxy::addValueToArray): Use asString/value instead of
toWTFString.
* WebView/WebView.mm:
(aeDescFromJSValue): Use asString/value instead of getString.

Source/WebKit2:

* WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
(WebKit::NPRuntimeObjectMap::convertJSValueToNPVariant): Use asString/value instead of toWTFString.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCorebindingsScriptValuecpp">trunk/Source/JavaScriptCore/bindings/ScriptValue.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorJSInjectedScriptHostcpp">trunk/Source/JavaScriptCore/inspector/JSInjectedScriptHost.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorJSJavaScriptCallFramecpp">trunk/Source/JavaScriptCore/inspector/JSJavaScriptCallFrame.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectoragentsInspectorHeapAgentcpp">trunk/Source/JavaScriptCore/inspector/agents/InspectorHeapAgent.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejsccpp">trunk/Source/JavaScriptCore/jsc.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeDateConstructorcpp">trunk/Source/JavaScriptCore/runtime/DateConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeExceptionHelperscpp">trunk/Source/JavaScriptCore/runtime/ExceptionHelpers.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeHashMapImplh">trunk/Source/JavaScriptCore/runtime/HashMapImpl.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSCJSValuecpp">trunk/Source/JavaScriptCore/runtime/JSCJSValue.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSCJSValueInlinesh">trunk/Source/JavaScriptCore/runtime/JSCJSValueInlines.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSGlobalObjectFunctionscpp">trunk/Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSStringcpp">trunk/Source/JavaScriptCore/runtime/JSString.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSStringh">trunk/Source/JavaScriptCore/runtime/JSString.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeNumberPrototypecpp">trunk/Source/JavaScriptCore/runtime/NumberPrototype.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeObjectPrototypecpp">trunk/Source/JavaScriptCore/runtime/ObjectPrototype.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeStringPrototypecpp">trunk/Source/JavaScriptCore/runtime/StringPrototype.cpp</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreModulesfetchFetchBodycpp">trunk/Source/WebCore/Modules/fetch/FetchBody.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamSDPProcessorcpp">trunk/Source/WebCore/Modules/mediastream/SDPProcessor.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsArrayValuecpp">trunk/Source/WebCore/bindings/js/ArrayValue.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsIDBBindingUtilitiescpp">trunk/Source/WebCore/bindings/js/IDBBindingUtilities.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSCryptoAlgorithmDictionarycpp">trunk/Source/WebCore/bindings/js/JSCryptoAlgorithmDictionary.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSDataCueCustomcpp">trunk/Source/WebCore/bindings/js/JSDataCueCustom.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSInspectorFrontendHostCustomcpp">trunk/Source/WebCore/bindings/js/JSInspectorFrontendHostCustom.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsScriptControllercpp">trunk/Source/WebCore/bindings/js/ScriptController.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsSerializedScriptValuecpp">trunk/Source/WebCore/bindings/js/SerializedScriptValue.cpp</a></li>
<li><a href="#trunkSourceWebCorecontentextensionsContentExtensionParsercpp">trunk/Source/WebCore/contentextensions/ContentExtensionParser.cpp</a></li>
<li><a href="#trunkSourceWebCorecssFontFacecpp">trunk/Source/WebCore/css/FontFace.cpp</a></li>
<li><a href="#trunkSourceWebKitmacChangeLog">trunk/Source/WebKit/mac/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitmacPluginsHostedNetscapePluginInstanceProxymm">trunk/Source/WebKit/mac/Plugins/Hosted/NetscapePluginInstanceProxy.mm</a></li>
<li><a href="#trunkSourceWebKitmacWebViewWebViewmm">trunk/Source/WebKit/mac/WebView/WebView.mm</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2WebProcessPluginsNetscapeNPRuntimeObjectMapcpp">trunk/Source/WebKit2/WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (209905 => 209906)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2016-12-16 04:40:49 UTC (rev 209905)
+++ trunk/Source/JavaScriptCore/ChangeLog        2016-12-16 04:52:20 UTC (rev 209906)
</span><span class="lines">@@ -1,3 +1,74 @@
</span><ins>+2016-12-15  Darin Adler  &lt;darin@apple.com&gt;
+
+        Use asString instead of toWTFString, toString, or getString when we already checked isString
+        https://bugs.webkit.org/show_bug.cgi?id=165895
+
+        Reviewed by Yusuke Suzuki.
+
+        Once we have called isString, we should always use asString and value rather than using
+        functions that have to deal with non-JSString objects. This leads to slightly fewer branches,
+        slightly less reference count churn, since the string is stored right inside the JSString,
+        and obviates the need for exception handling.
+
+        * bindings/ScriptValue.cpp:
+        (Inspector::jsToInspectorValue): Use asString/value instead of getString.
+        * dfg/DFGOperations.cpp:
+        (JSC::DFG::operationMapHash): Call jsMapHash with its new arguments.
+        * inspector/JSInjectedScriptHost.cpp:
+        (Inspector::JSInjectedScriptHost::evaluateWithScopeExtension): Use asString/value instead
+        of toWTFString.
+        * inspector/JSJavaScriptCallFrame.cpp:
+        (Inspector::JSJavaScriptCallFrame::evaluateWithScopeExtension): Ditto.
+        * inspector/agents/InspectorHeapAgent.cpp:
+        (Inspector::InspectorHeapAgent::getPreview): Use asString/tryGetValue, instead of the
+        peculiar getString(nullptr) that was here before.
+        * jsc.cpp:
+        (functionGetGetterSetter): Use asString/toIdentifier instead of the much less efficient
+        toWTFString/Identifier::fromString.
+        (functionIsRope): Use asString instead of jsCast&lt;JSString*&gt;; same thing, but we should
+        prefer the asString function, since it exists.
+        (functionFindTypeForExpression): Use asString/value instead of getString.
+        (functionHasBasicBlockExecuted): Ditto.
+        (functionBasicBlockExecutionCount): Ditto.
+        (functionCreateBuiltin): Use asString/value instead of toWTFString and removed
+        unneeded RETURN_IF_EXCEPTION.
+        (valueWithTypeOfWasmValue): Use asString instead of jsCast&lt;String*&gt;.
+        (box): Ditto.
+        * runtime/DateConstructor.cpp:
+        (JSC::constructDate): Use asString/values instead of getString.
+        * runtime/ExceptionHelpers.cpp:
+        (JSC::errorDescriptionForValue): Tweaked formatting.
+
+        * runtime/HashMapImpl.h:
+        (JSC::jsMapHash): Changed this function to use asString/value.
+
+        * runtime/JSCJSValue.cpp:
+        (JSC::JSValue::dumpInContextAssumingStructure): Use asString instead of
+        jsCast&lt;JSString*&gt;.
+        (JSC::JSValue::dumpForBacktrace): Ditto.
+        * runtime/JSCJSValueInlines.h:
+        (JSC::toPreferredPrimitiveType): Ditto.
+
+        * runtime/JSGlobalObjectFunctions.cpp:
+        (JSC::globalFuncEval): Use asString/value instead of toWTFString.
+
+        * runtime/JSString.cpp:
+        (JSC::JSString::destroy): Streamlined by removing local variable.
+        (JSC::JSString::estimatedSize): Use asString instead of jsCast&lt;JSString*&gt;.
+        (JSC::JSString::visitChildren): Ditto.
+        (JSC::JSString::toThis): Ditto.
+        * runtime/JSString.h:
+        (JSC::JSValue::toString): Ditto.
+        (JSC::JSValue::toStringOrNull): Ditto.
+        * runtime/NumberPrototype.cpp:
+        (JSC::numberProtoFuncValueOf): Ditto.
+        * runtime/ObjectPrototype.cpp:
+        (JSC::objectProtoFuncToString): Ditto.
+        * runtime/StringPrototype.cpp:
+        (JSC::stringProtoFuncRepeatCharacter): Ditto.
+        (JSC::stringProtoFuncSubstr): Ditto.
+        (JSC::builtinStringSubstrInternal): Simplified assertion by removing local variable.
+
</ins><span class="cx"> 2016-12-15  Keith Miller  &lt;keith_miller@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Fix validation of non-void if blocks with no else
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebindingsScriptValuecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bindings/ScriptValue.cpp (209905 => 209906)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bindings/ScriptValue.cpp        2016-12-16 04:40:49 UTC (rev 209905)
+++ trunk/Source/JavaScriptCore/bindings/ScriptValue.cpp        2016-12-16 04:52:20 UTC (rev 209906)
</span><span class="lines">@@ -61,7 +61,7 @@
</span><span class="cx">     if (value.isNumber() &amp;&amp; value.isAnyInt())
</span><span class="cx">         return InspectorValue::create(static_cast&lt;int&gt;(value.asAnyInt()));
</span><span class="cx">     if (value.isString())
</span><del>-        return InspectorValue::create(value.getString(&amp;scriptState));
</del><ins>+        return InspectorValue::create(asString(value)-&gt;value(&amp;scriptState));
</ins><span class="cx"> 
</span><span class="cx">     if (value.isObject()) {
</span><span class="cx">         if (isJSArray(value)) {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorJSInjectedScriptHostcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/JSInjectedScriptHost.cpp (209905 => 209906)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/JSInjectedScriptHost.cpp        2016-12-16 04:40:49 UTC (rev 209905)
+++ trunk/Source/JavaScriptCore/inspector/JSInjectedScriptHost.cpp        2016-12-16 04:52:20 UTC (rev 209906)
</span><span class="lines">@@ -102,7 +102,7 @@
</span><span class="cx">     if (!scriptValue.isString())
</span><span class="cx">         return throwTypeError(exec, scope, ASCIILiteral(&quot;InjectedScriptHost.evaluateWithScopeExtension first argument must be a string.&quot;));
</span><span class="cx"> 
</span><del>-    String program = scriptValue.toWTFString(exec);
</del><ins>+    String program = asString(scriptValue)-&gt;value(exec);
</ins><span class="cx">     RETURN_IF_EXCEPTION(scope, JSValue());
</span><span class="cx"> 
</span><span class="cx">     NakedPtr&lt;Exception&gt; exception;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorJSJavaScriptCallFramecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/JSJavaScriptCallFrame.cpp (209905 => 209906)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/JSJavaScriptCallFrame.cpp        2016-12-16 04:40:49 UTC (rev 209905)
+++ trunk/Source/JavaScriptCore/inspector/JSJavaScriptCallFrame.cpp        2016-12-16 04:52:20 UTC (rev 209906)
</span><span class="lines">@@ -82,7 +82,7 @@
</span><span class="cx">     if (!scriptValue.isString())
</span><span class="cx">         return throwTypeError(exec, scope, ASCIILiteral(&quot;JSJavaScriptCallFrame.evaluateWithScopeExtension first argument must be a string.&quot;));
</span><span class="cx"> 
</span><del>-    String script = scriptValue.toWTFString(exec);
</del><ins>+    String script = asString(scriptValue)-&gt;value(exec);
</ins><span class="cx">     RETURN_IF_EXCEPTION(scope, JSValue());
</span><span class="cx"> 
</span><span class="cx">     NakedPtr&lt;Exception&gt; exception;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectoragentsInspectorHeapAgentcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/agents/InspectorHeapAgent.cpp (209905 => 209906)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/agents/InspectorHeapAgent.cpp        2016-12-16 04:40:49 UTC (rev 209905)
+++ trunk/Source/JavaScriptCore/inspector/agents/InspectorHeapAgent.cpp        2016-12-16 04:52:20 UTC (rev 209906)
</span><span class="lines">@@ -251,7 +251,7 @@
</span><span class="cx">     // String preview.
</span><span class="cx">     JSCell* cell = optionalNode-&gt;cell;
</span><span class="cx">     if (cell-&gt;isString()) {
</span><del>-        *resultString = cell-&gt;getString(nullptr);
</del><ins>+        *resultString = asString(cell)-&gt;tryGetValue();
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejsccpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jsc.cpp (209905 => 209906)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jsc.cpp        2016-12-16 04:40:49 UTC (rev 209905)
+++ trunk/Source/JavaScriptCore/jsc.cpp        2016-12-16 04:52:20 UTC (rev 209906)
</span><span class="lines">@@ -1876,10 +1876,8 @@
</span><span class="cx">     if (!property.isString())
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><span class="cx"> 
</span><del>-    Identifier ident = Identifier::fromString(&amp;exec-&gt;vm(), property.toWTFString(exec));
-
</del><span class="cx">     PropertySlot slot(value, PropertySlot::InternalMethodType::VMInquiry);
</span><del>-    value.getPropertySlot(exec, ident, slot);
</del><ins>+    value.getPropertySlot(exec, asString(property)-&gt;toIdentifier(exec), slot);
</ins><span class="cx"> 
</span><span class="cx">     JSValue result;
</span><span class="cx">     if (slot.isCacheableGetter())
</span><span class="lines">@@ -2104,7 +2102,7 @@
</span><span class="cx">     JSValue argument = exec-&gt;argument(0);
</span><span class="cx">     if (!argument.isString())
</span><span class="cx">         return JSValue::encode(jsBoolean(false));
</span><del>-    const StringImpl* impl = jsCast&lt;JSString*&gt;(argument)-&gt;tryGetValueImpl();
</del><ins>+    const StringImpl* impl = asString(argument)-&gt;tryGetValueImpl();
</ins><span class="cx">     return JSValue::encode(jsBoolean(!impl));
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -2282,7 +2280,7 @@
</span><span class="cx">     FunctionExecutable* executable = (jsDynamicCast&lt;JSFunction*&gt;(functionValue.asCell()-&gt;getObject()))-&gt;jsExecutable();
</span><span class="cx"> 
</span><span class="cx">     RELEASE_ASSERT(exec-&gt;argument(1).isString());
</span><del>-    String substring = exec-&gt;argument(1).getString(exec);
</del><ins>+    String substring = asString(exec-&gt;argument(1))-&gt;value(exec);
</ins><span class="cx">     String sourceCodeText = executable-&gt;source().view().toString();
</span><span class="cx">     unsigned offset = static_cast&lt;unsigned&gt;(sourceCodeText.find(substring) + executable-&gt;source().startOffset());
</span><span class="cx">     
</span><span class="lines">@@ -2320,7 +2318,7 @@
</span><span class="cx">     FunctionExecutable* executable = (jsDynamicCast&lt;JSFunction*&gt;(functionValue.asCell()-&gt;getObject()))-&gt;jsExecutable();
</span><span class="cx"> 
</span><span class="cx">     RELEASE_ASSERT(exec-&gt;argument(1).isString());
</span><del>-    String substring = exec-&gt;argument(1).getString(exec);
</del><ins>+    String substring = asString(exec-&gt;argument(1))-&gt;value(exec);
</ins><span class="cx">     String sourceCodeText = executable-&gt;source().view().toString();
</span><span class="cx">     RELEASE_ASSERT(sourceCodeText.contains(substring));
</span><span class="cx">     int offset = sourceCodeText.find(substring) + executable-&gt;source().startOffset();
</span><span class="lines">@@ -2338,7 +2336,7 @@
</span><span class="cx">     FunctionExecutable* executable = (jsDynamicCast&lt;JSFunction*&gt;(functionValue.asCell()-&gt;getObject()))-&gt;jsExecutable();
</span><span class="cx"> 
</span><span class="cx">     RELEASE_ASSERT(exec-&gt;argument(1).isString());
</span><del>-    String substring = exec-&gt;argument(1).getString(exec);
</del><ins>+    String substring = asString(exec-&gt;argument(1))-&gt;value(exec);
</ins><span class="cx">     String sourceCodeText = executable-&gt;source().view().toString();
</span><span class="cx">     RELEASE_ASSERT(sourceCodeText.contains(substring));
</span><span class="cx">     int offset = sourceCodeText.find(substring) + executable-&gt;source().startOffset();
</span><span class="lines">@@ -2403,7 +2401,7 @@
</span><span class="cx">     if (exec-&gt;argumentCount() &lt; 1 || !exec-&gt;argument(0).isString())
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><span class="cx"> 
</span><del>-    String functionText = exec-&gt;argument(0).toWTFString(exec);
</del><ins>+    String functionText = asString(exec-&gt;argument(0))-&gt;value(exec);
</ins><span class="cx">     RETURN_IF_EXCEPTION(scope, encodedJSValue());
</span><span class="cx"> 
</span><span class="cx">     const SourceCode&amp; source = makeSource(functionText);
</span><span class="lines">@@ -2510,7 +2508,7 @@
</span><span class="cx"> 
</span><span class="cx"> static CString valueWithTypeOfWasmValue(ExecState* exec, VM&amp; vm, JSValue value, JSValue wasmValue)
</span><span class="cx"> {
</span><del>-    JSString* type = jsCast&lt;JSString*&gt;(wasmValue.get(exec, makeIdentifier(vm, &quot;type&quot;)));
</del><ins>+    JSString* type = asString(wasmValue.get(exec, makeIdentifier(vm, &quot;type&quot;)));
</ins><span class="cx"> 
</span><span class="cx">     const String&amp; typeString = type-&gt;value(exec);
</span><span class="cx">     if (typeString == &quot;i64&quot; || typeString == &quot;i32&quot;)
</span><span class="lines">@@ -2523,7 +2521,7 @@
</span><span class="cx"> static JSValue box(ExecState* exec, VM&amp; vm, JSValue wasmValue)
</span><span class="cx"> {
</span><span class="cx"> 
</span><del>-    JSString* type = jsCast&lt;JSString*&gt;(wasmValue.get(exec, makeIdentifier(vm, &quot;type&quot;)));
</del><ins>+    JSString* type = asString(wasmValue.get(exec, makeIdentifier(vm, &quot;type&quot;)));
</ins><span class="cx">     JSValue value = wasmValue.get(exec, makeIdentifier(vm, &quot;value&quot;));
</span><span class="cx"> 
</span><span class="cx">     auto unboxString = [&amp;] (const char* hexFormat, const char* decFormat, auto&amp; result) {
</span><span class="lines">@@ -2530,7 +2528,7 @@
</span><span class="cx">         if (!value.isString())
</span><span class="cx">             return false;
</span><span class="cx"> 
</span><del>-        const char* str = toCString(jsCast&lt;JSString*&gt;(value)-&gt;value(exec)).data();
</del><ins>+        const char* str = toCString(asString(value)-&gt;value(exec)).data();
</ins><span class="cx">         int scanResult;
</span><span class="cx">         int length = std::strlen(str);
</span><span class="cx">         if ((length &gt; 2 &amp;&amp; (str[0] == '0' &amp;&amp; str[1] == 'x'))
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeDateConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/DateConstructor.cpp (209905 => 209906)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/DateConstructor.cpp        2016-12-16 04:40:49 UTC (rev 209905)
+++ trunk/Source/JavaScriptCore/runtime/DateConstructor.cpp        2016-12-16 04:52:20 UTC (rev 209906)
</span><span class="lines">@@ -160,7 +160,7 @@
</span><span class="cx">             JSValue primitive = args.at(0).toPrimitive(exec);
</span><span class="cx">             RETURN_IF_EXCEPTION(scope, nullptr);
</span><span class="cx">             if (primitive.isString())
</span><del>-                value = parseDate(vm, primitive.getString(exec));
</del><ins>+                value = parseDate(vm, asString(primitive)-&gt;value(exec));
</ins><span class="cx">             else
</span><span class="cx">                 value = primitive.toNumber(exec);
</span><span class="cx">         }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeExceptionHelperscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/ExceptionHelpers.cpp (209905 => 209906)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/ExceptionHelpers.cpp        2016-12-16 04:40:49 UTC (rev 209905)
+++ trunk/Source/JavaScriptCore/runtime/ExceptionHelpers.cpp        2016-12-16 04:52:20 UTC (rev 209906)
</span><span class="lines">@@ -85,7 +85,7 @@
</span><span class="cx"> JSString* errorDescriptionForValue(ExecState* exec, JSValue v)
</span><span class="cx"> {
</span><span class="cx">     if (v.isString())
</span><del>-        return jsNontrivialString(exec, makeString('&quot;',  asString(v)-&gt;value(exec), '&quot;'));
</del><ins>+        return jsNontrivialString(exec, makeString('&quot;', asString(v)-&gt;value(exec), '&quot;'));
</ins><span class="cx">     if (v.isSymbol())
</span><span class="cx">         return jsNontrivialString(exec, asSymbol(v)-&gt;descriptiveString());
</span><span class="cx">     if (v.isObject()) {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeHashMapImplh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/HashMapImpl.h (209905 => 209906)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/HashMapImpl.h        2016-12-16 04:40:49 UTC (rev 209905)
+++ trunk/Source/JavaScriptCore/runtime/HashMapImpl.h        2016-12-16 04:52:20 UTC (rev 209906)
</span><span class="lines">@@ -240,17 +240,14 @@
</span><span class="cx"> {
</span><span class="cx">     ASSERT_WITH_MESSAGE(normalizeMapKey(value) == value, &quot;We expect normalized values flowing into this function.&quot;);
</span><span class="cx"> 
</span><del>-    auto scope = DECLARE_THROW_SCOPE(vm);
-
</del><span class="cx">     if (value.isString()) {
</span><del>-        JSString* string = asString(value);
-        const String&amp; wtfString = string-&gt;value(exec);
</del><ins>+        auto scope = DECLARE_THROW_SCOPE(vm);
+        const String&amp; wtfString = asString(value)-&gt;value(exec);
</ins><span class="cx">         RETURN_IF_EXCEPTION(scope, UINT_MAX);
</span><span class="cx">         return wtfString.impl()-&gt;hash();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    uint64_t rawValue = JSValue::encode(value);
-    return wangsInt64Hash(rawValue);
</del><ins>+    return wangsInt64Hash(JSValue::encode(value));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> ALWAYS_INLINE std::optional&lt;uint32_t&gt; concurrentJSMapHash(JSValue key)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSCJSValuecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSCJSValue.cpp (209905 => 209906)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSCJSValue.cpp        2016-12-16 04:40:49 UTC (rev 209905)
+++ trunk/Source/JavaScriptCore/runtime/JSCJSValue.cpp        2016-12-16 04:52:20 UTC (rev 209906)
</span><span class="lines">@@ -247,7 +247,7 @@
</span><span class="cx"> #endif
</span><span class="cx">     } else if (isCell()) {
</span><span class="cx">         if (structure-&gt;classInfo()-&gt;isSubClassOf(JSString::info())) {
</span><del>-            JSString* string = jsCast&lt;JSString*&gt;(asCell());
</del><ins>+            JSString* string = asString(asCell());
</ins><span class="cx">             out.print(&quot;String&quot;);
</span><span class="cx">             if (string-&gt;isRope())
</span><span class="cx">                 out.print(&quot; (rope)&quot;);
</span><span class="lines">@@ -299,7 +299,7 @@
</span><span class="cx">         out.printf(&quot;%lf&quot;, asDouble());
</span><span class="cx">     else if (isCell()) {
</span><span class="cx">         if (asCell()-&gt;inherits(JSString::info())) {
</span><del>-            JSString* string = jsCast&lt;JSString*&gt;(asCell());
</del><ins>+            JSString* string = asString(asCell());
</ins><span class="cx">             const StringImpl* impl = string-&gt;tryGetValueImpl();
</span><span class="cx">             if (impl)
</span><span class="cx">                 out.print(&quot;\&quot;&quot;, impl, &quot;\&quot;&quot;);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSCJSValueInlinesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSCJSValueInlines.h (209905 => 209906)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSCJSValueInlines.h        2016-12-16 04:40:49 UTC (rev 209905)
+++ trunk/Source/JavaScriptCore/runtime/JSCJSValueInlines.h        2016-12-16 04:52:20 UTC (rev 209906)
</span><span class="lines">@@ -662,7 +662,7 @@
</span><span class="cx">         return NoPreference;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    StringImpl* hintString = jsCast&lt;JSString*&gt;(value)-&gt;value(exec).impl();
</del><ins>+    StringImpl* hintString = asString(value)-&gt;value(exec).impl();
</ins><span class="cx">     RETURN_IF_EXCEPTION(scope, NoPreference);
</span><span class="cx"> 
</span><span class="cx">     if (WTF::equal(hintString, &quot;default&quot;))
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSGlobalObjectFunctionscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp (209905 => 209906)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp        2016-12-16 04:40:49 UTC (rev 209905)
+++ trunk/Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp        2016-12-16 04:52:20 UTC (rev 209906)
</span><span class="lines">@@ -666,7 +666,7 @@
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    String s = x.toWTFString(exec);
</del><ins>+    String s = asString(x)-&gt;value(exec);
</ins><span class="cx">     RETURN_IF_EXCEPTION(scope, encodedJSValue());
</span><span class="cx"> 
</span><span class="cx">     if (s.is8Bit()) {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSStringcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSString.cpp (209905 => 209906)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSString.cpp        2016-12-16 04:40:49 UTC (rev 209905)
+++ trunk/Source/JavaScriptCore/runtime/JSString.cpp        2016-12-16 04:52:20 UTC (rev 209906)
</span><span class="lines">@@ -52,8 +52,7 @@
</span><span class="cx"> 
</span><span class="cx"> void JSString::destroy(JSCell* cell)
</span><span class="cx"> {
</span><del>-    JSString* thisObject = static_cast&lt;JSString*&gt;(cell);
-    thisObject-&gt;JSString::~JSString();
</del><ins>+    static_cast&lt;JSString*&gt;(cell)-&gt;JSString::~JSString();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void JSString::dumpToStream(const JSCell* cell, PrintStream&amp; out)
</span><span class="lines">@@ -84,7 +83,7 @@
</span><span class="cx"> 
</span><span class="cx"> size_t JSString::estimatedSize(JSCell* cell)
</span><span class="cx"> {
</span><del>-    JSString* thisObject = jsCast&lt;JSString*&gt;(cell);
</del><ins>+    JSString* thisObject = asString(cell);
</ins><span class="cx">     if (thisObject-&gt;isRope())
</span><span class="cx">         return Base::estimatedSize(cell);
</span><span class="cx">     return Base::estimatedSize(cell) + thisObject-&gt;m_value.impl()-&gt;costDuringGC();
</span><span class="lines">@@ -92,7 +91,7 @@
</span><span class="cx"> 
</span><span class="cx"> void JSString::visitChildren(JSCell* cell, SlotVisitor&amp; visitor)
</span><span class="cx"> {
</span><del>-    JSString* thisObject = jsCast&lt;JSString*&gt;(cell);
</del><ins>+    JSString* thisObject = asString(cell);
</ins><span class="cx">     Base::visitChildren(thisObject, visitor);
</span><span class="cx">     
</span><span class="cx">     if (thisObject-&gt;isRope())
</span><span class="lines">@@ -421,7 +420,7 @@
</span><span class="cx"> {
</span><span class="cx">     if (ecmaMode == StrictMode)
</span><span class="cx">         return cell;
</span><del>-    return StringObject::create(exec-&gt;vm(), exec-&gt;lexicalGlobalObject(), jsCast&lt;JSString*&gt;(cell));
</del><ins>+    return StringObject::create(exec-&gt;vm(), exec-&gt;lexicalGlobalObject(), asString(cell));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool JSString::getStringPropertyDescriptor(ExecState* exec, PropertyName propertyName, PropertyDescriptor&amp; descriptor)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSStringh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSString.h (209905 => 209906)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSString.h        2016-12-16 04:40:49 UTC (rev 209905)
+++ trunk/Source/JavaScriptCore/runtime/JSString.h        2016-12-16 04:52:20 UTC (rev 209906)
</span><span class="lines">@@ -755,7 +755,7 @@
</span><span class="cx"> inline JSString* JSValue::toString(ExecState* exec) const
</span><span class="cx"> {
</span><span class="cx">     if (isString())
</span><del>-        return jsCast&lt;JSString*&gt;(asCell());
</del><ins>+        return asString(asCell());
</ins><span class="cx">     bool returnEmptyStringOnError = true;
</span><span class="cx">     return toStringSlowCase(exec, returnEmptyStringOnError);
</span><span class="cx"> }
</span><span class="lines">@@ -763,7 +763,7 @@
</span><span class="cx"> inline JSString* JSValue::toStringOrNull(ExecState* exec) const
</span><span class="cx"> {
</span><span class="cx">     if (isString())
</span><del>-        return jsCast&lt;JSString*&gt;(asCell());
</del><ins>+        return asString(asCell());
</ins><span class="cx">     bool returnEmptyStringOnError = false;
</span><span class="cx">     return toStringSlowCase(exec, returnEmptyStringOnError);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeNumberPrototypecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/NumberPrototype.cpp (209905 => 209906)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/NumberPrototype.cpp        2016-12-16 04:40:49 UTC (rev 209905)
+++ trunk/Source/JavaScriptCore/runtime/NumberPrototype.cpp        2016-12-16 04:52:20 UTC (rev 209906)
</span><span class="lines">@@ -539,7 +539,7 @@
</span><span class="cx">     double x;
</span><span class="cx">     JSValue thisValue = exec-&gt;thisValue();
</span><span class="cx">     if (!toThisNumber(thisValue, x))
</span><del>-        return throwVMTypeError(exec, scope, WTF::makeString(&quot;thisNumberValue called on incompatible &quot;, jsCast&lt;JSString*&gt;(jsTypeStringForValue(exec, thisValue))-&gt;value(exec)));
</del><ins>+        return throwVMTypeError(exec, scope, WTF::makeString(&quot;thisNumberValue called on incompatible &quot;, asString(jsTypeStringForValue(exec, thisValue))-&gt;value(exec)));
</ins><span class="cx">     return JSValue::encode(jsNumber(x));
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeObjectPrototypecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/ObjectPrototype.cpp (209905 => 209906)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/ObjectPrototype.cpp        2016-12-16 04:40:49 UTC (rev 209905)
+++ trunk/Source/JavaScriptCore/runtime/ObjectPrototype.cpp        2016-12-16 04:52:20 UTC (rev 209906)
</span><span class="lines">@@ -326,7 +326,7 @@
</span><span class="cx">             if (stringTag.isString()) {
</span><span class="cx">                 JSRopeString::RopeBuilder ropeBuilder(vm);
</span><span class="cx">                 ropeBuilder.append(vm.smallStrings.objectStringStart());
</span><del>-                ropeBuilder.append(jsCast&lt;JSString*&gt;(stringTag));
</del><ins>+                ropeBuilder.append(asString(stringTag));
</ins><span class="cx">                 ropeBuilder.append(vm.smallStrings.singleCharacterString(']'));
</span><span class="cx">                 JSString* result = ropeBuilder.release();
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeStringPrototypecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/StringPrototype.cpp (209905 => 209906)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/StringPrototype.cpp        2016-12-16 04:40:49 UTC (rev 209905)
+++ trunk/Source/JavaScriptCore/runtime/StringPrototype.cpp        2016-12-16 04:52:20 UTC (rev 209906)
</span><span class="lines">@@ -810,7 +810,7 @@
</span><span class="cx">     ASSERT(exec-&gt;argumentCount() == 2);
</span><span class="cx"> 
</span><span class="cx">     ASSERT(exec-&gt;uncheckedArgument(0).isString());
</span><del>-    JSString* string = jsCast&lt;JSString*&gt;(exec-&gt;uncheckedArgument(0));
</del><ins>+    JSString* string = asString(exec-&gt;uncheckedArgument(0));
</ins><span class="cx">     ASSERT(string-&gt;length() == 1);
</span><span class="cx"> 
</span><span class="cx">     JSValue repeatCountValue = exec-&gt;uncheckedArgument(1);
</span><span class="lines">@@ -1321,7 +1321,7 @@
</span><span class="cx">     JSString* jsString = 0;
</span><span class="cx">     String uString;
</span><span class="cx">     if (thisValue.isString()) {
</span><del>-        jsString = jsCast&lt;JSString*&gt;(thisValue.asCell());
</del><ins>+        jsString = asString(thisValue);
</ins><span class="cx">         len = jsString-&gt;length();
</span><span class="cx">     } else {
</span><span class="cx">         uString = thisValue.toWTFString(exec);
</span><span class="lines">@@ -1360,10 +1360,7 @@
</span><span class="cx">     // guarantee that we only pass it a string thisValue. As a result, stringProtoFuncSubstr
</span><span class="cx">     // will not need to call toString() on the thisValue, and there will be no observable
</span><span class="cx">     // side-effects.
</span><del>-#if !ASSERT_DISABLED
-    JSValue thisValue = exec-&gt;thisValue();
-    ASSERT(thisValue.isString());
-#endif
</del><ins>+    ASSERT(exec-&gt;thisValue().isString());
</ins><span class="cx">     return stringProtoFuncSubstr(exec);
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (209905 => 209906)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-12-16 04:40:49 UTC (rev 209905)
+++ trunk/Source/WebCore/ChangeLog        2016-12-16 04:52:20 UTC (rev 209906)
</span><span class="lines">@@ -1,3 +1,44 @@
</span><ins>+2016-12-15  Darin Adler  &lt;darin@apple.com&gt;
+
+        Use asString instead of toWTFString, toString, or getString when we already checked isString
+        https://bugs.webkit.org/show_bug.cgi?id=165895
+
+        Reviewed by Yusuke Suzuki.
+
+        * Modules/fetch/FetchBody.cpp:
+        (WebCore::FetchBody::extract): Use asString/value instead of toWTFString.
+
+        * Modules/mediastream/SDPProcessor.cpp:
+        (WebCore::SDPProcessor::callScript): Use asString/value instead of getString.
+
+        * bindings/js/ArrayValue.cpp:
+        (WebCore::ArrayValue::get): Use asString/value instead of toWTFString.
+
+        * bindings/js/IDBBindingUtilities.cpp:
+        (WebCore::get): Use asString/length instead of toString/length.
+        (WebCore::createIDBKeyFromValue): Use asString/value instead of toWTFString.
+        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
+        (WebCore::JSCryptoAlgorithmDictionary::getAlgorithmIdentifier): Ditto.
+        * bindings/js/JSDataCueCustom.cpp:
+        (WebCore::constructJSDataCue): Use asString/value instead of getString.
+        * bindings/js/JSInspectorFrontendHostCustom.cpp:
+        (WebCore::populateContextMenuItems): Use asString/value instead of toWTFString.
+
+        * bindings/js/ScriptController.cpp:
+        (WebCore::jsValueToModuleKey): Use asString/toIdentifier instead of
+        jsCast&lt;JSString*&gt;/value/Identifier::fromString.
+
+        * bindings/js/SerializedScriptValue.cpp:
+        (WebCore::CloneSerializer::dumpIfTerminal): Streamline by getting rid of local variable.
+
+        * contentextensions/ContentExtensionParser.cpp:
+        (WebCore::ContentExtensions::getDomainList): Use asString instead of jsCast&lt;JSString*&gt;.
+        (WebCore::ContentExtensions::loadTrigger): Use asString/value instead of toWTFString.
+        (WebCore::ContentExtensions::loadAction): Ditto.
+
+        * css/FontFace.cpp:
+        (WebCore::FontFace::create): Use asString/value instead of getString.
+
</ins><span class="cx"> 2016-12-15  Zalan Bujtas  &lt;zalan@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Change ::computeLogicalHeight's computedValues out argument to the return value.
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesfetchFetchBodycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/fetch/FetchBody.cpp (209905 => 209906)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/fetch/FetchBody.cpp        2016-12-16 04:40:49 UTC (rev 209905)
+++ trunk/Source/WebCore/Modules/fetch/FetchBody.cpp        2016-12-16 04:52:20 UTC (rev 209906)
</span><span class="lines">@@ -62,7 +62,7 @@
</span><span class="cx">     }
</span><span class="cx">     if (value.isString()) {
</span><span class="cx">         contentType = HTTPHeaderValues::textPlainContentType();
</span><del>-        return FetchBody(value.toWTFString(&amp;state));
</del><ins>+        return FetchBody(String { asString(value)-&gt;value(&amp;state) });
</ins><span class="cx">     }
</span><span class="cx">     if (value.inherits(JSURLSearchParams::info())) {
</span><span class="cx">         contentType = HTTPHeaderValues::formURLEncodedContentType();
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamSDPProcessorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/SDPProcessor.cpp (209905 => 209906)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/SDPProcessor.cpp        2016-12-16 04:40:49 UTC (rev 209905)
+++ trunk/Source/WebCore/Modules/mediastream/SDPProcessor.cpp        2016-12-16 04:52:20 UTC (rev 209906)
</span><span class="lines">@@ -538,7 +538,7 @@
</span><span class="cx">     if (!result.isString())
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><del>-    outResult = result.getString(exec);
</del><ins>+    outResult = asString(result)-&gt;value(exec);
</ins><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsArrayValuecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/ArrayValue.cpp (209905 => 209906)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/ArrayValue.cpp        2016-12-16 04:40:49 UTC (rev 209905)
+++ trunk/Source/WebCore/bindings/js/ArrayValue.cpp        2016-12-16 04:52:20 UTC (rev 209906)
</span><span class="lines">@@ -93,7 +93,7 @@
</span><span class="cx">     if (indexedValue.isUndefinedOrNull() || !indexedValue.isString())
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><del>-    value = indexedValue.toWTFString(m_exec);
</del><ins>+    value = asString(indexedValue)-&gt;value(m_exec);
</ins><span class="cx">     RETURN_IF_EXCEPTION(scope, false);
</span><span class="cx"> 
</span><span class="cx">     return true;
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsIDBBindingUtilitiescpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/IDBBindingUtilities.cpp (209905 => 209906)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/IDBBindingUtilities.cpp        2016-12-16 04:40:49 UTC (rev 209905)
+++ trunk/Source/WebCore/bindings/js/IDBBindingUtilities.cpp        2016-12-16 04:52:20 UTC (rev 209906)
</span><span class="lines">@@ -56,7 +56,7 @@
</span><span class="cx"> static bool get(ExecState&amp; exec, JSValue object, const String&amp; keyPathElement, JSValue&amp; result)
</span><span class="cx"> {
</span><span class="cx">     if (object.isString() &amp;&amp; keyPathElement == &quot;length&quot;) {
</span><del>-        result = jsNumber(object.toString(&amp;exec)-&gt;length());
</del><ins>+        result = jsNumber(asString(object)-&gt;length());
</ins><span class="cx">         return true;
</span><span class="cx">     }
</span><span class="cx">     if (!object.isObject())
</span><span class="lines">@@ -148,7 +148,7 @@
</span><span class="cx">         return IDBKey::createNumber(value.toNumber(&amp;exec));
</span><span class="cx"> 
</span><span class="cx">     if (value.isString())
</span><del>-        return IDBKey::createString(value.toWTFString(&amp;exec));
</del><ins>+        return IDBKey::createString(asString(value)-&gt;value(&amp;exec));
</ins><span class="cx"> 
</span><span class="cx">     if (value.inherits(DateInstance::info()) &amp;&amp; !std::isnan(valueToDate(&amp;exec, value)))
</span><span class="cx">         return IDBKey::createDate(valueToDate(&amp;exec, value));
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSCryptoAlgorithmDictionarycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSCryptoAlgorithmDictionary.cpp (209905 => 209906)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSCryptoAlgorithmDictionary.cpp        2016-12-16 04:40:49 UTC (rev 209905)
+++ trunk/Source/WebCore/bindings/js/JSCryptoAlgorithmDictionary.cpp        2016-12-16 04:52:20 UTC (rev 209906)
</span><span class="lines">@@ -66,7 +66,7 @@
</span><span class="cx">     String algorithmName;
</span><span class="cx"> 
</span><span class="cx">     if (value.isString()) {
</span><del>-        algorithmName = value.toWTFString(&amp;state);
</del><ins>+        algorithmName = asString(value)-&gt;value(&amp;state);
</ins><span class="cx">         RETURN_IF_EXCEPTION(scope, false);
</span><span class="cx">     } else if (value.isObject()) {
</span><span class="cx">         if (asObject(value)-&gt;inherits(StringObject::info())) {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSDataCueCustomcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSDataCueCustom.cpp (209905 => 209906)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSDataCueCustom.cpp        2016-12-16 04:40:49 UTC (rev 209905)
+++ trunk/Source/WebCore/bindings/js/JSDataCueCustom.cpp        2016-12-16 04:52:20 UTC (rev 209906)
</span><span class="lines">@@ -72,7 +72,7 @@
</span><span class="cx">     if (exec.argumentCount() &gt; 3) {
</span><span class="cx">         if (!exec.uncheckedArgument(3).isString())
</span><span class="cx">             return throwArgumentTypeError(exec, scope, 3, &quot;type&quot;, &quot;DataCue&quot;, nullptr, &quot;DOMString&quot;);
</span><del>-        type = exec.uncheckedArgument(3).getString(&amp;exec);
</del><ins>+        type = asString(exec.uncheckedArgument(3))-&gt;value(&amp;exec);
</ins><span class="cx">     }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSInspectorFrontendHostCustomcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSInspectorFrontendHostCustom.cpp (209905 => 209906)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSInspectorFrontendHostCustom.cpp        2016-12-16 04:40:49 UTC (rev 209905)
+++ trunk/Source/WebCore/bindings/js/JSInspectorFrontendHostCustom.cpp        2016-12-16 04:52:20 UTC (rev 209906)
</span><span class="lines">@@ -62,7 +62,7 @@
</span><span class="cx">         if (!type.isString())
</span><span class="cx">             continue;
</span><span class="cx"> 
</span><del>-        String typeString = type.toWTFString(exec);
</del><ins>+        String typeString = asString(type)-&gt;value(exec);
</ins><span class="cx">         if (typeString == &quot;separator&quot;) {
</span><span class="cx">             ContextMenuItem item(SeparatorType, ContextMenuItemTagNoAction, String());
</span><span class="cx">             menu.appendItem(item);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsScriptControllercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/ScriptController.cpp (209905 => 209906)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/ScriptController.cpp        2016-12-16 04:40:49 UTC (rev 209905)
+++ trunk/Source/WebCore/bindings/js/ScriptController.cpp        2016-12-16 04:52:20 UTC (rev 209906)
</span><span class="lines">@@ -355,7 +355,7 @@
</span><span class="cx">     if (value.isSymbol())
</span><span class="cx">         return Identifier::fromUid(jsCast&lt;Symbol*&gt;(value)-&gt;privateName());
</span><span class="cx">     ASSERT(value.isString());
</span><del>-    return Identifier::fromString(exec, jsCast&lt;JSString*&gt;(value)-&gt;value(exec));
</del><ins>+    return asString(value)-&gt;toIdentifier(exec);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void ScriptController::setupModuleScriptHandlers(CachedModuleScript&amp; moduleScriptRef, JSInternalPromise&amp; promise, DOMWrapperWorld&amp; world)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsSerializedScriptValuecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/SerializedScriptValue.cpp (209905 => 209906)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/SerializedScriptValue.cpp        2016-12-16 04:40:49 UTC (rev 209905)
+++ trunk/Source/WebCore/bindings/js/SerializedScriptValue.cpp        2016-12-16 04:52:20 UTC (rev 209906)
</span><span class="lines">@@ -749,8 +749,7 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         if (value.isString()) {
</span><del>-            String str = asString(value)-&gt;value(m_exec);
-            dumpString(str);
</del><ins>+            dumpString(asString(value)-&gt;value(m_exec));
</ins><span class="cx">             return true;
</span><span class="cx">         }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorecontentextensionsContentExtensionParsercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/contentextensions/ContentExtensionParser.cpp (209905 => 209906)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/contentextensions/ContentExtensionParser.cpp        2016-12-16 04:40:49 UTC (rev 209905)
+++ trunk/Source/WebCore/contentextensions/ContentExtensionParser.cpp        2016-12-16 04:52:20 UTC (rev 209906)
</span><span class="lines">@@ -75,7 +75,7 @@
</span><span class="cx">             return ContentExtensionError::JSONInvalidDomainList;
</span><span class="cx">         
</span><span class="cx">         // Domains should be punycode encoded lower case.
</span><del>-        const String&amp; domain = jsCast&lt;JSString*&gt;(value)-&gt;value(&amp;exec);
</del><ins>+        const String&amp; domain = asString(value)-&gt;value(&amp;exec);
</ins><span class="cx">         if (domain.isEmpty())
</span><span class="cx">             return ContentExtensionError::JSONInvalidDomainList;
</span><span class="cx">         if (!containsOnlyASCIIWithNoUppercase(domain))
</span><span class="lines">@@ -130,7 +130,7 @@
</span><span class="cx">     if (!urlFilterObject || scope.exception() || !urlFilterObject.isString())
</span><span class="cx">         return ContentExtensionError::JSONInvalidURLFilterInTrigger;
</span><span class="cx"> 
</span><del>-    String urlFilter = urlFilterObject.toWTFString(&amp;exec);
</del><ins>+    String urlFilter = asString(urlFilterObject)-&gt;value(&amp;exec);
</ins><span class="cx">     if (urlFilter.isEmpty())
</span><span class="cx">         return ContentExtensionError::JSONInvalidURLFilterInTrigger;
</span><span class="cx"> 
</span><span class="lines">@@ -207,7 +207,7 @@
</span><span class="cx">     if (!typeObject || scope.exception() || !typeObject.isString())
</span><span class="cx">         return ContentExtensionError::JSONInvalidActionType;
</span><span class="cx"> 
</span><del>-    String actionType = typeObject.toWTFString(&amp;exec);
</del><ins>+    String actionType = asString(typeObject)-&gt;value(&amp;exec);
</ins><span class="cx"> 
</span><span class="cx">     if (actionType == &quot;block&quot;)
</span><span class="cx">         action = ActionType::BlockLoad;
</span><span class="lines">@@ -220,13 +220,13 @@
</span><span class="cx">         if (!selector || scope.exception() || !selector.isString())
</span><span class="cx">             return ContentExtensionError::JSONInvalidCSSDisplayNoneActionType;
</span><span class="cx"> 
</span><del>-        String s = selector.toWTFString(&amp;exec);
-        if (!isValidSelector(s)) {
</del><ins>+        String selectorString = asString(selector)-&gt;value(&amp;exec);
+        if (!isValidSelector(selectorString)) {
</ins><span class="cx">             // Skip rules with invalid selectors to be backwards-compatible.
</span><span class="cx">             validSelector = false;
</span><span class="cx">             return { };
</span><span class="cx">         }
</span><del>-        action = Action(ActionType::CSSDisplayNoneSelector, s);
</del><ins>+        action = Action(ActionType::CSSDisplayNoneSelector, selectorString);
</ins><span class="cx">     } else if (actionType == &quot;make-https&quot;) {
</span><span class="cx">         action = ActionType::MakeHTTPS;
</span><span class="cx">     } else
</span></span></pre></div>
<a id="trunkSourceWebCorecssFontFacecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/FontFace.cpp (209905 => 209906)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/FontFace.cpp        2016-12-16 04:40:49 UTC (rev 209905)
+++ trunk/Source/WebCore/css/FontFace.cpp        2016-12-16 04:52:20 UTC (rev 209906)
</span><span class="lines">@@ -57,7 +57,7 @@
</span><span class="cx">         return setFamilyResult.releaseException();
</span><span class="cx"> 
</span><span class="cx">     if (source.isString()) {
</span><del>-        auto value = FontFace::parseString(source.getString(&amp;state), CSSPropertySrc);
</del><ins>+        auto value = FontFace::parseString(asString(source)-&gt;value(&amp;state), CSSPropertySrc);
</ins><span class="cx">         if (!is&lt;CSSValueList&gt;(value.get()))
</span><span class="cx">             return Exception { SYNTAX_ERR };
</span><span class="cx">         CSSFontFace::appendSources(result-&gt;backing(), downcast&lt;CSSValueList&gt;(*value), &amp;document, false);
</span></span></pre></div>
<a id="trunkSourceWebKitmacChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/ChangeLog (209905 => 209906)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/ChangeLog        2016-12-16 04:40:49 UTC (rev 209905)
+++ trunk/Source/WebKit/mac/ChangeLog        2016-12-16 04:52:20 UTC (rev 209906)
</span><span class="lines">@@ -1,3 +1,16 @@
</span><ins>+2016-12-15  Darin Adler  &lt;darin@apple.com&gt;
+
+        Use asString instead of toWTFString, toString, or getString when we already checked isString
+        https://bugs.webkit.org/show_bug.cgi?id=165895
+
+        Reviewed by Yusuke Suzuki.
+
+        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
+        (WebKit::NetscapePluginInstanceProxy::addValueToArray): Use asString/value instead of
+        toWTFString.
+        * WebView/WebView.mm:
+        (aeDescFromJSValue): Use asString/value instead of getString.
+
</ins><span class="cx"> 2016-12-15  Chris Dumez  &lt;cdumez@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Make sure HTML validation bubble's state is updated after layout
</span></span></pre></div>
<a id="trunkSourceWebKitmacPluginsHostedNetscapePluginInstanceProxymm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/Plugins/Hosted/NetscapePluginInstanceProxy.mm (209905 => 209906)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/Plugins/Hosted/NetscapePluginInstanceProxy.mm        2016-12-16 04:40:49 UTC (rev 209905)
+++ trunk/Source/WebKit/mac/Plugins/Hosted/NetscapePluginInstanceProxy.mm        2016-12-16 04:52:20 UTC (rev 209906)
</span><span class="lines">@@ -1320,7 +1320,7 @@
</span><span class="cx"> 
</span><span class="cx">     if (value.isString()) {
</span><span class="cx">         [array addObject:[NSNumber numberWithInt:StringValueType]];
</span><del>-        [array addObject:value.toWTFString(exec)];
</del><ins>+        [array addObject:asString(value)-&gt;value(exec)];
</ins><span class="cx">     } else if (value.isNumber()) {
</span><span class="cx">         [array addObject:[NSNumber numberWithInt:DoubleValueType]];
</span><span class="cx">         [array addObject:[NSNumber numberWithDouble:value.toNumber(exec)]];
</span></span></pre></div>
<a id="trunkSourceWebKitmacWebViewWebViewmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/WebView/WebView.mm (209905 => 209906)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/WebView/WebView.mm        2016-12-16 04:40:49 UTC (rev 209905)
+++ trunk/Source/WebKit/mac/WebView/WebView.mm        2016-12-16 04:52:20 UTC (rev 209906)
</span><span class="lines">@@ -7369,7 +7369,7 @@
</span><span class="cx">     if (jsValue.isBoolean())
</span><span class="cx">         return [NSAppleEventDescriptor descriptorWithBoolean:jsValue.asBoolean()];
</span><span class="cx">     if (jsValue.isString())
</span><del>-        return [NSAppleEventDescriptor descriptorWithString:jsValue.getString(exec)];
</del><ins>+        return [NSAppleEventDescriptor descriptorWithString:asString(jsValue)-&gt;value(exec)];
</ins><span class="cx">     if (jsValue.isNumber()) {
</span><span class="cx">         double value = jsValue.asNumber();
</span><span class="cx">         int intValue = value;
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (209905 => 209906)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2016-12-16 04:40:49 UTC (rev 209905)
+++ trunk/Source/WebKit2/ChangeLog        2016-12-16 04:52:20 UTC (rev 209906)
</span><span class="lines">@@ -1,3 +1,13 @@
</span><ins>+2016-12-15  Darin Adler  &lt;darin@apple.com&gt;
+
+        Use asString instead of toWTFString, toString, or getString when we already checked isString
+        https://bugs.webkit.org/show_bug.cgi?id=165895
+
+        Reviewed by Yusuke Suzuki.
+
+        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
+        (WebKit::NPRuntimeObjectMap::convertJSValueToNPVariant): Use asString/value instead of toWTFString.
+
</ins><span class="cx"> 2016-12-15  Chris Dumez  &lt;cdumez@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Make sure HTML validation bubble's state is updated after layout
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessPluginsNetscapeNPRuntimeObjectMapcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp (209905 => 209906)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp        2016-12-16 04:40:49 UTC (rev 209905)
+++ trunk/Source/WebKit2/WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp        2016-12-16 04:52:20 UTC (rev 209906)
</span><span class="lines">@@ -168,7 +168,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (value.isString()) {
</span><del>-        NPString npString = createNPString(value.toWTFString(exec).utf8());
</del><ins>+        NPString npString = createNPString(asString(value)-&gt;value(exec).utf8());
</ins><span class="cx">         STRINGN_TO_NPVARIANT(npString.UTF8Characters, npString.UTF8Length, variant);
</span><span class="cx">         return;
</span><span class="cx">     }
</span></span></pre>
</div>
</div>

</body>
</html>