Ignore:
Timestamp:
Aug 30, 2012, 2:23:51 PM (13 years ago)
Author:
[email protected]
Message:

Replace JSC::UString by WTF::String
https://bugs.webkit.org/show_bug.cgi?id=95271

Patch by Benjamin Poulain <[email protected]> on 2012-08-30
Reviewed by Geoffrey Garen.

Source/JavaScriptCore:

Having JSC::UString and WTF::String increase the complexity of working on WebKit, and
add useless conversions in the bindings. It also cause some code bloat.

The performance advantages of UString have been ported over in previous patches. This patch
is the last step: getting rid of UString.

In addition to the simplified code, this also reduce the binary size by 15kb on x86_64.

  • API/OpaqueJSString.cpp:

(OpaqueJSString::ustring):

  • runtime/Identifier.h:

(JSC::Identifier::ustring):
To avoid changing everything at once, the function named ustring() were kept as is. They
will be renamed in a follow up patch.

  • runtime/JSString.h:

(JSC::JSString::string):
(JSC::JSValue::toWTFString):
(JSC::inlineJSValueNotStringtoString):
(JSC::JSValue::toWTFStringInline):
Since JSValue::toString() already exist (and return the JSString), the direct accessor is renamed
to ::toWTFString(). We may change ::string() to ::jsString() and ::toWTFString() to ::toString()
in the future.

  • runtime/StringPrototype.cpp:

(JSC::substituteBackreferencesSlow): Replace the use of UString::getCharacters<>() by String::getCharactersWithUpconvert<>().

Source/WebCore:

Update the code to use String instead of UString.

On x86_64, this reduces the binary size by 22kb.

Since it is no longer possible to differenciate JSC::jsString() and WebCore::jsString() by the input
types, WebCore::jsString() is renated to WebCore::jsStringWithCache().

Since the cache is using a PtrHash, JSC::jsString() is used in place of the old WebCore::jsString() when
the string is generated locally. This is because the cache can never match in those cases.

Source/WebKit/blackberry:

Replace UString by String.

  • WebCoreSupport/ClientExtension.cpp:
  • WebCoreSupport/PagePopupBlackBerry.cpp:

(WebCore::PagePopupBlackBerry::installDomFunction):

Source/WebKit/efl:

Replace UString by String.

  • WebCoreSupport/DumpRenderTreeSupportEfl.cpp:

(DumpRenderTreeSupportEfl::sendWebIntentResponse):

  • ewk/ewk_frame.cpp:

(ewk_frame_script_execute):

Source/WebKit/gtk:

Replace UString by String.

  • gdom/ConvertToGCharPrivate.h:

(copyAsGchar):

Source/WebKit/mac:

Get rid of UString, replace it by String, and simplify the code when possible.

On x86_64, this reduces the binary size by 7kb.

  • Plugins/Hosted/NetscapePluginHostProxy.mm:

(identifierFromIdentifierRep):

  • Plugins/Hosted/NetscapePluginInstanceProxy.mm:

(WebKit::NetscapePluginInstanceProxy::addValueToArray):
(WebKit::NetscapePluginInstanceProxy::moveGlobalExceptionToExecState):

  • Plugins/Hosted/ProxyInstance.mm:

(WebKit::ProxyRuntimeMethod::create):
(WebKit::ProxyRuntimeMethod::finishCreation):
(WebKit::ProxyInstance::getPropertyNames):
(WebKit::ProxyInstance::methodsNamed):
(WebKit::ProxyInstance::fieldNamed):

  • WebView/WebFrame.mm:

