<!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<JSString*>; 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<String*>.
(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<JSString*>.
(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<JSString*>.
(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<JSString*>/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<JSString*>.
(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 <darin@apple.com>
+
+ 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<JSString*>; 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<String*>.
+ (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<JSString*>.
+ (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<JSString*>.
+ (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 <keith_miller@apple.com>
</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() && value.isAnyInt())
</span><span class="cx"> return InspectorValue::create(static_cast<int>(value.asAnyInt()));
</span><span class="cx"> if (value.isString())
</span><del>- return InspectorValue::create(value.getString(&scriptState));
</del><ins>+ return InspectorValue::create(asString(value)->value(&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("InjectedScriptHost.evaluateWithScopeExtension first argument must be a string."));
</span><span class="cx">
</span><del>- String program = scriptValue.toWTFString(exec);
</del><ins>+ String program = asString(scriptValue)->value(exec);
</ins><span class="cx"> RETURN_IF_EXCEPTION(scope, JSValue());
</span><span class="cx">
</span><span class="cx"> NakedPtr<Exception> 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("JSJavaScriptCallFrame.evaluateWithScopeExtension first argument must be a string."));
</span><span class="cx">
</span><del>- String script = scriptValue.toWTFString(exec);
</del><ins>+ String script = asString(scriptValue)->value(exec);
</ins><span class="cx"> RETURN_IF_EXCEPTION(scope, JSValue());
</span><span class="cx">
</span><span class="cx"> NakedPtr<Exception> 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->cell;
</span><span class="cx"> if (cell->isString()) {
</span><del>- *resultString = cell->getString(nullptr);
</del><ins>+ *resultString = asString(cell)->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(&exec->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)->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->argument(0);
</span><span class="cx"> if (!argument.isString())
</span><span class="cx"> return JSValue::encode(jsBoolean(false));
</span><del>- const StringImpl* impl = jsCast<JSString*>(argument)->tryGetValueImpl();
</del><ins>+ const StringImpl* impl = asString(argument)->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<JSFunction*>(functionValue.asCell()->getObject()))->jsExecutable();
</span><span class="cx">
</span><span class="cx"> RELEASE_ASSERT(exec->argument(1).isString());
</span><del>- String substring = exec->argument(1).getString(exec);
</del><ins>+ String substring = asString(exec->argument(1))->value(exec);
</ins><span class="cx"> String sourceCodeText = executable->source().view().toString();
</span><span class="cx"> unsigned offset = static_cast<unsigned>(sourceCodeText.find(substring) + executable->source().startOffset());
</span><span class="cx">
</span><span class="lines">@@ -2320,7 +2318,7 @@
</span><span class="cx"> FunctionExecutable* executable = (jsDynamicCast<JSFunction*>(functionValue.asCell()->getObject()))->jsExecutable();
</span><span class="cx">
</span><span class="cx"> RELEASE_ASSERT(exec->argument(1).isString());
</span><del>- String substring = exec->argument(1).getString(exec);
</del><ins>+ String substring = asString(exec->argument(1))->value(exec);
</ins><span class="cx"> String sourceCodeText = executable->source().view().toString();
</span><span class="cx"> RELEASE_ASSERT(sourceCodeText.contains(substring));
</span><span class="cx"> int offset = sourceCodeText.find(substring) + executable->source().startOffset();
</span><span class="lines">@@ -2338,7 +2336,7 @@
</span><span class="cx"> FunctionExecutable* executable = (jsDynamicCast<JSFunction*>(functionValue.asCell()->getObject()))->jsExecutable();
</span><span class="cx">
</span><span class="cx"> RELEASE_ASSERT(exec->argument(1).isString());
</span><del>- String substring = exec->argument(1).getString(exec);
</del><ins>+ String substring = asString(exec->argument(1))->value(exec);
</ins><span class="cx"> String sourceCodeText = executable->source().view().toString();
</span><span class="cx"> RELEASE_ASSERT(sourceCodeText.contains(substring));
</span><span class="cx"> int offset = sourceCodeText.find(substring) + executable->source().startOffset();
</span><span class="lines">@@ -2403,7 +2401,7 @@
</span><span class="cx"> if (exec->argumentCount() < 1 || !exec->argument(0).isString())
</span><span class="cx"> return JSValue::encode(jsUndefined());
</span><span class="cx">
</span><del>- String functionText = exec->argument(0).toWTFString(exec);
</del><ins>+ String functionText = asString(exec->argument(0))->value(exec);
</ins><span class="cx"> RETURN_IF_EXCEPTION(scope, encodedJSValue());
</span><span class="cx">
</span><span class="cx"> const SourceCode& 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& vm, JSValue value, JSValue wasmValue)
</span><span class="cx"> {
</span><del>- JSString* type = jsCast<JSString*>(wasmValue.get(exec, makeIdentifier(vm, "type")));
</del><ins>+ JSString* type = asString(wasmValue.get(exec, makeIdentifier(vm, "type")));
</ins><span class="cx">
</span><span class="cx"> const String& typeString = type->value(exec);
</span><span class="cx"> if (typeString == "i64" || typeString == "i32")
</span><span class="lines">@@ -2523,7 +2521,7 @@
</span><span class="cx"> static JSValue box(ExecState* exec, VM& vm, JSValue wasmValue)
</span><span class="cx"> {
</span><span class="cx">
</span><del>- JSString* type = jsCast<JSString*>(wasmValue.get(exec, makeIdentifier(vm, "type")));
</del><ins>+ JSString* type = asString(wasmValue.get(exec, makeIdentifier(vm, "type")));
</ins><span class="cx"> JSValue value = wasmValue.get(exec, makeIdentifier(vm, "value"));
</span><span class="cx">
</span><span class="cx"> auto unboxString = [&] (const char* hexFormat, const char* decFormat, auto& 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<JSString*>(value)->value(exec)).data();
</del><ins>+ const char* str = toCString(asString(value)->value(exec)).data();
</ins><span class="cx"> int scanResult;
</span><span class="cx"> int length = std::strlen(str);
</span><span class="cx"> if ((length > 2 && (str[0] == '0' && 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)->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('"', asString(v)->value(exec), '"'));
</del><ins>+ return jsNontrivialString(exec, makeString('"', asString(v)->value(exec), '"'));
</ins><span class="cx"> if (v.isSymbol())
</span><span class="cx"> return jsNontrivialString(exec, asSymbol(v)->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, "We expect normalized values flowing into this function.");
</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& wtfString = string->value(exec);
</del><ins>+ auto scope = DECLARE_THROW_SCOPE(vm);
+ const String& wtfString = asString(value)->value(exec);
</ins><span class="cx"> RETURN_IF_EXCEPTION(scope, UINT_MAX);
</span><span class="cx"> return wtfString.impl()->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<uint32_t> 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->classInfo()->isSubClassOf(JSString::info())) {
</span><del>- JSString* string = jsCast<JSString*>(asCell());
</del><ins>+ JSString* string = asString(asCell());
</ins><span class="cx"> out.print("String");
</span><span class="cx"> if (string->isRope())
</span><span class="cx"> out.print(" (rope)");
</span><span class="lines">@@ -299,7 +299,7 @@
</span><span class="cx"> out.printf("%lf", asDouble());
</span><span class="cx"> else if (isCell()) {
</span><span class="cx"> if (asCell()->inherits(JSString::info())) {
</span><del>- JSString* string = jsCast<JSString*>(asCell());
</del><ins>+ JSString* string = asString(asCell());
</ins><span class="cx"> const StringImpl* impl = string->tryGetValueImpl();
</span><span class="cx"> if (impl)
</span><span class="cx"> out.print("\"", impl, "\"");
</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<JSString*>(value)->value(exec).impl();
</del><ins>+ StringImpl* hintString = asString(value)->value(exec).impl();
</ins><span class="cx"> RETURN_IF_EXCEPTION(scope, NoPreference);
</span><span class="cx">
</span><span class="cx"> if (WTF::equal(hintString, "default"))
</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)->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<JSString*>(cell);
- thisObject->JSString::~JSString();
</del><ins>+ static_cast<JSString*>(cell)->JSString::~JSString();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void JSString::dumpToStream(const JSCell* cell, PrintStream& 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<JSString*>(cell);
</del><ins>+ JSString* thisObject = asString(cell);
</ins><span class="cx"> if (thisObject->isRope())
</span><span class="cx"> return Base::estimatedSize(cell);
</span><span class="cx"> return Base::estimatedSize(cell) + thisObject->m_value.impl()->costDuringGC();
</span><span class="lines">@@ -92,7 +91,7 @@
</span><span class="cx">
</span><span class="cx"> void JSString::visitChildren(JSCell* cell, SlotVisitor& visitor)
</span><span class="cx"> {
</span><del>- JSString* thisObject = jsCast<JSString*>(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->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->vm(), exec->lexicalGlobalObject(), jsCast<JSString*>(cell));
</del><ins>+ return StringObject::create(exec->vm(), exec->lexicalGlobalObject(), asString(cell));
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> bool JSString::getStringPropertyDescriptor(ExecState* exec, PropertyName propertyName, PropertyDescriptor& 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<JSString*>(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<JSString*>(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->thisValue();
</span><span class="cx"> if (!toThisNumber(thisValue, x))
</span><del>- return throwVMTypeError(exec, scope, WTF::makeString("thisNumberValue called on incompatible ", jsCast<JSString*>(jsTypeStringForValue(exec, thisValue))->value(exec)));
</del><ins>+ return throwVMTypeError(exec, scope, WTF::makeString("thisNumberValue called on incompatible ", asString(jsTypeStringForValue(exec, thisValue))->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<JSString*>(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->argumentCount() == 2);
</span><span class="cx">
</span><span class="cx"> ASSERT(exec->uncheckedArgument(0).isString());
</span><del>- JSString* string = jsCast<JSString*>(exec->uncheckedArgument(0));
</del><ins>+ JSString* string = asString(exec->uncheckedArgument(0));
</ins><span class="cx"> ASSERT(string->length() == 1);
</span><span class="cx">
</span><span class="cx"> JSValue repeatCountValue = exec->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<JSString*>(thisValue.asCell());
</del><ins>+ jsString = asString(thisValue);
</ins><span class="cx"> len = jsString->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->thisValue();
- ASSERT(thisValue.isString());
-#endif
</del><ins>+ ASSERT(exec->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 <darin@apple.com>
+
+ 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<JSString*>/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<JSString*>.
+ (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 <zalan@apple.com>
</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(&state));
</del><ins>+ return FetchBody(String { asString(value)->value(&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)->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)->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& exec, JSValue object, const String& keyPathElement, JSValue& result)
</span><span class="cx"> {
</span><span class="cx"> if (object.isString() && keyPathElement == "length") {
</span><del>- result = jsNumber(object.toString(&exec)->length());
</del><ins>+ result = jsNumber(asString(object)->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(&exec));
</span><span class="cx">
</span><span class="cx"> if (value.isString())
</span><del>- return IDBKey::createString(value.toWTFString(&exec));
</del><ins>+ return IDBKey::createString(asString(value)->value(&exec));
</ins><span class="cx">
</span><span class="cx"> if (value.inherits(DateInstance::info()) && !std::isnan(valueToDate(&exec, value)))
</span><span class="cx"> return IDBKey::createDate(valueToDate(&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(&state);
</del><ins>+ algorithmName = asString(value)->value(&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)->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() > 3) {
</span><span class="cx"> if (!exec.uncheckedArgument(3).isString())
</span><span class="cx"> return throwArgumentTypeError(exec, scope, 3, "type", "DataCue", nullptr, "DOMString");
</span><del>- type = exec.uncheckedArgument(3).getString(&exec);
</del><ins>+ type = asString(exec.uncheckedArgument(3))->value(&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)->value(exec);
</ins><span class="cx"> if (typeString == "separator") {
</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<Symbol*>(value)->privateName());
</span><span class="cx"> ASSERT(value.isString());
</span><del>- return Identifier::fromString(exec, jsCast<JSString*>(value)->value(exec));
</del><ins>+ return asString(value)->toIdentifier(exec);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void ScriptController::setupModuleScriptHandlers(CachedModuleScript& moduleScriptRef, JSInternalPromise& promise, DOMWrapperWorld& 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)->value(m_exec);
- dumpString(str);
</del><ins>+ dumpString(asString(value)->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& domain = jsCast<JSString*>(value)->value(&exec);
</del><ins>+ const String& domain = asString(value)->value(&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(&exec);
</del><ins>+ String urlFilter = asString(urlFilterObject)->value(&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(&exec);
</del><ins>+ String actionType = asString(typeObject)->value(&exec);
</ins><span class="cx">
</span><span class="cx"> if (actionType == "block")
</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(&exec);
- if (!isValidSelector(s)) {
</del><ins>+ String selectorString = asString(selector)->value(&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 == "make-https") {
</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(&state), CSSPropertySrc);
</del><ins>+ auto value = FontFace::parseString(asString(source)->value(&state), CSSPropertySrc);
</ins><span class="cx"> if (!is<CSSValueList>(value.get()))
</span><span class="cx"> return Exception { SYNTAX_ERR };
</span><span class="cx"> CSSFontFace::appendSources(result->backing(), downcast<CSSValueList>(*value), &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 <darin@apple.com>
+
+ 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 <cdumez@apple.com>
</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)->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)->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 <darin@apple.com>
+
+ 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 <cdumez@apple.com>
</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)->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>