(-[WebFrame _stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
(-[WebFrame _stringByEvaluatingJavaScriptFromString:withGlobalObject:inScriptWorld:]):

  • WebView/WebScriptDebugDelegate.mm:

(-[WebScriptCallFrame functionName]):
(-[WebScriptCallFrame evaluateWebScript:]):

  • WebView/WebScriptDebugger.h:

(WTF):
(JSC):
(WebScriptDebugger):

  • WebView/WebScriptDebugger.mm:

(toNSURL):
(WebScriptDebugger::sourceParsed):

  • WebView/WebView.mm:

(aeDescFromJSValue):

Source/WebKit/qt:

Replace UString by String.

  • Api/qwebelement.cpp:

(QWebElement::evaluateJavaScript):

Source/WebKit/win:

Replace UString by String.

  • WebFrame.cpp:

(WebFrame::stringByEvaluatingJavaScriptInScriptWorld):

  • WebView.cpp:

(WebView::stringByEvaluatingJavaScriptFromString):

Source/WebKit/wx:

Update the #includes to use the correct types.

  • WebFrame.cpp:
  • WebView.cpp:

Source/WebKit2:

Update to code to switch from UString to String.

  • WebProcess/Plugins/Netscape/JSNPMethod.cpp:

(WebKit::JSNPMethod::finishCreation):

  • WebProcess/Plugins/Netscape/JSNPMethod.h:

(WebKit::JSNPMethod::create):
(JSNPMethod):

  • WebProcess/Plugins/Netscape/JSNPObject.cpp:

(WebKit::npIdentifierFromIdentifier):

  • WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:

(WebKit::NPRuntimeObjectMap::evaluate):
(WebKit::NPRuntimeObjectMap::moveGlobalExceptionToExecState):

Source/WTF:

  • wtf/Platform.h: Useless edit to force a full build. This is needed for some bots for some reason.
  • wtf/text/WTFString.h: Export a symbol that was exported on UString and needed in WebCore.

Add String::getCharactersWithUpconvert<>(), which is similar to String::getCharacters<>() but with the same
behaviors as UString::getCharacters<>().

String::getCharactersWithUpconvert<>() is useful when manipulating multiple strings, it allow writting code
using 16bits characters if any of the input String is not 8bit.

Tools:

Get rid of UString.

  • DumpRenderTree/efl/WorkQueueItemEfl.cpp:
  • gdb/webkit.py:

(WTFStringPrinter.to_string):
(JSCIdentifierPrinter.to_string):
(JSCJSStringPrinter.to_string):
(add_pretty_printers):

Websites/webkit.org:

Update the coding style to avoid mentioning a class that no longer exist.

  • coding/coding-style.html:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp

    r113454 r127191  
    3535#include "Nodes.h"
    3636#include "Parser.h"
    37 #include "UStringBuilder.h"
    3837#include <wtf/dtoa.h>
    3938#include <stdio.h>
     
    4342#include <wtf/MathExtras.h>
    4443#include <wtf/StringExtras.h>
     44#include <wtf/text/StringBuilder.h>
    4545#include <wtf/unicode/UTF8.h>
    4646
     
    143143{
    144144    JSStringBuilder builder;
    145     UString str = exec->argument(0).toString(exec)->value(exec);
     145    String str = exec->argument(0).toString(exec)->value(exec);
    146146   
    147147    if (str.is8Bit())
     
    233233template <typename CharType>
    234234ALWAYS_INLINE
    235 static double parseInt(const UString& s, const CharType* data, int radix)
     235static double parseInt(const String& s, const CharType* data, int radix)
    236236{
    237237    // 1. Let inputString be ToString(string).
     
    314314}
    315315
    316 static double parseInt(const UString& s, int radix)
     316static double parseInt(const String& s, int radix)
    317317{
    318318    if (s.is8Bit())
     
    433433
    434434// See ecma-262 9.3.1
    435 double jsToNumber(const UString& s)
     435double jsToNumber(const String& s)
    436436{
    437437    unsigned size = s.length();
     
    451451}
    452452
    453 static double parseFloat(const UString& s)
     453static double parseFloat(const String& s)
    454454{
    455455    unsigned size = s.length();
     
    506506        return JSValue::encode(x);
    507507
    508     UString s = x.toString(exec)->value(exec);
     508    String s = x.toString(exec)->value(exec);
    509509
    510510    if (s.is8Bit()) {
     
    549549
    550550    // If ToString throws, we shouldn't call ToInt32.
    551     UString s = value.toString(exec)->value(exec);
     551    String s = value.toString(exec)->value(exec);
    552552    if (exec->hadException())
    553553        return JSValue::encode(jsUndefined());
     
    616616
    617617    JSStringBuilder builder;
    618     UString str = exec->argument(0).toString(exec)->value(exec);
     618    String str = exec->argument(0).toString(exec)->value(exec);
    619619    if (str.is8Bit()) {
    620620        const LChar* c = str.characters8();
     
    654654EncodedJSValue JSC_HOST_CALL globalFuncUnescape(ExecState* exec)
    655655{
    656     UStringBuilder builder;
    657     UString str = exec->argument(0).toString(exec)->value(exec);
     656    StringBuilder builder;
     657    String str = exec->argument(0).toString(exec)->value(exec);
    658658    int k = 0;
    659659    int len = str.length();
     
    700700    }
    701701
    702     return JSValue::encode(jsString(exec, builder.toUString()));
     702    return JSValue::encode(jsString(exec, builder.toString()));
    703703}
    704704
Note: See TracChangeset for help on using the changeset viewer.