[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc

barraclough at apple.com barraclough at apple.com
Wed Dec 22 11:53:58 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit ee2085b210ed0e4c495f9c8fbfe57c4d7d5d995d
Author: barraclough at apple.com <barraclough at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Wed Aug 11 00:16:38 2010 +0000

    Bug 43817 - Remove UString::Rep
    UString::Rep has for a long time been replaced by UStringImpl (Rep
    remaining as a typedef).  UStringImpl has since been removed too
    (unified with StringImpl). Remove Rep, rename rep() to impl() and
    m_rep to m_impl.  Also add impl() method to Identifier, and rename
    its UString member from _ustring to m_string.
    
    Rubber stamped by Sam Weinig
    
    JavaScriptCore:
    
    * API/JSCallbackObject.h:
    (JSC::JSCallbackObjectData::JSPrivatePropertyMap::getPrivateProperty):
    (JSC::JSCallbackObjectData::JSPrivatePropertyMap::setPrivateProperty):
    (JSC::JSCallbackObjectData::JSPrivatePropertyMap::deletePrivateProperty):
    * API/JSCallbackObjectFunctions.h:
    (JSC::::getOwnPropertySlot):
    (JSC::::put):
    (JSC::::deleteProperty):
    (JSC::::getOwnPropertyNames):
    (JSC::::staticValueGetter):
    (JSC::::staticFunctionGetter):
    * API/JSClassRef.cpp:
    (tryCreateStringFromUTF8):
    (OpaqueJSClass::OpaqueJSClass):
    (OpaqueJSClass::~OpaqueJSClass):
    (OpaqueJSClassContextData::OpaqueJSClassContextData):
    * API/JSClassRef.h:
    * API/OpaqueJSString.cpp:
    (OpaqueJSString::ustring):
    * bytecode/EvalCodeCache.h:
    (JSC::EvalCodeCache::get):
    * bytecode/JumpTable.h:
    (JSC::StringJumpTable::offsetForValue):
    (JSC::StringJumpTable::ctiForValue):
    * bytecompiler/BytecodeGenerator.cpp:
    (JSC::BytecodeGenerator::addVar):
    (JSC::BytecodeGenerator::addGlobalVar):
    (JSC::BytecodeGenerator::BytecodeGenerator):
    (JSC::BytecodeGenerator::addParameter):
    (JSC::BytecodeGenerator::registerFor):
    (JSC::BytecodeGenerator::willResolveToArguments):
    (JSC::BytecodeGenerator::uncheckedRegisterForArguments):
    (JSC::BytecodeGenerator::constRegisterFor):
    (JSC::BytecodeGenerator::isLocal):
    (JSC::BytecodeGenerator::isLocalConstant):
    (JSC::BytecodeGenerator::addConstant):
    (JSC::BytecodeGenerator::emitLoad):
    (JSC::BytecodeGenerator::findScopedProperty):
    (JSC::keyForCharacterSwitch):
    (JSC::prepareJumpTableForStringSwitch):
    * bytecompiler/BytecodeGenerator.h:
    * bytecompiler/NodesCodegen.cpp:
    (JSC::processClauseList):
    * interpreter/Interpreter.cpp:
    (JSC::Interpreter::privateExecute):
    * jit/JITStubs.cpp:
    (JSC::DEFINE_STUB_FUNCTION):
    * parser/JSParser.cpp:
    (JSC::JSParser::parseStrictObjectLiteral):
    * pcre/pcre_exec.cpp:
    (Histogram::add):
    * profiler/CallIdentifier.h:
    (JSC::CallIdentifier::Hash::hash):
    * profiler/Profile.cpp:
    * profiler/ProfileNode.cpp:
    (JSC::ProfileNode::debugPrintDataSampleStyle):
    * profiler/ProfileNode.h:
    * runtime/ArrayPrototype.cpp:
    (JSC::arrayProtoFuncToString):
    * runtime/Identifier.cpp:
    (JSC::Identifier::equal):
    (JSC::IdentifierCStringTranslator::hash):
    (JSC::IdentifierCStringTranslator::equal):
    (JSC::IdentifierCStringTranslator::translate):
    (JSC::Identifier::add):
    (JSC::IdentifierUCharBufferTranslator::hash):
    (JSC::IdentifierUCharBufferTranslator::equal):
    (JSC::IdentifierUCharBufferTranslator::translate):
    (JSC::Identifier::addSlowCase):
    * runtime/Identifier.h:
    (JSC::Identifier::Identifier):
    (JSC::Identifier::ustring):
    (JSC::Identifier::impl):
    (JSC::Identifier::data):
    (JSC::Identifier::size):
    (JSC::Identifier::ascii):
    (JSC::Identifier::isNull):
    (JSC::Identifier::isEmpty):
    (JSC::Identifier::toUInt32):
    (JSC::Identifier::toStrictUInt32):
    (JSC::Identifier::toArrayIndex):
    (JSC::Identifier::toDouble):
    (JSC::Identifier::equal):
    (JSC::Identifier::add):
    * runtime/InitializeThreading.cpp:
    (JSC::initializeThreadingOnce):
    * runtime/InternalFunction.cpp:
    (JSC::InternalFunction::displayName):
    * runtime/JSFunction.cpp:
    (JSC::JSFunction::displayName):
    * runtime/JSGlobalObject.h:
    (JSC::JSGlobalObject::addStaticGlobals):
    * runtime/JSStaticScopeObject.h:
    (JSC::JSStaticScopeObject::JSStaticScopeObject):
    * runtime/JSString.h:
    (JSC::):
    (JSC::RopeBuilder::appendStringInConstruct):
    (JSC::RopeBuilder::appendValueInConstructAndIncrementLength):
    (JSC::jsSingleCharacterSubstring):
    (JSC::jsSubstring):
    * runtime/JSVariableObject.cpp:
    (JSC::JSVariableObject::deleteProperty):
    (JSC::JSVariableObject::symbolTableGet):
    * runtime/JSVariableObject.h:
    (JSC::JSVariableObject::symbolTableGet):
    (JSC::JSVariableObject::symbolTablePut):
    (JSC::JSVariableObject::symbolTablePutWithAttributes):
    * runtime/Lookup.cpp:
    (JSC::HashTable::createTable):
    (JSC::HashTable::deleteTable):
    * runtime/Lookup.h:
    (JSC::HashEntry::initialize):
    (JSC::HashEntry::setKey):
    (JSC::HashEntry::key):
    (JSC::HashTable::entry):
    * runtime/PropertyMapHashTable.h:
    (JSC::PropertyMapEntry::PropertyMapEntry):
    * runtime/PropertyNameArray.cpp:
    (JSC::PropertyNameArray::add):
    * runtime/PropertyNameArray.h:
    (JSC::PropertyNameArray::add):
    (JSC::PropertyNameArray::addKnownUnique):
    * runtime/RegExp.cpp:
    (JSC::RegExp::match):
    * runtime/RegExpCache.cpp:
    (JSC::RegExpCache::create):
    * runtime/RegExpKey.h:
    (JSC::RegExpKey::RegExpKey):
    * runtime/SmallStrings.cpp:
    (JSC::SmallStringsStorage::rep):
    (JSC::SmallStrings::singleCharacterStringRep):
    * runtime/SmallStrings.h:
    * runtime/StringPrototype.cpp:
    (JSC::jsSpliceSubstringsWithSeparators):
    (JSC::stringProtoFuncMatch):
    (JSC::stringProtoFuncSearch):
    * runtime/Structure.cpp:
    (JSC::Structure::~Structure):
    (JSC::Structure::despecifyDictionaryFunction):
    (JSC::Structure::addPropertyTransitionToExistingStructure):
    (JSC::Structure::addPropertyTransition):
    (JSC::Structure::copyPropertyTable):
    (JSC::Structure::get):
    (JSC::Structure::despecifyFunction):
    (JSC::Structure::put):
    (JSC::Structure::hasTransition):
    (JSC::Structure::remove):
    (JSC::Structure::checkConsistency):
    * runtime/Structure.h:
    (JSC::Structure::get):
    (JSC::Structure::hasTransition):
    * runtime/StructureTransitionTable.h:
    * runtime/SymbolTable.h:
    * runtime/UString.cpp:
    (JSC::UString::UString):
    (JSC::UString::toStrictUInt32):
    (JSC::UString::substr):
    * runtime/UString.h:
    (JSC::UString::UString):
    (JSC::UString::adopt):
    (JSC::UString::data):
    (JSC::UString::size):
    (JSC::UString::isNull):
    (JSC::UString::isEmpty):
    (JSC::UString::impl):
    (JSC::UString::cost):
    (JSC::operator==):
    (JSC::codePointCompare):
    (JSC::IdentifierRepHash::hash):
    (WTF::):
    
    WebCore:
    
    * bindings/js/JSDOMBinding.cpp:
    (WebCore::findAtomicString):
    * bindings/js/JSDOMBinding.h:
    (WebCore::ustringToString):
    (WebCore::identifierToString):
    (WebCore::ustringToAtomicString):
    (WebCore::identifierToAtomicString):
    * bindings/js/SerializedScriptValue.h:
    (WebCore::SerializedScriptValueData::SerializedScriptValueData):
    * bridge/IdentifierRep.cpp:
    (WebCore::IdentifierRep::get):
    * bridge/c/c_class.cpp:
    (JSC::Bindings::CClass::methodsNamed):
    (JSC::Bindings::CClass::fieldNamed):
    * bridge/jni/jsc/JavaClassJSC.cpp:
    (JavaClass::JavaClass):
    (JavaClass::methodsNamed):
    (JavaClass::fieldNamed):
    * bridge/jni/jsc/JavaStringJSC.h:
    (JSC::Bindings::JavaStringImpl::~JavaStringImpl):
    (JSC::Bindings::JavaStringImpl::init):
    (JSC::Bindings::JavaStringImpl::UTF8String):
    (JSC::Bindings::JavaStringImpl::uchars):
    (JSC::Bindings::JavaStringImpl::length):
    (JSC::Bindings::JavaStringImpl::uString):
    * bridge/jsc/BridgeJSC.h:
    
    WebKit/mac:
    
    * Plugins/Hosted/ProxyInstance.mm:
    (WebKit::ProxyInstance::methodsNamed):
    (WebKit::ProxyInstance::fieldNamed):
    
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@65104 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/JavaScriptCore/API/JSCallbackObject.h b/JavaScriptCore/API/JSCallbackObject.h
index cf42818..83442b2 100644
--- a/JavaScriptCore/API/JSCallbackObject.h
+++ b/JavaScriptCore/API/JSCallbackObject.h
@@ -80,7 +80,7 @@ struct JSCallbackObjectData {
     struct JSPrivatePropertyMap {
         JSValue getPrivateProperty(const Identifier& propertyName) const
         {
-            PrivatePropertyMap::const_iterator location = m_propertyMap.find(propertyName.ustring().rep());
+            PrivatePropertyMap::const_iterator location = m_propertyMap.find(propertyName.impl());
             if (location == m_propertyMap.end())
                 return JSValue();
             return location->second;
@@ -88,12 +88,12 @@ struct JSCallbackObjectData {
         
         void setPrivateProperty(const Identifier& propertyName, JSValue value)
         {
-            m_propertyMap.set(propertyName.ustring().rep(), value);
+            m_propertyMap.set(propertyName.impl(), value);
         }
         
         void deletePrivateProperty(const Identifier& propertyName)
         {
-            m_propertyMap.remove(propertyName.ustring().rep());
+            m_propertyMap.remove(propertyName.impl());
         }
 
         void markChildren(MarkStack& markStack)
@@ -105,7 +105,7 @@ struct JSCallbackObjectData {
         }
 
     private:
-        typedef HashMap<RefPtr<UString::Rep>, JSValue, IdentifierRepHash> PrivatePropertyMap;
+        typedef HashMap<RefPtr<StringImpl>, JSValue, IdentifierRepHash> PrivatePropertyMap;
         PrivatePropertyMap m_propertyMap;
     };
     OwnPtr<JSPrivatePropertyMap> m_privateProperties;
diff --git a/JavaScriptCore/API/JSCallbackObjectFunctions.h b/JavaScriptCore/API/JSCallbackObjectFunctions.h
index 9a3e448..de5d842 100644
--- a/JavaScriptCore/API/JSCallbackObjectFunctions.h
+++ b/JavaScriptCore/API/JSCallbackObjectFunctions.h
@@ -146,14 +146,14 @@ bool JSCallbackObject<Base>::getOwnPropertySlot(ExecState* exec, const Identifie
         }
         
         if (OpaqueJSClassStaticValuesTable* staticValues = jsClass->staticValues(exec)) {
-            if (staticValues->contains(propertyName.ustring().rep())) {
+            if (staticValues->contains(propertyName.impl())) {
                 slot.setCustom(this, staticValueGetter);
                 return true;
             }
         }
         
         if (OpaqueJSClassStaticFunctionsTable* staticFunctions = jsClass->staticFunctions(exec)) {
-            if (staticFunctions->contains(propertyName.ustring().rep())) {
+            if (staticFunctions->contains(propertyName.impl())) {
                 slot.setCustom(this, staticFunctionGetter);
                 return true;
             }
@@ -213,7 +213,7 @@ void JSCallbackObject<Base>::put(ExecState* exec, const Identifier& propertyName
         }
         
         if (OpaqueJSClassStaticValuesTable* staticValues = jsClass->staticValues(exec)) {
-            if (StaticValueEntry* entry = staticValues->get(propertyName.ustring().rep())) {
+            if (StaticValueEntry* entry = staticValues->get(propertyName.impl())) {
                 if (entry->attributes & kJSPropertyAttributeReadOnly)
                     return;
                 if (JSObjectSetPropertyCallback setProperty = entry->setProperty) {
@@ -235,7 +235,7 @@ void JSCallbackObject<Base>::put(ExecState* exec, const Identifier& propertyName
         }
         
         if (OpaqueJSClassStaticFunctionsTable* staticFunctions = jsClass->staticFunctions(exec)) {
-            if (StaticFunctionEntry* entry = staticFunctions->get(propertyName.ustring().rep())) {
+            if (StaticFunctionEntry* entry = staticFunctions->get(propertyName.impl())) {
                 if (entry->attributes & kJSPropertyAttributeReadOnly)
                     return;
                 JSCallbackObject<Base>::putDirect(propertyName, value); // put as override property
@@ -271,7 +271,7 @@ bool JSCallbackObject<Base>::deleteProperty(ExecState* exec, const Identifier& p
         }
         
         if (OpaqueJSClassStaticValuesTable* staticValues = jsClass->staticValues(exec)) {
-            if (StaticValueEntry* entry = staticValues->get(propertyName.ustring().rep())) {
+            if (StaticValueEntry* entry = staticValues->get(propertyName.impl())) {
                 if (entry->attributes & kJSPropertyAttributeDontDelete)
                     return false;
                 return true;
@@ -279,7 +279,7 @@ bool JSCallbackObject<Base>::deleteProperty(ExecState* exec, const Identifier& p
         }
         
         if (OpaqueJSClassStaticFunctionsTable* staticFunctions = jsClass->staticFunctions(exec)) {
-            if (StaticFunctionEntry* entry = staticFunctions->get(propertyName.ustring().rep())) {
+            if (StaticFunctionEntry* entry = staticFunctions->get(propertyName.impl())) {
                 if (entry->attributes & kJSPropertyAttributeDontDelete)
                     return false;
                 return true;
@@ -417,7 +417,7 @@ void JSCallbackObject<Base>::getOwnPropertyNames(ExecState* exec, PropertyNameAr
             typedef OpaqueJSClassStaticValuesTable::const_iterator iterator;
             iterator end = staticValues->end();
             for (iterator it = staticValues->begin(); it != end; ++it) {
-                UString::Rep* name = it->first.get();
+                StringImpl* name = it->first.get();
                 StaticValueEntry* entry = it->second;
                 if (entry->getProperty && (!(entry->attributes & kJSPropertyAttributeDontEnum) || (mode == IncludeDontEnumProperties)))
                     propertyNames.add(Identifier(exec, name));
@@ -428,7 +428,7 @@ void JSCallbackObject<Base>::getOwnPropertyNames(ExecState* exec, PropertyNameAr
             typedef OpaqueJSClassStaticFunctionsTable::const_iterator iterator;
             iterator end = staticFunctions->end();
             for (iterator it = staticFunctions->begin(); it != end; ++it) {
-                UString::Rep* name = it->first.get();
+                StringImpl* name = it->first.get();
                 StaticFunctionEntry* entry = it->second;
                 if (!(entry->attributes & kJSPropertyAttributeDontEnum) || (mode == IncludeDontEnumProperties))
                     propertyNames.add(Identifier(exec, name));
@@ -528,7 +528,7 @@ JSValue JSCallbackObject<Base>::staticValueGetter(ExecState* exec, JSValue slotB
     
     for (JSClassRef jsClass = thisObj->classRef(); jsClass; jsClass = jsClass->parentClass)
         if (OpaqueJSClassStaticValuesTable* staticValues = jsClass->staticValues(exec))
-            if (StaticValueEntry* entry = staticValues->get(propertyName.ustring().rep()))
+            if (StaticValueEntry* entry = staticValues->get(propertyName.impl()))
                 if (JSObjectGetPropertyCallback getProperty = entry->getProperty) {
                     if (!propertyNameRef)
                         propertyNameRef = OpaqueJSString::create(propertyName.ustring());
@@ -561,7 +561,7 @@ JSValue JSCallbackObject<Base>::staticFunctionGetter(ExecState* exec, JSValue sl
     
     for (JSClassRef jsClass = thisObj->classRef(); jsClass; jsClass = jsClass->parentClass) {
         if (OpaqueJSClassStaticFunctionsTable* staticFunctions = jsClass->staticFunctions(exec)) {
-            if (StaticFunctionEntry* entry = staticFunctions->get(propertyName.ustring().rep())) {
+            if (StaticFunctionEntry* entry = staticFunctions->get(propertyName.impl())) {
                 if (JSObjectCallAsFunctionCallback callAsFunction = entry->callAsFunction) {
                     
                     JSObject* o = new (exec) JSCallbackFunction(exec, asGlobalObject(thisObj->getAnonymousValue(0)), callAsFunction, propertyName);
diff --git a/JavaScriptCore/API/JSClassRef.cpp b/JavaScriptCore/API/JSClassRef.cpp
index ab2b31a..60d1bce 100644
--- a/JavaScriptCore/API/JSClassRef.cpp
+++ b/JavaScriptCore/API/JSClassRef.cpp
@@ -45,13 +45,13 @@ const JSClassDefinition kJSClassDefinitionEmpty = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
 static inline UString tryCreateStringFromUTF8(const char* string)
 {
     if (!string)
-        return UString::null();
+        return UString();
 
     size_t length = strlen(string);
     Vector<UChar, 1024> buffer(length);
     UChar* p = buffer.data();
     if (conversionOK != convertUTF8ToUTF16(&string, string + length, &p, p + length))
-        return UString::null();
+        return UString();
 
     return UString(buffer.data(), p - buffer.data());
 }
@@ -83,7 +83,7 @@ OpaqueJSClass::OpaqueJSClass(const JSClassDefinition* definition, OpaqueJSClass*
             if (!valueName.isNull()) {
                 // Use a local variable here to sidestep an RVCT compiler bug.
                 StaticValueEntry* entry = new StaticValueEntry(staticValue->getProperty, staticValue->setProperty, staticValue->attributes);
-                StringImpl* impl = valueName.rep();
+                StringImpl* impl = valueName.impl();
                 impl->ref();
                 m_staticValues->add(impl, entry);
             }
@@ -98,7 +98,7 @@ OpaqueJSClass::OpaqueJSClass(const JSClassDefinition* definition, OpaqueJSClass*
             if (!functionName.isNull()) {
                 // Use a local variable here to sidestep an RVCT compiler bug.
                 StaticFunctionEntry* entry = new StaticFunctionEntry(staticFunction->callAsFunction, staticFunction->attributes);
-                StringImpl* impl = functionName.rep();
+                StringImpl* impl = functionName.impl();
                 impl->ref();
                 m_staticFunctions->add(impl, entry);
             }
@@ -113,7 +113,7 @@ OpaqueJSClass::OpaqueJSClass(const JSClassDefinition* definition, OpaqueJSClass*
 OpaqueJSClass::~OpaqueJSClass()
 {
     // The empty string is shared across threads & is an identifier, in all other cases we should have done a deep copy in className(), below. 
-    ASSERT(!m_className.size() || !m_className.rep()->isIdentifier());
+    ASSERT(!m_className.size() || !m_className.impl()->isIdentifier());
 
     if (m_staticValues) {
         OpaqueJSClassStaticValuesTable::const_iterator end = m_staticValues->end();
@@ -173,7 +173,7 @@ OpaqueJSClassContextData::OpaqueJSClassContextData(OpaqueJSClass* jsClass)
             ASSERT(!it->first->isIdentifier());
             // Use a local variable here to sidestep an RVCT compiler bug.
             StaticValueEntry* entry = new StaticValueEntry(it->second->getProperty, it->second->setProperty, it->second->attributes);
-            staticValues->add(UString::Rep::create(it->first->characters(), it->first->length()), entry);
+            staticValues->add(StringImpl::create(it->first->characters(), it->first->length()), entry);
         }
     } else
         staticValues = 0;
@@ -185,7 +185,7 @@ OpaqueJSClassContextData::OpaqueJSClassContextData(OpaqueJSClass* jsClass)
             ASSERT(!it->first->isIdentifier());
             // Use a local variable here to sidestep an RVCT compiler bug.
             StaticFunctionEntry* entry = new StaticFunctionEntry(it->second->callAsFunction, it->second->attributes);
-            staticFunctions->add(UString::Rep::create(it->first->characters(), it->first->length()), entry);
+            staticFunctions->add(StringImpl::create(it->first->characters(), it->first->length()), entry);
         }
             
     } else
diff --git a/JavaScriptCore/API/JSClassRef.h b/JavaScriptCore/API/JSClassRef.h
index 5a3a17e..5062093 100644
--- a/JavaScriptCore/API/JSClassRef.h
+++ b/JavaScriptCore/API/JSClassRef.h
@@ -55,8 +55,8 @@ struct StaticFunctionEntry : FastAllocBase {
     JSPropertyAttributes attributes;
 };
 
-typedef HashMap<RefPtr<JSC::UString::Rep>, StaticValueEntry*> OpaqueJSClassStaticValuesTable;
-typedef HashMap<RefPtr<JSC::UString::Rep>, StaticFunctionEntry*> OpaqueJSClassStaticFunctionsTable;
+typedef HashMap<RefPtr<StringImpl>, StaticValueEntry*> OpaqueJSClassStaticValuesTable;
+typedef HashMap<RefPtr<StringImpl>, StaticFunctionEntry*> OpaqueJSClassStaticFunctionsTable;
 
 struct OpaqueJSClass;
 
diff --git a/JavaScriptCore/API/OpaqueJSString.cpp b/JavaScriptCore/API/OpaqueJSString.cpp
index f740abe..c14f343 100644
--- a/JavaScriptCore/API/OpaqueJSString.cpp
+++ b/JavaScriptCore/API/OpaqueJSString.cpp
@@ -43,7 +43,7 @@ UString OpaqueJSString::ustring() const
 {
     if (this && m_characters)
         return UString(m_characters, m_length);
-    return UString::null();
+    return UString();
 }
 
 Identifier OpaqueJSString::identifier(JSGlobalData* globalData) const
diff --git a/JavaScriptCore/ChangeLog b/JavaScriptCore/ChangeLog
index 6ab2602..4f5f015 100644
--- a/JavaScriptCore/ChangeLog
+++ b/JavaScriptCore/ChangeLog
@@ -1,5 +1,187 @@
 2010-08-10  Gavin Barraclough  <barraclough at apple.com>
 
+        Rubber stamped by Sam Weinig
+
+        Bug 43817 - Remove UString::Rep
+        UString::Rep has for a long time been replaced by UStringImpl (Rep
+        remaining as a typedef).  UStringImpl has since been removed too
+        (unified with StringImpl). Remove Rep, rename rep() to impl() and
+        m_rep to m_impl.  Also add impl() method to Identifier, and rename
+        its UString member from _ustring to m_string.
+
+        * API/JSCallbackObject.h:
+        (JSC::JSCallbackObjectData::JSPrivatePropertyMap::getPrivateProperty):
+        (JSC::JSCallbackObjectData::JSPrivatePropertyMap::setPrivateProperty):
+        (JSC::JSCallbackObjectData::JSPrivatePropertyMap::deletePrivateProperty):
+        * API/JSCallbackObjectFunctions.h:
+        (JSC::::getOwnPropertySlot):
+        (JSC::::put):
+        (JSC::::deleteProperty):
+        (JSC::::getOwnPropertyNames):
+        (JSC::::staticValueGetter):
+        (JSC::::staticFunctionGetter):
+        * API/JSClassRef.cpp:
+        (tryCreateStringFromUTF8):
+        (OpaqueJSClass::OpaqueJSClass):
+        (OpaqueJSClass::~OpaqueJSClass):
+        (OpaqueJSClassContextData::OpaqueJSClassContextData):
+        * API/JSClassRef.h:
+        * API/OpaqueJSString.cpp:
+        (OpaqueJSString::ustring):
+        * bytecode/EvalCodeCache.h:
+        (JSC::EvalCodeCache::get):
+        * bytecode/JumpTable.h:
+        (JSC::StringJumpTable::offsetForValue):
+        (JSC::StringJumpTable::ctiForValue):
+        * bytecompiler/BytecodeGenerator.cpp:
+        (JSC::BytecodeGenerator::addVar):
+        (JSC::BytecodeGenerator::addGlobalVar):
+        (JSC::BytecodeGenerator::BytecodeGenerator):
+        (JSC::BytecodeGenerator::addParameter):
+        (JSC::BytecodeGenerator::registerFor):
+        (JSC::BytecodeGenerator::willResolveToArguments):
+        (JSC::BytecodeGenerator::uncheckedRegisterForArguments):
+        (JSC::BytecodeGenerator::constRegisterFor):
+        (JSC::BytecodeGenerator::isLocal):
+        (JSC::BytecodeGenerator::isLocalConstant):
+        (JSC::BytecodeGenerator::addConstant):
+        (JSC::BytecodeGenerator::emitLoad):
+        (JSC::BytecodeGenerator::findScopedProperty):
+        (JSC::keyForCharacterSwitch):
+        (JSC::prepareJumpTableForStringSwitch):
+        * bytecompiler/BytecodeGenerator.h:
+        * bytecompiler/NodesCodegen.cpp:
+        (JSC::processClauseList):
+        * interpreter/Interpreter.cpp:
+        (JSC::Interpreter::privateExecute):
+        * jit/JITStubs.cpp:
+        (JSC::DEFINE_STUB_FUNCTION):
+        * parser/JSParser.cpp:
+        (JSC::JSParser::parseStrictObjectLiteral):
+        * pcre/pcre_exec.cpp:
+        (Histogram::add):
+        * profiler/CallIdentifier.h:
+        (JSC::CallIdentifier::Hash::hash):
+        * profiler/Profile.cpp:
+        * profiler/ProfileNode.cpp:
+        (JSC::ProfileNode::debugPrintDataSampleStyle):
+        * profiler/ProfileNode.h:
+        * runtime/ArrayPrototype.cpp:
+        (JSC::arrayProtoFuncToString):
+        * runtime/Identifier.cpp:
+        (JSC::Identifier::equal):
+        (JSC::IdentifierCStringTranslator::hash):
+        (JSC::IdentifierCStringTranslator::equal):
+        (JSC::IdentifierCStringTranslator::translate):
+        (JSC::Identifier::add):
+        (JSC::IdentifierUCharBufferTranslator::hash):
+        (JSC::IdentifierUCharBufferTranslator::equal):
+        (JSC::IdentifierUCharBufferTranslator::translate):
+        (JSC::Identifier::addSlowCase):
+        * runtime/Identifier.h:
+        (JSC::Identifier::Identifier):
+        (JSC::Identifier::ustring):
+        (JSC::Identifier::impl):
+        (JSC::Identifier::data):
+        (JSC::Identifier::size):
+        (JSC::Identifier::ascii):
+        (JSC::Identifier::isNull):
+        (JSC::Identifier::isEmpty):
+        (JSC::Identifier::toUInt32):
+        (JSC::Identifier::toStrictUInt32):
+        (JSC::Identifier::toArrayIndex):
+        (JSC::Identifier::toDouble):
+        (JSC::Identifier::equal):
+        (JSC::Identifier::add):
+        * runtime/InitializeThreading.cpp:
+        (JSC::initializeThreadingOnce):
+        * runtime/InternalFunction.cpp:
+        (JSC::InternalFunction::displayName):
+        * runtime/JSFunction.cpp:
+        (JSC::JSFunction::displayName):
+        * runtime/JSGlobalObject.h:
+        (JSC::JSGlobalObject::addStaticGlobals):
+        * runtime/JSStaticScopeObject.h:
+        (JSC::JSStaticScopeObject::JSStaticScopeObject):
+        * runtime/JSString.h:
+        (JSC::):
+        (JSC::RopeBuilder::appendStringInConstruct):
+        (JSC::RopeBuilder::appendValueInConstructAndIncrementLength):
+        (JSC::jsSingleCharacterSubstring):
+        (JSC::jsSubstring):
+        * runtime/JSVariableObject.cpp:
+        (JSC::JSVariableObject::deleteProperty):
+        (JSC::JSVariableObject::symbolTableGet):
+        * runtime/JSVariableObject.h:
+        (JSC::JSVariableObject::symbolTableGet):
+        (JSC::JSVariableObject::symbolTablePut):
+        (JSC::JSVariableObject::symbolTablePutWithAttributes):
+        * runtime/Lookup.cpp:
+        (JSC::HashTable::createTable):
+        (JSC::HashTable::deleteTable):
+        * runtime/Lookup.h:
+        (JSC::HashEntry::initialize):
+        (JSC::HashEntry::setKey):
+        (JSC::HashEntry::key):
+        (JSC::HashTable::entry):
+        * runtime/PropertyMapHashTable.h:
+        (JSC::PropertyMapEntry::PropertyMapEntry):
+        * runtime/PropertyNameArray.cpp:
+        (JSC::PropertyNameArray::add):
+        * runtime/PropertyNameArray.h:
+        (JSC::PropertyNameArray::add):
+        (JSC::PropertyNameArray::addKnownUnique):
+        * runtime/RegExp.cpp:
+        (JSC::RegExp::match):
+        * runtime/RegExpCache.cpp:
+        (JSC::RegExpCache::create):
+        * runtime/RegExpKey.h:
+        (JSC::RegExpKey::RegExpKey):
+        * runtime/SmallStrings.cpp:
+        (JSC::SmallStringsStorage::rep):
+        (JSC::SmallStrings::singleCharacterStringRep):
+        * runtime/SmallStrings.h:
+        * runtime/StringPrototype.cpp:
+        (JSC::jsSpliceSubstringsWithSeparators):
+        (JSC::stringProtoFuncMatch):
+        (JSC::stringProtoFuncSearch):
+        * runtime/Structure.cpp:
+        (JSC::Structure::~Structure):
+        (JSC::Structure::despecifyDictionaryFunction):
+        (JSC::Structure::addPropertyTransitionToExistingStructure):
+        (JSC::Structure::addPropertyTransition):
+        (JSC::Structure::copyPropertyTable):
+        (JSC::Structure::get):
+        (JSC::Structure::despecifyFunction):
+        (JSC::Structure::put):
+        (JSC::Structure::hasTransition):
+        (JSC::Structure::remove):
+        (JSC::Structure::checkConsistency):
+        * runtime/Structure.h:
+        (JSC::Structure::get):
+        (JSC::Structure::hasTransition):
+        * runtime/StructureTransitionTable.h:
+        * runtime/SymbolTable.h:
+        * runtime/UString.cpp:
+        (JSC::UString::UString):
+        (JSC::UString::toStrictUInt32):
+        (JSC::UString::substr):
+        * runtime/UString.h:
+        (JSC::UString::UString):
+        (JSC::UString::adopt):
+        (JSC::UString::data):
+        (JSC::UString::size):
+        (JSC::UString::isNull):
+        (JSC::UString::isEmpty):
+        (JSC::UString::impl):
+        (JSC::UString::cost):
+        (JSC::operator==):
+        (JSC::codePointCompare):
+        (JSC::IdentifierRepHash::hash):
+        (WTF::):
+
+2010-08-10  Gavin Barraclough  <barraclough at apple.com>
+
         Bug 43816 - Remove UStringImpl
         The class was actually removed a long time ago, replaced by StringImpl.
         UStringImpl is just a typedef onto StringImpl.  Remove this.
diff --git a/JavaScriptCore/bytecode/EvalCodeCache.h b/JavaScriptCore/bytecode/EvalCodeCache.h
index 27c479d..5607152 100644
--- a/JavaScriptCore/bytecode/EvalCodeCache.h
+++ b/JavaScriptCore/bytecode/EvalCodeCache.h
@@ -48,7 +48,7 @@ namespace JSC {
             RefPtr<EvalExecutable> evalExecutable;
 
             if (evalSource.size() < maxCacheableSourceLength && (*scopeChain->begin())->isVariableObject())
-                evalExecutable = m_cacheMap.get(evalSource.rep());
+                evalExecutable = m_cacheMap.get(evalSource.impl());
 
             if (!evalExecutable) {
                 evalExecutable = EvalExecutable::create(exec, makeSource(evalSource));
@@ -57,7 +57,7 @@ namespace JSC {
                     return 0;
 
                 if (evalSource.size() < maxCacheableSourceLength && (*scopeChain->begin())->isVariableObject() && m_cacheMap.size() < maxCacheEntries)
-                    m_cacheMap.set(evalSource.rep(), evalExecutable);
+                    m_cacheMap.set(evalSource.impl(), evalExecutable);
             }
 
             return evalExecutable.release();
@@ -69,7 +69,7 @@ namespace JSC {
         static const unsigned maxCacheableSourceLength = 256;
         static const int maxCacheEntries = 64;
 
-        typedef HashMap<RefPtr<UString::Rep>, RefPtr<EvalExecutable> > EvalCacheMap;
+        typedef HashMap<RefPtr<StringImpl>, RefPtr<EvalExecutable> > EvalCacheMap;
         EvalCacheMap m_cacheMap;
     };
 
diff --git a/JavaScriptCore/bytecode/JumpTable.h b/JavaScriptCore/bytecode/JumpTable.h
index b4f8e44..5bbe047 100644
--- a/JavaScriptCore/bytecode/JumpTable.h
+++ b/JavaScriptCore/bytecode/JumpTable.h
@@ -45,13 +45,13 @@ namespace JSC {
     };
 
     struct StringJumpTable {
-        typedef HashMap<RefPtr<UString::Rep>, OffsetLocation> StringOffsetTable;
+        typedef HashMap<RefPtr<StringImpl>, OffsetLocation> StringOffsetTable;
         StringOffsetTable offsetTable;
 #if ENABLE(JIT)
         CodeLocationLabel ctiDefault; // FIXME: it should not be necessary to store this.
 #endif
 
-        inline int32_t offsetForValue(UString::Rep* value, int32_t defaultOffset)
+        inline int32_t offsetForValue(StringImpl* value, int32_t defaultOffset)
         {
             StringOffsetTable::const_iterator end = offsetTable.end();
             StringOffsetTable::const_iterator loc = offsetTable.find(value);
@@ -61,7 +61,7 @@ namespace JSC {
         }
 
 #if ENABLE(JIT)
-        inline CodeLocationLabel ctiForValue(UString::Rep* value)
+        inline CodeLocationLabel ctiForValue(StringImpl* value)
         {
             StringOffsetTable::const_iterator end = offsetTable.end();
             StringOffsetTable::const_iterator loc = offsetTable.find(value);
diff --git a/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp b/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
index 34011c1..ab259a6 100644
--- a/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
+++ b/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
@@ -165,7 +165,7 @@ bool BytecodeGenerator::addVar(const Identifier& ident, bool isConstant, Registe
 {
     int index = m_calleeRegisters.size();
     SymbolTableEntry newEntry(index, isConstant ? ReadOnly : 0);
-    pair<SymbolTable::iterator, bool> result = symbolTable().add(ident.ustring().rep(), newEntry);
+    pair<SymbolTable::iterator, bool> result = symbolTable().add(ident.impl(), newEntry);
 
     if (!result.second) {
         r0 = &registerFor(result.first->second.getIndex());
@@ -180,7 +180,7 @@ bool BytecodeGenerator::addGlobalVar(const Identifier& ident, bool isConstant, R
 {
     int index = m_nextGlobalIndex;
     SymbolTableEntry newEntry(index, isConstant ? ReadOnly : 0);
-    pair<SymbolTable::iterator, bool> result = symbolTable().add(ident.ustring().rep(), newEntry);
+    pair<SymbolTable::iterator, bool> result = symbolTable().add(ident.impl(), newEntry);
 
     if (!result.second)
         index = result.first->second.getIndex();
@@ -350,7 +350,7 @@ BytecodeGenerator::BytecodeGenerator(FunctionBodyNode* functionBody, const Debug
     for (size_t i = 0; i < functionStack.size(); ++i) {
         FunctionBodyNode* function = functionStack[i];
         const Identifier& ident = function->ident();
-        m_functions.add(ident.ustring().rep());
+        m_functions.add(ident.impl());
         emitNewFunction(addVar(ident, false), function);
     }
 
@@ -437,7 +437,7 @@ BytecodeGenerator::BytecodeGenerator(EvalNode* evalNode, const Debugger* debugge
 void BytecodeGenerator::addParameter(const Identifier& ident, int parameterIndex)
 {
     // Parameters overwrite var declarations, but not function declarations.
-    UString::Rep* rep = ident.ustring().rep();
+    StringImpl* rep = ident.impl();
     if (!m_functions.contains(rep)) {
         symbolTable().set(rep, parameterIndex);
         RegisterID& parameter = registerFor(parameterIndex);
@@ -457,7 +457,7 @@ RegisterID* BytecodeGenerator::registerFor(const Identifier& ident)
     if (!shouldOptimizeLocals())
         return 0;
 
-    SymbolTableEntry entry = symbolTable().get(ident.ustring().rep());
+    SymbolTableEntry entry = symbolTable().get(ident.impl());
     if (entry.isNull())
         return 0;
 
@@ -475,7 +475,7 @@ bool BytecodeGenerator::willResolveToArguments(const Identifier& ident)
     if (!shouldOptimizeLocals())
         return false;
     
-    SymbolTableEntry entry = symbolTable().get(ident.ustring().rep());
+    SymbolTableEntry entry = symbolTable().get(ident.impl());
     if (entry.isNull())
         return false;
     
@@ -489,7 +489,7 @@ RegisterID* BytecodeGenerator::uncheckedRegisterForArguments()
 {
     ASSERT(willResolveToArguments(propertyNames().arguments));
 
-    SymbolTableEntry entry = symbolTable().get(propertyNames().arguments.ustring().rep());
+    SymbolTableEntry entry = symbolTable().get(propertyNames().arguments.impl());
     ASSERT(!entry.isNull());
     return &registerFor(entry.getIndex());
 }
@@ -499,7 +499,7 @@ RegisterID* BytecodeGenerator::constRegisterFor(const Identifier& ident)
     if (m_codeType == EvalCode)
         return 0;
 
-    SymbolTableEntry entry = symbolTable().get(ident.ustring().rep());
+    SymbolTableEntry entry = symbolTable().get(ident.impl());
     if (entry.isNull())
         return 0;
 
@@ -511,12 +511,12 @@ bool BytecodeGenerator::isLocal(const Identifier& ident)
     if (ident == propertyNames().thisIdentifier)
         return true;
     
-    return shouldOptimizeLocals() && symbolTable().contains(ident.ustring().rep());
+    return shouldOptimizeLocals() && symbolTable().contains(ident.impl());
 }
 
 bool BytecodeGenerator::isLocalConstant(const Identifier& ident)
 {
-    return symbolTable().get(ident.ustring().rep()).isReadOnly();
+    return symbolTable().get(ident.impl()).isReadOnly();
 }
 
 RegisterID* BytecodeGenerator::newRegister()
@@ -829,7 +829,7 @@ PassRefPtr<Label> BytecodeGenerator::emitJumpIfNotFunctionApply(RegisterID* cond
 
 unsigned BytecodeGenerator::addConstant(const Identifier& ident)
 {
-    UString::Rep* rep = ident.ustring().rep();
+    StringImpl* rep = ident.impl();
     pair<IdentifierMap::iterator, bool> result = m_identifierMap.add(rep, m_codeBlock->numberOfIdentifiers());
     if (result.second) // new entry
         m_codeBlock->addIdentifier(Identifier(m_globalData, rep));
@@ -1001,7 +1001,7 @@ RegisterID* BytecodeGenerator::emitLoad(RegisterID* dst, double number)
 
 RegisterID* BytecodeGenerator::emitLoad(RegisterID* dst, const Identifier& identifier)
 {
-    JSString*& stringInMap = m_stringMap.add(identifier.ustring().rep(), 0).first->second;
+    JSString*& stringInMap = m_stringMap.add(identifier.impl(), 0).first->second;
     if (!stringInMap)
         stringInMap = jsOwnedString(globalData(), identifier.ustring());
     return emitLoad(dst, JSValue(stringInMap));
@@ -1039,7 +1039,7 @@ bool BytecodeGenerator::findScopedProperty(const Identifier& property, int& inde
         if (!currentScope->isVariableObject())
             break;
         JSVariableObject* currentVariableObject = static_cast<JSVariableObject*>(currentScope);
-        SymbolTableEntry entry = currentVariableObject->symbolTable().get(property.ustring().rep());
+        SymbolTableEntry entry = currentVariableObject->symbolTable().get(property.impl());
 
         // Found the property
         if (!entry.isNull()) {
@@ -1974,7 +1974,7 @@ static int32_t keyForCharacterSwitch(ExpressionNode* node, int32_t min, int32_t
 {
     UNUSED_PARAM(max);
     ASSERT(node->isString());
-    UString::Rep* clause = static_cast<StringNode*>(node)->value().ustring().rep();
+    StringImpl* clause = static_cast<StringNode*>(node)->value().impl();
     ASSERT(clause->length() == 1);
     
     int32_t key = clause->characters()[0];
@@ -2004,7 +2004,7 @@ static void prepareJumpTableForStringSwitch(StringJumpTable& jumpTable, int32_t
         ASSERT(!labels[i]->isForward());
         
         ASSERT(nodes[i]->isString());
-        UString::Rep* clause = static_cast<StringNode*>(nodes[i])->value().ustring().rep();
+        StringImpl* clause = static_cast<StringNode*>(nodes[i])->value().impl();
         OffsetLocation location;
         location.branchOffset = labels[i]->bind(switchAddress, switchAddress + 3);
         jumpTable.offsetTable.add(clause, location);
diff --git a/JavaScriptCore/bytecompiler/BytecodeGenerator.h b/JavaScriptCore/bytecompiler/BytecodeGenerator.h
index f855d12..f7bd0bf 100644
--- a/JavaScriptCore/bytecompiler/BytecodeGenerator.h
+++ b/JavaScriptCore/bytecompiler/BytecodeGenerator.h
@@ -436,9 +436,9 @@ namespace JSC {
             static const bool needsRef = false;
         };
 
-        typedef HashMap<RefPtr<UString::Rep>, int, IdentifierRepHash, HashTraits<RefPtr<UString::Rep> >, IdentifierMapIndexHashTraits> IdentifierMap;
+        typedef HashMap<RefPtr<StringImpl>, int, IdentifierRepHash, HashTraits<RefPtr<StringImpl> >, IdentifierMapIndexHashTraits> IdentifierMap;
         typedef HashMap<double, JSValue> NumberMap;
-        typedef HashMap<UString::Rep*, JSString*, IdentifierRepHash> IdentifierStringMap;
+        typedef HashMap<StringImpl*, JSString*, IdentifierRepHash> IdentifierStringMap;
         
         RegisterID* emitCall(OpcodeID, RegisterID* dst, RegisterID* func, CallArguments&, unsigned divot, unsigned startOffset, unsigned endOffset);
         
@@ -524,7 +524,7 @@ namespace JSC {
 
         // Some of these objects keep pointers to one another. They are arranged
         // to ensure a sane destruction order that avoids references to freed memory.
-        HashSet<RefPtr<UString::Rep>, IdentifierRepHash> m_functions;
+        HashSet<RefPtr<StringImpl>, IdentifierRepHash> m_functions;
         RegisterID m_ignoredResultRegister;
         RegisterID m_thisRegister;
         RegisterID* m_activationRegister;
diff --git a/JavaScriptCore/bytecompiler/NodesCodegen.cpp b/JavaScriptCore/bytecompiler/NodesCodegen.cpp
index 277562d..6c28746 100644
--- a/JavaScriptCore/bytecompiler/NodesCodegen.cpp
+++ b/JavaScriptCore/bytecompiler/NodesCodegen.cpp
@@ -1748,7 +1748,7 @@ static void processClauseList(ClauseListNode* list, Vector<ExpressionNode*, 8>&
             }
             const UString& value = static_cast<StringNode*>(clauseExpression)->value().ustring();
             if (singleCharacterSwitch &= value.size() == 1) {
-                int32_t intVal = value.rep()->characters()[0];
+                int32_t intVal = value.impl()->characters()[0];
                 if (intVal < min_num)
                     min_num = intVal;
                 if (intVal > max_num)
diff --git a/JavaScriptCore/interpreter/Interpreter.cpp b/JavaScriptCore/interpreter/Interpreter.cpp
index e7ae540..b1049ad 100644
--- a/JavaScriptCore/interpreter/Interpreter.cpp
+++ b/JavaScriptCore/interpreter/Interpreter.cpp
@@ -3574,7 +3574,7 @@ skip_id_custom_self:
         if (!scrutinee.isString())
             vPC += defaultOffset;
         else {
-            UString::Rep* value = asString(scrutinee)->value(callFrame).rep();
+            StringImpl* value = asString(scrutinee)->value(callFrame).impl();
             if (value->length() != 1)
                 vPC += defaultOffset;
             else
@@ -3597,7 +3597,7 @@ skip_id_custom_self:
         if (!scrutinee.isString())
             vPC += defaultOffset;
         else 
-            vPC += codeBlock->stringSwitchJumpTable(tableIndex).offsetForValue(asString(scrutinee)->value(callFrame).rep(), defaultOffset);
+            vPC += codeBlock->stringSwitchJumpTable(tableIndex).offsetForValue(asString(scrutinee)->value(callFrame).impl(), defaultOffset);
         NEXT_INSTRUCTION();
     }
     DEFINE_OPCODE(op_new_func) {
diff --git a/JavaScriptCore/jit/JITStubs.cpp b/JavaScriptCore/jit/JITStubs.cpp
index c4ff0ca..c5dcd41 100644
--- a/JavaScriptCore/jit/JITStubs.cpp
+++ b/JavaScriptCore/jit/JITStubs.cpp
@@ -3362,7 +3362,7 @@ DEFINE_STUB_FUNCTION(void*, op_switch_char)
     void* result = codeBlock->characterSwitchJumpTable(tableIndex).ctiDefault.executableAddress();
 
     if (scrutinee.isString()) {
-        UString::Rep* value = asString(scrutinee)->value(callFrame).rep();
+        StringImpl* value = asString(scrutinee)->value(callFrame).impl();
         if (value->length() == 1)
             result = codeBlock->characterSwitchJumpTable(tableIndex).ctiForValue(value->characters()[0]).executableAddress();
     }
@@ -3383,7 +3383,7 @@ DEFINE_STUB_FUNCTION(void*, op_switch_string)
     void* result = codeBlock->stringSwitchJumpTable(tableIndex).ctiDefault.executableAddress();
 
     if (scrutinee.isString()) {
-        UString::Rep* value = asString(scrutinee)->value(callFrame).rep();
+        StringImpl* value = asString(scrutinee)->value(callFrame).impl();
         result = codeBlock->stringSwitchJumpTable(tableIndex).ctiForValue(value).executableAddress();
     }
 
diff --git a/JavaScriptCore/parser/JSParser.cpp b/JavaScriptCore/parser/JSParser.cpp
index 13013c7..3baceba 100644
--- a/JavaScriptCore/parser/JSParser.cpp
+++ b/JavaScriptCore/parser/JSParser.cpp
@@ -1186,11 +1186,11 @@ template <class TreeBuilder> TreeExpression JSParser::parseStrictObjectLiteral(T
     TreeProperty property = parseProperty<true>(context);
     failIfFalse(property);
     
-    typedef HashMap<RefPtr<UString::Rep>, unsigned, IdentifierRepHash> ObjectValidationMap;
+    typedef HashMap<RefPtr<StringImpl>, unsigned, IdentifierRepHash> ObjectValidationMap;
     ObjectValidationMap objectValidator;
     // Add the first property
     if (!m_syntaxAlreadyValidated)
-        objectValidator.add(context.getName(property).ustring().rep(), context.getType(property));
+        objectValidator.add(context.getName(property).impl(), context.getType(property));
     
     TreePropertyList propertyList = context.createPropertyList(property);
     TreePropertyList tail = propertyList;
@@ -1202,7 +1202,7 @@ template <class TreeBuilder> TreeExpression JSParser::parseStrictObjectLiteral(T
         property = parseProperty<true>(context);
         failIfFalse(property);
         if (!m_syntaxAlreadyValidated) {
-            std::pair<ObjectValidationMap::iterator, bool> propertyEntryIter = objectValidator.add(context.getName(property).ustring().rep(), context.getType(property));
+            std::pair<ObjectValidationMap::iterator, bool> propertyEntryIter = objectValidator.add(context.getName(property).impl(), context.getType(property));
             if (!propertyEntryIter.second) {
                 if ((context.getType(property) & propertyEntryIter.first->second) != PropertyNode::Constant) {
                     // Can't have multiple getters or setters with the same name, nor can we define 
diff --git a/JavaScriptCore/pcre/pcre_exec.cpp b/JavaScriptCore/pcre/pcre_exec.cpp
index 994ec57..098302b 100644
--- a/JavaScriptCore/pcre/pcre_exec.cpp
+++ b/JavaScriptCore/pcre/pcre_exec.cpp
@@ -88,7 +88,7 @@ public:
     void add(const JSRegExp*, double);
 
 private:
-    typedef HashMap<RefPtr<UString::Rep>, double> Map;
+    typedef HashMap<RefPtr<StringImpl>, double> Map;
     Map times;
 };
 
@@ -2157,7 +2157,7 @@ void Histogram::add(const JSRegExp* re, double elapsedTime)
         if (re->options & MatchAcrossMultipleLinesOption)
             string += " (multi-line)";
     }
-    pair<Map::iterator, bool> result = times.add(string.rep(), elapsedTime);
+    pair<Map::iterator, bool> result = times.add(string.impl(), elapsedTime);
     if (!result.second)
         result.first->second += elapsedTime;
 }
diff --git a/JavaScriptCore/profiler/CallIdentifier.h b/JavaScriptCore/profiler/CallIdentifier.h
index f2d04fc..cfdef18 100644
--- a/JavaScriptCore/profiler/CallIdentifier.h
+++ b/JavaScriptCore/profiler/CallIdentifier.h
@@ -56,11 +56,11 @@ namespace JSC {
             static unsigned hash(const CallIdentifier& key)
             {
                 unsigned hashCodes[3] = {
-                    key.m_name.rep()->hash(),
-                    key.m_url.rep()->hash(),
+                    key.m_name.impl()->hash(),
+                    key.m_url.impl()->hash(),
                     key.m_lineNumber
                 };
-                return UString::Rep::computeHash(reinterpret_cast<char*>(hashCodes), sizeof(hashCodes));
+                return StringImpl::computeHash(reinterpret_cast<char*>(hashCodes), sizeof(hashCodes));
             }
 
             static bool equal(const CallIdentifier& a, const CallIdentifier& b) { return a == b; }
diff --git a/JavaScriptCore/profiler/Profile.cpp b/JavaScriptCore/profiler/Profile.cpp
index 126e6f6..94b9fbc 100644
--- a/JavaScriptCore/profiler/Profile.cpp
+++ b/JavaScriptCore/profiler/Profile.cpp
@@ -106,7 +106,7 @@ void Profile::debugPrintData() const
     m_head->debugPrintData(0);
 }
 
-typedef pair<UString::Rep*, unsigned> NameCountPair;
+typedef pair<StringImpl*, unsigned> NameCountPair;
 
 static inline bool functionNameCountPairComparator(const NameCountPair& a, const NameCountPair& b)
 {
diff --git a/JavaScriptCore/profiler/ProfileNode.cpp b/JavaScriptCore/profiler/ProfileNode.cpp
index 1391f99..969cda8 100644
--- a/JavaScriptCore/profiler/ProfileNode.cpp
+++ b/JavaScriptCore/profiler/ProfileNode.cpp
@@ -319,7 +319,7 @@ double ProfileNode::debugPrintDataSampleStyle(int indentLevel, FunctionCallHashC
         for (int i = 0; i < indentLevel; ++i)
             printf("  ");
 
-         countedFunctions.add(functionName().rep());
+         countedFunctions.add(functionName().impl());
 
         printf("%.0f %s\n", sampleCount ? sampleCount : 1, name);
     } else
diff --git a/JavaScriptCore/profiler/ProfileNode.h b/JavaScriptCore/profiler/ProfileNode.h
index 2b5a936..c2c3c02 100644
--- a/JavaScriptCore/profiler/ProfileNode.h
+++ b/JavaScriptCore/profiler/ProfileNode.h
@@ -39,7 +39,7 @@ namespace JSC {
     class ProfileNode;
 
     typedef Vector<RefPtr<ProfileNode> >::const_iterator StackIterator;
-    typedef HashCountedSet<UString::Rep*> FunctionCallHashCount;
+    typedef HashCountedSet<StringImpl*> FunctionCallHashCount;
 
     class ProfileNode : public RefCounted<ProfileNode> {
     public:
diff --git a/JavaScriptCore/runtime/ArrayPrototype.cpp b/JavaScriptCore/runtime/ArrayPrototype.cpp
index fa6eb99..9d49eeb 100644
--- a/JavaScriptCore/runtime/ArrayPrototype.cpp
+++ b/JavaScriptCore/runtime/ArrayPrototype.cpp
@@ -166,7 +166,7 @@ EncodedJSValue JSC_HOST_CALL arrayProtoFuncToString(ExecState* exec)
 
     unsigned length = thisObj->get(exec, exec->propertyNames().length).toUInt32(exec);
     unsigned totalSize = length ? length - 1 : 0;
-    Vector<RefPtr<UString::Rep>, 256> strBuffer(length);
+    Vector<RefPtr<StringImpl>, 256> strBuffer(length);
     for (unsigned k = 0; k < length; k++) {
         JSValue element;
         if (isRealArray && thisObj->canGetIndex(k))
@@ -178,7 +178,7 @@ EncodedJSValue JSC_HOST_CALL arrayProtoFuncToString(ExecState* exec)
             continue;
         
         UString str = element.toString(exec);
-        strBuffer[k] = str.rep();
+        strBuffer[k] = str.impl();
         totalSize += str.size();
         
         if (!strBuffer.data()) {
@@ -199,7 +199,7 @@ EncodedJSValue JSC_HOST_CALL arrayProtoFuncToString(ExecState* exec)
     for (unsigned i = 0; i < length; i++) {
         if (i)
             buffer.append(',');
-        if (RefPtr<UString::Rep> rep = strBuffer[i])
+        if (RefPtr<StringImpl> rep = strBuffer[i])
             buffer.append(rep->characters(), rep->length());
     }
     ASSERT(buffer.size() == totalSize);
diff --git a/JavaScriptCore/runtime/Identifier.cpp b/JavaScriptCore/runtime/Identifier.cpp
index 46772d0..472af70 100644
--- a/JavaScriptCore/runtime/Identifier.cpp
+++ b/JavaScriptCore/runtime/Identifier.cpp
@@ -65,7 +65,7 @@ void deleteIdentifierTable(IdentifierTable* table)
     delete table;
 }
 
-bool Identifier::equal(const UString::Rep* r, const char* s)
+bool Identifier::equal(const StringImpl* r, const char* s)
 {
     int length = r->length();
     const UChar* d = r->characters();
@@ -75,7 +75,7 @@ bool Identifier::equal(const UString::Rep* r, const char* s)
     return s[length] == 0;
 }
 
-bool Identifier::equal(const UString::Rep* r, const UChar* s, unsigned length)
+bool Identifier::equal(const StringImpl* r, const UChar* s, unsigned length)
 {
     if (r->length() != length)
         return false;
@@ -89,19 +89,19 @@ bool Identifier::equal(const UString::Rep* r, const UChar* s, unsigned length)
 struct IdentifierCStringTranslator {
     static unsigned hash(const char* c)
     {
-        return UString::Rep::computeHash(c);
+        return StringImpl::computeHash(c);
     }
 
-    static bool equal(UString::Rep* r, const char* s)
+    static bool equal(StringImpl* r, const char* s)
     {
         return Identifier::equal(r, s);
     }
 
-    static void translate(UString::Rep*& location, const char* c, unsigned hash)
+    static void translate(StringImpl*& location, const char* c, unsigned hash)
     {
         size_t length = strlen(c);
         UChar* d;
-        UString::Rep* r = UString::Rep::createUninitialized(length, d).releaseRef();
+        StringImpl* r = StringImpl::createUninitialized(length, d).releaseRef();
         for (size_t i = 0; i != length; i++)
             d[i] = static_cast<unsigned char>(c[i]); // use unsigned char to zero-extend instead of sign-extend
         r->setHash(hash);
@@ -109,12 +109,12 @@ struct IdentifierCStringTranslator {
     }
 };
 
-PassRefPtr<UString::Rep> Identifier::add(JSGlobalData* globalData, const char* c)
+PassRefPtr<StringImpl> Identifier::add(JSGlobalData* globalData, const char* c)
 {
     if (!c)
-        return UString::null().rep();
+        return 0;
     if (!c[0])
-        return UString::Rep::empty();
+        return StringImpl::empty();
     if (!c[1])
         return add(globalData, globalData->smallStrings.singleCharacterStringRep(static_cast<unsigned char>(c[0])));
 
@@ -125,18 +125,18 @@ PassRefPtr<UString::Rep> Identifier::add(JSGlobalData* globalData, const char* c
     if (iter != literalIdentifierTable.end())
         return iter->second;
 
-    pair<HashSet<UString::Rep*>::iterator, bool> addResult = identifierTable.add<const char*, IdentifierCStringTranslator>(c);
+    pair<HashSet<StringImpl*>::iterator, bool> addResult = identifierTable.add<const char*, IdentifierCStringTranslator>(c);
 
     // If the string is newly-translated, then we need to adopt it.
     // The boolean in the pair tells us if that is so.
-    RefPtr<UString::Rep> addedString = addResult.second ? adoptRef(*addResult.first) : *addResult.first;
+    RefPtr<StringImpl> addedString = addResult.second ? adoptRef(*addResult.first) : *addResult.first;
 
     literalIdentifierTable.add(c, addedString.get());
 
     return addedString.release();
 }
 
-PassRefPtr<UString::Rep> Identifier::add(ExecState* exec, const char* c)
+PassRefPtr<StringImpl> Identifier::add(ExecState* exec, const char* c)
 {
     return add(&exec->globalData(), c);
 }
@@ -149,18 +149,18 @@ struct UCharBuffer {
 struct IdentifierUCharBufferTranslator {
     static unsigned hash(const UCharBuffer& buf)
     {
-        return UString::Rep::computeHash(buf.s, buf.length);
+        return StringImpl::computeHash(buf.s, buf.length);
     }
 
-    static bool equal(UString::Rep* str, const UCharBuffer& buf)
+    static bool equal(StringImpl* str, const UCharBuffer& buf)
     {
         return Identifier::equal(str, buf.s, buf.length);
     }
 
-    static void translate(UString::Rep*& location, const UCharBuffer& buf, unsigned hash)
+    static void translate(StringImpl*& location, const UCharBuffer& buf, unsigned hash)
     {
         UChar* d;
-        UString::Rep* r = UString::Rep::createUninitialized(buf.length, d).releaseRef();
+        StringImpl* r = StringImpl::createUninitialized(buf.length, d).releaseRef();
         for (unsigned i = 0; i != buf.length; i++)
             d[i] = buf.s[i];
         r->setHash(hash);
@@ -168,7 +168,7 @@ struct IdentifierUCharBufferTranslator {
     }
 };
 
-PassRefPtr<UString::Rep> Identifier::add(JSGlobalData* globalData, const UChar* s, int length)
+PassRefPtr<StringImpl> Identifier::add(JSGlobalData* globalData, const UChar* s, int length)
 {
     if (length == 1) {
         UChar c = s[0];
@@ -176,21 +176,21 @@ PassRefPtr<UString::Rep> Identifier::add(JSGlobalData* globalData, const UChar*
             return add(globalData, globalData->smallStrings.singleCharacterStringRep(c));
     }
     if (!length)
-        return UString::Rep::empty();
+        return StringImpl::empty();
     UCharBuffer buf = {s, length}; 
-    pair<HashSet<UString::Rep*>::iterator, bool> addResult = globalData->identifierTable->add<UCharBuffer, IdentifierUCharBufferTranslator>(buf);
+    pair<HashSet<StringImpl*>::iterator, bool> addResult = globalData->identifierTable->add<UCharBuffer, IdentifierUCharBufferTranslator>(buf);
 
     // If the string is newly-translated, then we need to adopt it.
     // The boolean in the pair tells us if that is so.
     return addResult.second ? adoptRef(*addResult.first) : *addResult.first;
 }
 
-PassRefPtr<UString::Rep> Identifier::add(ExecState* exec, const UChar* s, int length)
+PassRefPtr<StringImpl> Identifier::add(ExecState* exec, const UChar* s, int length)
 {
     return add(&exec->globalData(), s, length);
 }
 
-PassRefPtr<UString::Rep> Identifier::addSlowCase(JSGlobalData* globalData, UString::Rep* r)
+PassRefPtr<StringImpl> Identifier::addSlowCase(JSGlobalData* globalData, StringImpl* r)
 {
     ASSERT(!r->isIdentifier());
     // The empty & null strings are static singletons, and static strings are handled
@@ -208,7 +208,7 @@ PassRefPtr<UString::Rep> Identifier::addSlowCase(JSGlobalData* globalData, UStri
     return *globalData->identifierTable->add(r).first;
 }
 
-PassRefPtr<UString::Rep> Identifier::addSlowCase(ExecState* exec, UString::Rep* r)
+PassRefPtr<StringImpl> Identifier::addSlowCase(ExecState* exec, StringImpl* r)
 {
     return addSlowCase(&exec->globalData(), r);
 }
diff --git a/JavaScriptCore/runtime/Identifier.h b/JavaScriptCore/runtime/Identifier.h
index 2db0716..69cf1fb 100644
--- a/JavaScriptCore/runtime/Identifier.h
+++ b/JavaScriptCore/runtime/Identifier.h
@@ -34,25 +34,26 @@ namespace JSC {
     public:
         Identifier() { }
 
-        Identifier(ExecState* exec, const char* s) : _ustring(add(exec, s)) { } // Only to be used with string literals.
-        Identifier(ExecState* exec, const UChar* s, int length) : _ustring(add(exec, s, length)) { }
-        Identifier(ExecState* exec, UString::Rep* rep) : _ustring(add(exec, rep)) { } 
-        Identifier(ExecState* exec, const UString& s) : _ustring(add(exec, s.rep())) { }
+        Identifier(ExecState* exec, const char* s) : m_string(add(exec, s)) { } // Only to be used with string literals.
+        Identifier(ExecState* exec, const UChar* s, int length) : m_string(add(exec, s, length)) { }
+        Identifier(ExecState* exec, StringImpl* rep) : m_string(add(exec, rep)) { } 
+        Identifier(ExecState* exec, const UString& s) : m_string(add(exec, s.impl())) { }
 
-        Identifier(JSGlobalData* globalData, const char* s) : _ustring(add(globalData, s)) { } // Only to be used with string literals.
-        Identifier(JSGlobalData* globalData, const UChar* s, int length) : _ustring(add(globalData, s, length)) { }
-        Identifier(JSGlobalData* globalData, UString::Rep* rep) : _ustring(add(globalData, rep)) { } 
-        Identifier(JSGlobalData* globalData, const UString& s) : _ustring(add(globalData, s.rep())) { }
+        Identifier(JSGlobalData* globalData, const char* s) : m_string(add(globalData, s)) { } // Only to be used with string literals.
+        Identifier(JSGlobalData* globalData, const UChar* s, int length) : m_string(add(globalData, s, length)) { }
+        Identifier(JSGlobalData* globalData, StringImpl* rep) : m_string(add(globalData, rep)) { } 
+        Identifier(JSGlobalData* globalData, const UString& s) : m_string(add(globalData, s.impl())) { }
 
         // Special constructor for cases where we overwrite an object in place.
-        Identifier(PlacementNewAdoptType) : _ustring(PlacementNewAdopt) { }
+        Identifier(PlacementNewAdoptType) : m_string(PlacementNewAdopt) { }
         
-        const UString& ustring() const { return _ustring; }
+        const UString& ustring() const { return m_string; }
+        StringImpl* impl() const { return m_string.impl(); }
         
-        const UChar* data() const { return _ustring.data(); }
-        int size() const { return _ustring.size(); }
+        const UChar* data() const { return m_string.data(); }
+        int size() const { return m_string.size(); }
         
-        const char* ascii() const { return _ustring.ascii(); }
+        const char* ascii() const { return m_string.ascii(); }
         
         static Identifier from(ExecState* exec, unsigned y);
         static Identifier from(ExecState* exec, int y);
@@ -61,14 +62,14 @@ namespace JSC {
         static Identifier from(JSGlobalData*, int y);
         static Identifier from(JSGlobalData*, double y);
         
-        bool isNull() const { return _ustring.isNull(); }
-        bool isEmpty() const { return _ustring.isEmpty(); }
+        bool isNull() const { return m_string.isNull(); }
+        bool isEmpty() const { return m_string.isEmpty(); }
         
-        uint32_t toUInt32(bool* ok) const { return _ustring.toUInt32(ok); }
-        uint32_t toUInt32(bool* ok, bool tolerateEmptyString) const { return _ustring.toUInt32(ok, tolerateEmptyString); };
-        uint32_t toStrictUInt32(bool* ok) const { return _ustring.toStrictUInt32(ok); }
-        unsigned toArrayIndex(bool* ok) const { return _ustring.toArrayIndex(ok); }
-        double toDouble() const { return _ustring.toDouble(); }
+        uint32_t toUInt32(bool* ok) const { return m_string.toUInt32(ok); }
+        uint32_t toUInt32(bool* ok, bool tolerateEmptyString) const { return m_string.toUInt32(ok, tolerateEmptyString); };
+        uint32_t toStrictUInt32(bool* ok) const { return m_string.toStrictUInt32(ok); }
+        unsigned toArrayIndex(bool* ok) const { return m_string.toArrayIndex(ok); }
+        double toDouble() const { return m_string.toDouble(); }
         
         friend bool operator==(const Identifier&, const Identifier&);
         friend bool operator!=(const Identifier&, const Identifier&);
@@ -76,23 +77,23 @@ namespace JSC {
         friend bool operator==(const Identifier&, const char*);
         friend bool operator!=(const Identifier&, const char*);
     
-        static bool equal(const UString::Rep*, const char*);
-        static bool equal(const UString::Rep*, const UChar*, unsigned length);
-        static bool equal(const UString::Rep* a, const UString::Rep* b) { return ::equal(a, b); }
+        static bool equal(const StringImpl*, const char*);
+        static bool equal(const StringImpl*, const UChar*, unsigned length);
+        static bool equal(const StringImpl* a, const StringImpl* b) { return ::equal(a, b); }
 
-        static PassRefPtr<UString::Rep> add(ExecState*, const char*); // Only to be used with string literals.
-        static PassRefPtr<UString::Rep> add(JSGlobalData*, const char*); // Only to be used with string literals.
+        static PassRefPtr<StringImpl> add(ExecState*, const char*); // Only to be used with string literals.
+        static PassRefPtr<StringImpl> add(JSGlobalData*, const char*); // Only to be used with string literals.
 
     private:
-        UString _ustring;
+        UString m_string;
         
-        static bool equal(const Identifier& a, const Identifier& b) { return a._ustring.rep() == b._ustring.rep(); }
-        static bool equal(const Identifier& a, const char* b) { return equal(a._ustring.rep(), b); }
+        static bool equal(const Identifier& a, const Identifier& b) { return a.m_string.impl() == b.m_string.impl(); }
+        static bool equal(const Identifier& a, const char* b) { return equal(a.m_string.impl(), b); }
 
-        static PassRefPtr<UString::Rep> add(ExecState*, const UChar*, int length);
-        static PassRefPtr<UString::Rep> add(JSGlobalData*, const UChar*, int length);
+        static PassRefPtr<StringImpl> add(ExecState*, const UChar*, int length);
+        static PassRefPtr<StringImpl> add(JSGlobalData*, const UChar*, int length);
 
-        static PassRefPtr<UString::Rep> add(ExecState* exec, UString::Rep* r)
+        static PassRefPtr<StringImpl> add(ExecState* exec, StringImpl* r)
         {
 #ifndef NDEBUG
             checkCurrentIdentifierTable(exec);
@@ -101,7 +102,7 @@ namespace JSC {
                 return r;
             return addSlowCase(exec, r);
         }
-        static PassRefPtr<UString::Rep> add(JSGlobalData* globalData, UString::Rep* r)
+        static PassRefPtr<StringImpl> add(JSGlobalData* globalData, StringImpl* r)
         {
 #ifndef NDEBUG
             checkCurrentIdentifierTable(globalData);
@@ -111,8 +112,8 @@ namespace JSC {
             return addSlowCase(globalData, r);
         }
 
-        static PassRefPtr<UString::Rep> addSlowCase(ExecState*, UString::Rep* r);
-        static PassRefPtr<UString::Rep> addSlowCase(JSGlobalData*, UString::Rep* r);
+        static PassRefPtr<StringImpl> addSlowCase(ExecState*, StringImpl* r);
+        static PassRefPtr<StringImpl> addSlowCase(JSGlobalData*, StringImpl* r);
 
         static void checkCurrentIdentifierTable(ExecState*);
         static void checkCurrentIdentifierTable(JSGlobalData*);
diff --git a/JavaScriptCore/runtime/InitializeThreading.cpp b/JavaScriptCore/runtime/InitializeThreading.cpp
index 51d43ee..33e8e68 100644
--- a/JavaScriptCore/runtime/InitializeThreading.cpp
+++ b/JavaScriptCore/runtime/InitializeThreading.cpp
@@ -48,9 +48,12 @@ static pthread_once_t initializeThreadingKeyOnce = PTHREAD_ONCE_INIT;
 
 static void initializeThreadingOnce()
 {
+    // StringImpl::empty() does not construct its static string in a threadsafe fashion,
+    // so ensure it has been initialized from here.
+    StringImpl::empty();
+
     WTF::initializeThreading();
     wtfThreadData();
-    initializeUString();
     JSGlobalData::storeVPtrs();
 #if ENABLE(JSC_MULTIPLE_THREADS)
     s_dtoaP5Mutex = new Mutex;
diff --git a/JavaScriptCore/runtime/InternalFunction.cpp b/JavaScriptCore/runtime/InternalFunction.cpp
index f774993..0a8d9de 100644
--- a/JavaScriptCore/runtime/InternalFunction.cpp
+++ b/JavaScriptCore/runtime/InternalFunction.cpp
@@ -61,7 +61,7 @@ const UString InternalFunction::displayName(ExecState* exec)
     if (displayName && isJSString(&exec->globalData(), displayName))
         return asString(displayName)->tryGetValue();
     
-    return UString::null();
+    return UString();
 }
 
 const UString InternalFunction::calculatedDisplayName(ExecState* exec)
diff --git a/JavaScriptCore/runtime/JSFunction.cpp b/JavaScriptCore/runtime/JSFunction.cpp
index 49cc8fa..7eb9ba5 100644
--- a/JavaScriptCore/runtime/JSFunction.cpp
+++ b/JavaScriptCore/runtime/JSFunction.cpp
@@ -134,7 +134,7 @@ const UString JSFunction::displayName(ExecState* exec)
     if (displayName && isJSString(&exec->globalData(), displayName))
         return asString(displayName)->tryGetValue();
     
-    return UString::null();
+    return UString();
 }
 
 const UString JSFunction::calculatedDisplayName(ExecState* exec)
diff --git a/JavaScriptCore/runtime/JSGlobalObject.h b/JavaScriptCore/runtime/JSGlobalObject.h
index 115af87..e57b737 100644
--- a/JavaScriptCore/runtime/JSGlobalObject.h
+++ b/JavaScriptCore/runtime/JSGlobalObject.h
@@ -353,7 +353,7 @@ namespace JSC {
             GlobalPropertyInfo& global = globals[i];
             ASSERT(global.attributes & DontDelete);
             SymbolTableEntry newEntry(index, global.attributes);
-            symbolTable().add(global.identifier.ustring().rep(), newEntry);
+            symbolTable().add(global.identifier.impl(), newEntry);
             registerAt(index) = global.value;
         }
     }
diff --git a/JavaScriptCore/runtime/JSStaticScopeObject.h b/JavaScriptCore/runtime/JSStaticScopeObject.h
index dcece9d..c0519c1 100644
--- a/JavaScriptCore/runtime/JSStaticScopeObject.h
+++ b/JavaScriptCore/runtime/JSStaticScopeObject.h
@@ -47,7 +47,7 @@ namespace JSC{
             : JSVariableObject(exec->globalData().staticScopeStructure, new JSStaticScopeObjectData())
         {
             d()->registerStore = value;
-            symbolTable().add(ident.ustring().rep(), SymbolTableEntry(-1, attributes));
+            symbolTable().add(ident.impl(), SymbolTableEntry(-1, attributes));
         }
         virtual ~JSStaticScopeObject();
         virtual void markChildren(MarkStack&);
diff --git a/JavaScriptCore/runtime/JSString.h b/JavaScriptCore/runtime/JSString.h
index 3805658..6e48af2 100644
--- a/JavaScriptCore/runtime/JSString.h
+++ b/JavaScriptCore/runtime/JSString.h
@@ -87,7 +87,7 @@ namespace JSC {
             void append(const UString& string)
             {
                 ASSERT(m_rope);
-                m_rope->initializeFiber(m_index, string.rep());
+                m_rope->initializeFiber(m_index, string.impl());
             }
             void append(JSString* jsString)
             {
@@ -359,7 +359,7 @@ namespace JSC {
 
         void appendStringInConstruct(unsigned& index, const UString& string)
         {
-            StringImpl* impl = string.rep();
+            StringImpl* impl = string.impl();
             impl->ref();
             m_other.m_fibers[index++] = impl;
         }
@@ -386,7 +386,7 @@ namespace JSC {
                 m_length += s->length();
             } else {
                 UString u(v.toString(exec));
-                StringImpl* impl = u.rep();
+                StringImpl* impl = u.impl();
                 impl->ref();
                 m_other.m_fibers[index++] = impl;
                 m_length += u.size();
@@ -474,7 +474,7 @@ namespace JSC {
         UChar c = s.data()[offset];
         if (c <= 0xFF)
             return globalData->smallStrings.singleCharacterString(globalData, c);
-        return fixupVPtr(globalData, new (globalData) JSString(globalData, UString(StringImpl::create(s.rep(), offset, 1))));
+        return fixupVPtr(globalData, new (globalData) JSString(globalData, UString(StringImpl::create(s.impl(), offset, 1))));
     }
 
     inline JSString* jsNontrivialString(JSGlobalData* globalData, const char* s)
@@ -532,7 +532,7 @@ namespace JSC {
             if (c <= 0xFF)
                 return globalData->smallStrings.singleCharacterString(globalData, c);
         }
-        return fixupVPtr(globalData, new (globalData) JSString(globalData, UString(StringImpl::create(s.rep(), offset, length)), JSString::HasOtherOwner));
+        return fixupVPtr(globalData, new (globalData) JSString(globalData, UString(StringImpl::create(s.impl(), offset, length)), JSString::HasOtherOwner));
     }
 
     inline JSString* jsOwnedString(JSGlobalData* globalData, const UString& s)
diff --git a/JavaScriptCore/runtime/JSVariableObject.cpp b/JavaScriptCore/runtime/JSVariableObject.cpp
index 7365001..81d05ba 100644
--- a/JavaScriptCore/runtime/JSVariableObject.cpp
+++ b/JavaScriptCore/runtime/JSVariableObject.cpp
@@ -36,7 +36,7 @@ namespace JSC {
 
 bool JSVariableObject::deleteProperty(ExecState* exec, const Identifier& propertyName)
 {
-    if (symbolTable().contains(propertyName.ustring().rep()))
+    if (symbolTable().contains(propertyName.impl()))
         return false;
 
     return JSObject::deleteProperty(exec, propertyName);
@@ -60,7 +60,7 @@ bool JSVariableObject::isVariableObject() const
 
 bool JSVariableObject::symbolTableGet(const Identifier& propertyName, PropertyDescriptor& descriptor)
 {
-    SymbolTableEntry entry = symbolTable().inlineGet(propertyName.ustring().rep());
+    SymbolTableEntry entry = symbolTable().inlineGet(propertyName.impl());
     if (!entry.isNull()) {
         descriptor.setDescriptor(registerAt(entry.getIndex()).jsValue(), entry.getAttributes() | DontDelete);
         return true;
diff --git a/JavaScriptCore/runtime/JSVariableObject.h b/JavaScriptCore/runtime/JSVariableObject.h
index f2efcdf..3f2e218 100644
--- a/JavaScriptCore/runtime/JSVariableObject.h
+++ b/JavaScriptCore/runtime/JSVariableObject.h
@@ -103,7 +103,7 @@ namespace JSC {
 
     inline bool JSVariableObject::symbolTableGet(const Identifier& propertyName, PropertySlot& slot)
     {
-        SymbolTableEntry entry = symbolTable().inlineGet(propertyName.ustring().rep());
+        SymbolTableEntry entry = symbolTable().inlineGet(propertyName.impl());
         if (!entry.isNull()) {
             slot.setRegisterSlot(&registerAt(entry.getIndex()));
             return true;
@@ -113,7 +113,7 @@ namespace JSC {
 
     inline bool JSVariableObject::symbolTableGet(const Identifier& propertyName, PropertySlot& slot, bool& slotIsWriteable)
     {
-        SymbolTableEntry entry = symbolTable().inlineGet(propertyName.ustring().rep());
+        SymbolTableEntry entry = symbolTable().inlineGet(propertyName.impl());
         if (!entry.isNull()) {
             slot.setRegisterSlot(&registerAt(entry.getIndex()));
             slotIsWriteable = !entry.isReadOnly();
@@ -126,7 +126,7 @@ namespace JSC {
     {
         ASSERT(!Heap::heap(value) || Heap::heap(value) == Heap::heap(this));
 
-        SymbolTableEntry entry = symbolTable().inlineGet(propertyName.ustring().rep());
+        SymbolTableEntry entry = symbolTable().inlineGet(propertyName.impl());
         if (entry.isNull())
             return false;
         if (entry.isReadOnly())
@@ -139,7 +139,7 @@ namespace JSC {
     {
         ASSERT(!Heap::heap(value) || Heap::heap(value) == Heap::heap(this));
 
-        SymbolTable::iterator iter = symbolTable().find(propertyName.ustring().rep());
+        SymbolTable::iterator iter = symbolTable().find(propertyName.impl());
         if (iter == symbolTable().end())
             return false;
         SymbolTableEntry& entry = iter->second;
diff --git a/JavaScriptCore/runtime/Lookup.cpp b/JavaScriptCore/runtime/Lookup.cpp
index 50d096c..07416af 100644
--- a/JavaScriptCore/runtime/Lookup.cpp
+++ b/JavaScriptCore/runtime/Lookup.cpp
@@ -34,7 +34,7 @@ void HashTable::createTable(JSGlobalData* globalData) const
     for (int i = 0; i < compactSize; ++i)
         entries[i].setKey(0);
     for (int i = 0; values[i].key; ++i) {
-        UString::Rep* identifier = Identifier::add(globalData, values[i].key).releaseRef();
+        StringImpl* identifier = Identifier::add(globalData, values[i].key).releaseRef();
         int hashIndex = identifier->existingHash() & compactHashSizeMask;
         HashEntry* entry = &entries[hashIndex];
 
@@ -61,7 +61,7 @@ void HashTable::deleteTable() const
     if (table) {
         int max = compactSize;
         for (int i = 0; i != max; ++i) {
-            if (UString::Rep* key = table[i].key())
+            if (StringImpl* key = table[i].key())
                 key->deref();
         }
         delete [] table;
diff --git a/JavaScriptCore/runtime/Lookup.h b/JavaScriptCore/runtime/Lookup.h
index 5a96fd3..9bc81d4 100644
--- a/JavaScriptCore/runtime/Lookup.h
+++ b/JavaScriptCore/runtime/Lookup.h
@@ -55,7 +55,7 @@ namespace JSC {
 
     class HashEntry : public FastAllocBase {
     public:
-        void initialize(UString::Rep* key, unsigned char attributes, intptr_t v1, intptr_t v2
+        void initialize(StringImpl* key, unsigned char attributes, intptr_t v1, intptr_t v2
 #if ENABLE(JIT)
                         , ThunkGenerator generator = 0
 #endif
@@ -71,8 +71,8 @@ namespace JSC {
             m_next = 0;
         }
 
-        void setKey(UString::Rep* key) { m_key = key; }
-        UString::Rep* key() const { return m_key; }
+        void setKey(StringImpl* key) { m_key = key; }
+        StringImpl* key() const { return m_key; }
 
         unsigned char attributes() const { return m_attributes; }
 
@@ -91,7 +91,7 @@ namespace JSC {
         HashEntry* next() const { return m_next; }
 
     private:
-        UString::Rep* m_key;
+        StringImpl* m_key;
         unsigned char m_attributes; // JSObject attributes
 
         union {
@@ -159,13 +159,13 @@ namespace JSC {
         {
             ASSERT(table);
 
-            const HashEntry* entry = &table[identifier.ustring().rep()->existingHash() & compactHashSizeMask];
+            const HashEntry* entry = &table[identifier.impl()->existingHash() & compactHashSizeMask];
 
             if (!entry->key())
                 return 0;
 
             do {
-                if (entry->key() == identifier.ustring().rep())
+                if (entry->key() == identifier.impl())
                     return entry;
                 entry = entry->next();
             } while (entry);
diff --git a/JavaScriptCore/runtime/PropertyMapHashTable.h b/JavaScriptCore/runtime/PropertyMapHashTable.h
index 44dc2b8..bd452b6 100644
--- a/JavaScriptCore/runtime/PropertyMapHashTable.h
+++ b/JavaScriptCore/runtime/PropertyMapHashTable.h
@@ -27,13 +27,13 @@
 namespace JSC {
 
     struct PropertyMapEntry {
-        UString::Rep* key;
+        StringImpl* key;
         unsigned offset;
         unsigned attributes;
         JSCell* specificValue;
         unsigned index;
 
-        PropertyMapEntry(UString::Rep* key, unsigned attributes, JSCell* specificValue)
+        PropertyMapEntry(StringImpl* key, unsigned attributes, JSCell* specificValue)
             : key(key)
             , offset(0)
             , attributes(attributes)
@@ -42,7 +42,7 @@ namespace JSC {
         {
         }
 
-        PropertyMapEntry(UString::Rep* key, unsigned offset, unsigned attributes, JSCell* specificValue, unsigned index)
+        PropertyMapEntry(StringImpl* key, unsigned offset, unsigned attributes, JSCell* specificValue, unsigned index)
             : key(key)
             , offset(offset)
             , attributes(attributes)
diff --git a/JavaScriptCore/runtime/PropertyNameArray.cpp b/JavaScriptCore/runtime/PropertyNameArray.cpp
index 6b24669..afb41be 100644
--- a/JavaScriptCore/runtime/PropertyNameArray.cpp
+++ b/JavaScriptCore/runtime/PropertyNameArray.cpp
@@ -28,20 +28,20 @@ namespace JSC {
 
 static const size_t setThreshold = 20;
 
-void PropertyNameArray::add(UString::Rep* identifier)
+void PropertyNameArray::add(StringImpl* identifier)
 {
-    ASSERT(identifier == UString::null().rep() || identifier == UString::Rep::empty() || identifier->isIdentifier());
+    ASSERT(!identifier || identifier == StringImpl::empty() || identifier->isIdentifier());
 
     size_t size = m_data->propertyNameVector().size();
     if (size < setThreshold) {
         for (size_t i = 0; i < size; ++i) {
-            if (identifier == m_data->propertyNameVector()[i].ustring().rep())
+            if (identifier == m_data->propertyNameVector()[i].impl())
                 return;
         }
     } else {
         if (m_set.isEmpty()) {
             for (size_t i = 0; i < size; ++i)
-                m_set.add(m_data->propertyNameVector()[i].ustring().rep());
+                m_set.add(m_data->propertyNameVector()[i].impl());
         }
         if (!m_set.add(identifier).second)
             return;
diff --git a/JavaScriptCore/runtime/PropertyNameArray.h b/JavaScriptCore/runtime/PropertyNameArray.h
index 3dbcc9d..0da930f 100644
--- a/JavaScriptCore/runtime/PropertyNameArray.h
+++ b/JavaScriptCore/runtime/PropertyNameArray.h
@@ -68,9 +68,9 @@ namespace JSC {
 
         JSGlobalData* globalData() { return m_globalData; }
 
-        void add(const Identifier& identifier) { add(identifier.ustring().rep()); }
-        void add(UString::Rep*);
-        void addKnownUnique(UString::Rep* identifier) { m_data->propertyNameVector().append(Identifier(m_globalData, identifier)); }
+        void add(const Identifier& identifier) { add(identifier.impl()); }
+        void add(StringImpl*);
+        void addKnownUnique(StringImpl* identifier) { m_data->propertyNameVector().append(Identifier(m_globalData, identifier)); }
 
         Identifier& operator[](unsigned i) { return m_data->propertyNameVector()[i]; }
         const Identifier& operator[](unsigned i) const { return m_data->propertyNameVector()[i]; }
@@ -86,7 +86,7 @@ namespace JSC {
         const_iterator end() const { return m_data->propertyNameVector().end(); }
 
     private:
-        typedef HashSet<UString::Rep*, PtrHash<UString::Rep*> > IdentifierSet;
+        typedef HashSet<StringImpl*, PtrHash<StringImpl*> > IdentifierSet;
 
         RefPtr<PropertyNameArrayData> m_data;
         IdentifierSet m_set;
diff --git a/JavaScriptCore/runtime/RegExp.cpp b/JavaScriptCore/runtime/RegExp.cpp
index 59e3f35..c674ead 100644
--- a/JavaScriptCore/runtime/RegExp.cpp
+++ b/JavaScriptCore/runtime/RegExp.cpp
@@ -105,7 +105,7 @@ int RegExp::match(const UString& s, int startOffset, Vector<int, 32>* ovector)
     
     // Perform check to see if this match call is the same as the last match invocation
     // and if it is return the prior result.
-    if ((startOffset == m_lastMatchStart) && (s.rep() == m_lastMatchString.rep())) {
+    if ((startOffset == m_lastMatchStart) && (s.impl() == m_lastMatchString.impl())) {
         if (ovector)
             *ovector = m_lastOVector;
         
diff --git a/JavaScriptCore/runtime/RegExpCache.cpp b/JavaScriptCore/runtime/RegExpCache.cpp
index b9d250d..9ab8cee 100644
--- a/JavaScriptCore/runtime/RegExpCache.cpp
+++ b/JavaScriptCore/runtime/RegExpCache.cpp
@@ -63,7 +63,7 @@ PassRefPtr<RegExp> RegExpCache::create(const UString& patternString, const UStri
         m_cacheMap.remove(RegExpKey(patternKeyArray[m_nextKeyToEvict].flagsValue, patternKeyArray[m_nextKeyToEvict].pattern));
 
     patternKeyArray[m_nextKeyToEvict].flagsValue = key.flagsValue;
-    patternKeyArray[m_nextKeyToEvict].pattern = patternString.rep();
+    patternKeyArray[m_nextKeyToEvict].pattern = patternString.impl();
     return regExp;
 }
 
diff --git a/JavaScriptCore/runtime/RegExpKey.h b/JavaScriptCore/runtime/RegExpKey.h
index 2bbdb07..dccad08 100644
--- a/JavaScriptCore/runtime/RegExpKey.h
+++ b/JavaScriptCore/runtime/RegExpKey.h
@@ -34,7 +34,7 @@ namespace JSC {
 
 struct RegExpKey {
     int flagsValue;
-    RefPtr<UString::Rep> pattern;
+    RefPtr<StringImpl> pattern;
 
     RegExpKey()
         : flagsValue(0)
@@ -48,18 +48,18 @@ struct RegExpKey {
 
     RegExpKey(int flags, const UString& pattern)
         : flagsValue(flags)
-        , pattern(pattern.rep())
+        , pattern(pattern.impl())
     {
     }
 
-    RegExpKey(int flags, const PassRefPtr<UString::Rep> pattern)
+    RegExpKey(int flags, const PassRefPtr<StringImpl> pattern)
         : flagsValue(flags)
         , pattern(pattern)
     {
     }
 
     RegExpKey(const UString& flags, const UString& pattern)
-        : pattern(pattern.rep())
+        : pattern(pattern.impl())
     {
         flagsValue = getFlagsValue(flags);
     }
diff --git a/JavaScriptCore/runtime/SmallStrings.cpp b/JavaScriptCore/runtime/SmallStrings.cpp
index 75cee23..752fbb0 100644
--- a/JavaScriptCore/runtime/SmallStrings.cpp
+++ b/JavaScriptCore/runtime/SmallStrings.cpp
@@ -44,10 +44,10 @@ class SmallStringsStorage : public Noncopyable {
 public:
     SmallStringsStorage();
 
-    UString::Rep* rep(unsigned char character) { return m_reps[character].get(); }
+    StringImpl* rep(unsigned char character) { return m_reps[character].get(); }
 
 private:
-    RefPtr<UString::Rep> m_reps[numCharactersToStore];
+    RefPtr<StringImpl> m_reps[numCharactersToStore];
 };
 
 SmallStringsStorage::SmallStringsStorage()
@@ -132,7 +132,7 @@ void SmallStrings::createSingleCharacterString(JSGlobalData* globalData, unsigne
     m_singleCharacterStrings[character] = new (globalData) JSString(globalData, m_storage->rep(character), JSString::HasOtherOwner);
 }
 
-UString::Rep* SmallStrings::singleCharacterStringRep(unsigned char character)
+StringImpl* SmallStrings::singleCharacterStringRep(unsigned char character)
 {
     if (!m_storage)
         m_storage = adoptPtr(new SmallStringsStorage);
diff --git a/JavaScriptCore/runtime/SmallStrings.h b/JavaScriptCore/runtime/SmallStrings.h
index b550a04..d1ebfb1 100644
--- a/JavaScriptCore/runtime/SmallStrings.h
+++ b/JavaScriptCore/runtime/SmallStrings.h
@@ -55,7 +55,7 @@ namespace JSC {
             return m_singleCharacterStrings[character];
         }
 
-        UString::Rep* singleCharacterStringRep(unsigned char character);
+        StringImpl* singleCharacterStringRep(unsigned char character);
 
         void markChildren(MarkStack&);
         void clear();
diff --git a/JavaScriptCore/runtime/StringPrototype.cpp b/JavaScriptCore/runtime/StringPrototype.cpp
index 2152a0d..00a0be3 100644
--- a/JavaScriptCore/runtime/StringPrototype.cpp
+++ b/JavaScriptCore/runtime/StringPrototype.cpp
@@ -254,7 +254,7 @@ static ALWAYS_INLINE JSValue jsSpliceSubstringsWithSeparators(ExecState* exec, J
         if (position <= 0 && length >= sourceSize)
             return sourceVal;
         // We could call UString::substr, but this would result in redundant checks
-        return jsString(exec, StringImpl::create(source.rep(), max(0, position), min(sourceSize, length)));
+        return jsString(exec, StringImpl::create(source.impl(), max(0, position), min(sourceSize, length)));
     }
 
     int totalLength = 0;
@@ -597,7 +597,7 @@ EncodedJSValue JSC_HOST_CALL stringProtoFuncMatch(ExecState* exec)
          *  If regexp is not an object whose [[Class]] property is "RegExp", it is
          *  replaced with the result of the expression new RegExp(regexp).
          */
-        reg = exec->globalData().regExpCache()->lookupOrCreate(a0.toString(exec), UString::null());
+        reg = exec->globalData().regExpCache()->lookupOrCreate(a0.toString(exec), UString());
     }
     RegExpConstructor* regExpConstructor = exec->lexicalGlobalObject()->regExpConstructor();
     int pos;
@@ -650,7 +650,7 @@ EncodedJSValue JSC_HOST_CALL stringProtoFuncSearch(ExecState* exec)
          *  If regexp is not an object whose [[Class]] property is "RegExp", it is
          *  replaced with the result of the expression new RegExp(regexp).
          */
-        reg = exec->globalData().regExpCache()->lookupOrCreate(a0.toString(exec), UString::null());
+        reg = exec->globalData().regExpCache()->lookupOrCreate(a0.toString(exec), UString());
     }
     RegExpConstructor* regExpConstructor = exec->lexicalGlobalObject()->regExpConstructor();
     int pos;
diff --git a/JavaScriptCore/runtime/Structure.cpp b/JavaScriptCore/runtime/Structure.cpp
index 6d13f4b..d06a239 100644
--- a/JavaScriptCore/runtime/Structure.cpp
+++ b/JavaScriptCore/runtime/Structure.cpp
@@ -270,7 +270,7 @@ Structure::~Structure()
     if (m_propertyTable) {
         unsigned entryCount = m_propertyTable->keyCount + m_propertyTable->deletedSentinelCount;
         for (unsigned i = 1; i <= entryCount; i++) {
-            if (UString::Rep* key = m_propertyTable->entries()[i].key)
+            if (StringImpl* key = m_propertyTable->entries()[i].key)
                 key->deref();
         }
 
@@ -395,7 +395,7 @@ void Structure::growPropertyStorageCapacity()
 
 void Structure::despecifyDictionaryFunction(const Identifier& propertyName)
 {
-    const UString::Rep* rep = propertyName._ustring.rep();
+    const StringImpl* rep = propertyName.impl();
 
     materializePropertyMapIfNecessary();
 
@@ -444,7 +444,7 @@ PassRefPtr<Structure> Structure::addPropertyTransitionToExistingStructure(Struct
     ASSERT(!structure->isDictionary());
     ASSERT(structure->typeInfo().type() == ObjectType);
 
-    if (Structure* existingTransition = structure->transitionTableGet(make_pair(propertyName.ustring().rep(), attributes), specificValue)) {
+    if (Structure* existingTransition = structure->transitionTableGet(make_pair(propertyName.impl(), attributes), specificValue)) {
         ASSERT(existingTransition->m_offset != noOffset);
         offset = existingTransition->m_offset + existingTransition->m_anonymousSlotCount;
         ASSERT(offset >= structure->m_anonymousSlotCount);
@@ -479,7 +479,7 @@ PassRefPtr<Structure> Structure::addPropertyTransition(Structure* structure, con
 
     transition->m_cachedPrototypeChain = structure->m_cachedPrototypeChain;
     transition->m_previous = structure;
-    transition->m_nameInPrevious = propertyName.ustring().rep();
+    transition->m_nameInPrevious = propertyName.impl();
     transition->m_attributesInPrevious = attributes;
     transition->m_specificValueInPrevious = specificValue;
     transition->m_propertyStorageCapacity = structure->m_propertyStorageCapacity;
@@ -509,7 +509,7 @@ PassRefPtr<Structure> Structure::addPropertyTransition(Structure* structure, con
 
     transition->m_offset = offset - structure->m_anonymousSlotCount;
     ASSERT(structure->anonymousSlotCount() == transition->anonymousSlotCount());
-    structure->transitionTableAdd(make_pair(propertyName.ustring().rep(), attributes), transition.get(), specificValue);
+    structure->transitionTableAdd(make_pair(propertyName.impl(), attributes), transition.get(), specificValue);
     return transition.release();
 }
 
@@ -738,7 +738,7 @@ PropertyMapHashTable* Structure::copyPropertyTable()
 
     unsigned entryCount = m_propertyTable->keyCount + m_propertyTable->deletedSentinelCount;
     for (unsigned i = 1; i <= entryCount; ++i) {
-        if (UString::Rep* key = newTable->entries()[i].key)
+        if (StringImpl* key = newTable->entries()[i].key)
             key->ref();
     }
 
@@ -749,7 +749,7 @@ PropertyMapHashTable* Structure::copyPropertyTable()
     return newTable;
 }
 
-size_t Structure::get(const UString::Rep* rep, unsigned& attributes, JSCell*& specificValue)
+size_t Structure::get(const StringImpl* rep, unsigned& attributes, JSCell*& specificValue)
 {
     materializePropertyMapIfNecessary();
     if (!m_propertyTable)
@@ -806,7 +806,7 @@ bool Structure::despecifyFunction(const Identifier& propertyName)
     if (!m_propertyTable)
         return false;
 
-    UString::Rep* rep = propertyName._ustring.rep();
+    StringImpl* rep = propertyName.impl();
 
     unsigned i = rep->existingHash();
 
@@ -870,7 +870,7 @@ size_t Structure::put(const Identifier& propertyName, unsigned attributes, JSCel
     if (attributes & DontEnum)
         m_hasNonEnumerableProperties = true;
 
-    UString::Rep* rep = propertyName._ustring.rep();
+    StringImpl* rep = propertyName.impl();
 
     if (!m_propertyTable)
         createPropertyMapHashTable();
@@ -954,7 +954,7 @@ size_t Structure::put(const Identifier& propertyName, unsigned attributes, JSCel
     return newOffset;
 }
 
-bool Structure::hasTransition(UString::Rep* rep, unsigned attributes)
+bool Structure::hasTransition(StringImpl* rep, unsigned attributes)
 {
     return transitionTableHasTransition(make_pair(rep, attributes));
 }
@@ -965,7 +965,7 @@ size_t Structure::remove(const Identifier& propertyName)
 
     checkConsistency();
 
-    UString::Rep* rep = propertyName._ustring.rep();
+    StringImpl* rep = propertyName.impl();
 
     if (!m_propertyTable)
         return notFound;
@@ -979,7 +979,7 @@ size_t Structure::remove(const Identifier& propertyName)
     unsigned i = rep->existingHash();
     unsigned k = 0;
     unsigned entryIndex;
-    UString::Rep* key = 0;
+    StringImpl* key = 0;
     while (1) {
         entryIndex = m_propertyTable->entryIndices[i & m_propertyTable->sizeMask];
         if (entryIndex == emptyEntryIndex)
@@ -1241,7 +1241,7 @@ void Structure::checkConsistency()
     unsigned nonEmptyEntryCount = 0;
     for (unsigned c = 1; c <= m_propertyTable->keyCount + m_propertyTable->deletedSentinelCount; ++c) {
         ASSERT(m_hasNonEnumerableProperties || !(m_propertyTable->entries()[c].attributes & DontEnum));
-        UString::Rep* rep = m_propertyTable->entries()[c].key;
+        StringImpl* rep = m_propertyTable->entries()[c].key;
         ASSERT(m_propertyTable->entries()[c].offset >= m_anonymousSlotCount);
         if (!rep)
             continue;
diff --git a/JavaScriptCore/runtime/Structure.h b/JavaScriptCore/runtime/Structure.h
index 968443a..f480051 100644
--- a/JavaScriptCore/runtime/Structure.h
+++ b/JavaScriptCore/runtime/Structure.h
@@ -106,20 +106,20 @@ namespace JSC {
         bool isUsingInlineStorage() const;
 
         size_t get(const Identifier& propertyName);
-        size_t get(const UString::Rep* rep, unsigned& attributes, JSCell*& specificValue);
+        size_t get(const StringImpl* rep, unsigned& attributes, JSCell*& specificValue);
         size_t get(const Identifier& propertyName, unsigned& attributes, JSCell*& specificValue)
         {
             ASSERT(!propertyName.isNull());
-            return get(propertyName.ustring().rep(), attributes, specificValue);
+            return get(propertyName.impl(), attributes, specificValue);
         }
         bool transitionedFor(const JSCell* specificValue)
         {
             return m_specificValueInPrevious == specificValue;
         }
-        bool hasTransition(UString::Rep*, unsigned attributes);
+        bool hasTransition(StringImpl*, unsigned attributes);
         bool hasTransition(const Identifier& propertyName, unsigned attributes)
         {
-            return hasTransition(propertyName._ustring.rep(), attributes);
+            return hasTransition(propertyName.impl(), attributes);
         }
 
         bool hasGetterSetterProperties() const { return m_hasGetterSetterProperties; }
@@ -210,7 +210,7 @@ namespace JSC {
         mutable RefPtr<StructureChain> m_cachedPrototypeChain;
 
         RefPtr<Structure> m_previous;
-        RefPtr<UString::Rep> m_nameInPrevious;
+        RefPtr<StringImpl> m_nameInPrevious;
         JSCell* m_specificValueInPrevious;
 
         // 'm_isUsingSingleSlot' indicates whether we are using the single transition optimisation.
@@ -254,7 +254,7 @@ namespace JSC {
         if (!m_propertyTable)
             return WTF::notFound;
 
-        UString::Rep* rep = propertyName._ustring.rep();
+        StringImpl* rep = propertyName.impl();
 
         unsigned i = rep->existingHash();
 
diff --git a/JavaScriptCore/runtime/StructureTransitionTable.h b/JavaScriptCore/runtime/StructureTransitionTable.h
index d1dc2d9..7e9d7ff 100644
--- a/JavaScriptCore/runtime/StructureTransitionTable.h
+++ b/JavaScriptCore/runtime/StructureTransitionTable.h
@@ -38,7 +38,7 @@ namespace JSC {
     class Structure;
 
     struct StructureTransitionTableHash {
-        typedef std::pair<RefPtr<UString::Rep>, unsigned> Key;
+        typedef std::pair<RefPtr<StringImpl>, unsigned> Key;
         static unsigned hash(const Key& p)
         {
             return p.first->existingHash();
@@ -53,7 +53,7 @@ namespace JSC {
     };
 
     struct StructureTransitionTableHashTraits {
-        typedef WTF::HashTraits<RefPtr<UString::Rep> > FirstTraits;
+        typedef WTF::HashTraits<RefPtr<StringImpl> > FirstTraits;
         typedef WTF::GenericHashTraits<unsigned> SecondTraits;
         typedef std::pair<FirstTraits::TraitType, SecondTraits::TraitType > TraitType;
 
diff --git a/JavaScriptCore/runtime/SymbolTable.h b/JavaScriptCore/runtime/SymbolTable.h
index 2717075..1b1636d 100644
--- a/JavaScriptCore/runtime/SymbolTable.h
+++ b/JavaScriptCore/runtime/SymbolTable.h
@@ -119,7 +119,7 @@ namespace JSC {
         static const bool needsDestruction = false;
     };
 
-    typedef HashMap<RefPtr<UString::Rep>, SymbolTableEntry, IdentifierRepHash, HashTraits<RefPtr<UString::Rep> >, SymbolTableIndexHashTraits> SymbolTable;
+    typedef HashMap<RefPtr<StringImpl>, SymbolTableEntry, IdentifierRepHash, HashTraits<RefPtr<StringImpl> >, SymbolTableIndexHashTraits> SymbolTable;
 
     class SharedSymbolTable : public SymbolTable, public RefCounted<SharedSymbolTable> {
     public:
diff --git a/JavaScriptCore/runtime/UString.cpp b/JavaScriptCore/runtime/UString.cpp
index 5ef1e9e..608639b 100644
--- a/JavaScriptCore/runtime/UString.cpp
+++ b/JavaScriptCore/runtime/UString.cpp
@@ -54,32 +54,20 @@ namespace JSC {
 extern const double NaN;
 extern const double Inf;
 
-// The null string is immutable, except for refCount.
-UString* UString::s_nullUString;
-
 COMPILE_ASSERT(sizeof(UString) == sizeof(void*), UString_should_stay_small);
 
-void initializeUString()
-{
-    // StringImpl::empty() does not construct its static string in a threadsafe fashion,
-    // so ensure it has been initialized from here.
-    StringImpl::empty();
-
-    UString::s_nullUString = new UString;
-}
-
 UString::UString(const char* c)
-    : m_rep(Rep::create(c))
+    : m_impl(StringImpl::create(c))
 {
 }
 
 UString::UString(const char* c, unsigned length)
-    : m_rep(Rep::create(c, length))
+    : m_impl(StringImpl::create(c, length))
 {
 }
 
 UString::UString(const UChar* c, unsigned length)
-    : m_rep(Rep::create(c, length))
+    : m_impl(StringImpl::create(c, length))
 {
 }
 
@@ -418,10 +406,10 @@ uint32_t UString::toStrictUInt32(bool* ok) const
         *ok = false;
 
     // Empty string is not OK.
-    unsigned len = m_rep->length();
+    unsigned len = m_impl->length();
     if (len == 0)
         return 0;
-    const UChar* p = m_rep->characters();
+    const UChar* p = m_impl->characters();
     unsigned short c = p[0];
 
     // If the first digit is 0, only 0 itself is OK.
@@ -552,7 +540,7 @@ UString UString::substr(unsigned pos, unsigned len) const
     if (pos == 0 && len == s)
         return *this;
 
-    return UString(Rep::create(m_rep, pos, len));
+    return UString(StringImpl::create(m_impl, pos, len));
 }
 
 bool operator==(const UString& s1, const char *s2)
diff --git a/JavaScriptCore/runtime/UString.h b/JavaScriptCore/runtime/UString.h
index 7d7b6eb..f8e383e 100644
--- a/JavaScriptCore/runtime/UString.h
+++ b/JavaScriptCore/runtime/UString.h
@@ -45,9 +45,6 @@ namespace JSC {
         friend class JIT;
 
     public:
-        typedef StringImpl Rep;
-    
-    public:
         UString() {}
         UString(const char*); // Constructor for null-terminated string.
         UString(const char*, unsigned length);
@@ -55,20 +52,20 @@ namespace JSC {
         UString(const Vector<UChar>& buffer);
 
         UString(const UString& s)
-            : m_rep(s.m_rep)
+            : m_impl(s.m_impl)
         {
         }
 
         // Special constructor for cases where we overwrite an object in place.
         UString(PlacementNewAdoptType)
-            : m_rep(PlacementNewAdopt)
+            : m_impl(PlacementNewAdopt)
         {
         }
 
         template<size_t inlineCapacity>
         static PassRefPtr<StringImpl> adopt(Vector<UChar, inlineCapacity>& vector)
         {
-            return Rep::adopt(vector);
+            return StringImpl::adopt(vector);
         }
 
         static UString from(int);
@@ -93,20 +90,20 @@ namespace JSC {
 
         const UChar* data() const
         {
-            if (!m_rep)
+            if (!m_impl)
                 return 0;
-            return m_rep->characters();
+            return m_impl->characters();
         }
 
         unsigned size() const
         {
-            if (!m_rep)
+            if (!m_impl)
                 return 0;
-            return m_rep->length();
+            return m_impl->length();
         }
 
-        bool isNull() const { return !m_rep; }
-        bool isEmpty() const { return !m_rep || !m_rep->length(); }
+        bool isNull() const { return !m_impl; }
+        bool isEmpty() const { return !m_impl || !m_impl->length(); }
 
         bool is8Bit() const;
 
@@ -130,36 +127,31 @@ namespace JSC {
 
         UString substr(unsigned pos = 0, unsigned len = 0xFFFFFFFF) const;
 
-        static const UString& null() { return *s_nullUString; }
-
-        Rep* rep() const { return m_rep.get(); }
+        StringImpl* impl() const { return m_impl.get(); }
 
-        UString(PassRefPtr<Rep> r)
-            : m_rep(r)
+        UString(PassRefPtr<StringImpl> r)
+            : m_impl(r)
         {
         }
 
         size_t cost() const
         {
-            if (!m_rep)
+            if (!m_impl)
                 return 0;
-            return m_rep->cost();
+            return m_impl->cost();
         }
 
         ALWAYS_INLINE ~UString() { }
     private:
-        RefPtr<Rep> m_rep;
+        RefPtr<StringImpl> m_impl;
 
-        static UString* s_nullUString;
-
-        friend void initializeUString();
         friend bool operator==(const UString&, const UString&);
     };
 
     ALWAYS_INLINE bool operator==(const UString& s1, const UString& s2)
     {
-        UString::Rep* rep1 = s1.rep();
-        UString::Rep* rep2 = s2.rep();
+        StringImpl* rep1 = s1.impl();
+        StringImpl* rep2 = s2.impl();
         unsigned size1 = 0;
         unsigned size2 = 0;
 
@@ -226,7 +218,7 @@ namespace JSC {
 
     inline int codePointCompare(const UString& s1, const UString& s2)
     {
-        return codePointCompare(s1.rep(), s2.rep());
+        return codePointCompare(s1.impl(), s2.impl());
     }
 
     // Rule from ECMA 15.2 about what an array index is.
@@ -244,13 +236,11 @@ namespace JSC {
     // huge buffer.
     static const unsigned minShareSize = Heap::minExtraCost / sizeof(UChar);
 
-    struct IdentifierRepHash : PtrHash<RefPtr<JSC::UString::Rep> > {
-        static unsigned hash(const RefPtr<JSC::UString::Rep>& key) { return key->existingHash(); }
-        static unsigned hash(JSC::UString::Rep* key) { return key->existingHash(); }
+    struct IdentifierRepHash : PtrHash<RefPtr<StringImpl> > {
+        static unsigned hash(const RefPtr<StringImpl>& key) { return key->existingHash(); }
+        static unsigned hash(StringImpl* key) { return key->existingHash(); }
     };
 
-    void initializeUString();
-
     template<typename StringType>
     class StringTypeAdapter {
     };
@@ -651,19 +641,19 @@ namespace WTF {
     template<typename T> struct DefaultHash;
     template<typename T> struct StrHash;
 
-    template<> struct StrHash<JSC::UString::Rep*> {
-        static unsigned hash(const JSC::UString::Rep* key) { return key->hash(); }
-        static bool equal(const JSC::UString::Rep* a, const JSC::UString::Rep* b) { return ::equal(a, b); }
+    template<> struct StrHash<StringImpl*> {
+        static unsigned hash(const StringImpl* key) { return key->hash(); }
+        static bool equal(const StringImpl* a, const StringImpl* b) { return ::equal(a, b); }
         static const bool safeToCompareToEmptyOrDeleted = false;
     };
 
-    template<> struct StrHash<RefPtr<JSC::UString::Rep> > : public StrHash<JSC::UString::Rep*> {
-        using StrHash<JSC::UString::Rep*>::hash;
-        static unsigned hash(const RefPtr<JSC::UString::Rep>& key) { return key->hash(); }
-        using StrHash<JSC::UString::Rep*>::equal;
-        static bool equal(const RefPtr<JSC::UString::Rep>& a, const RefPtr<JSC::UString::Rep>& b) { return ::equal(a.get(), b.get()); }
-        static bool equal(const JSC::UString::Rep* a, const RefPtr<JSC::UString::Rep>& b) { return ::equal(a, b.get()); }
-        static bool equal(const RefPtr<JSC::UString::Rep>& a, const JSC::UString::Rep* b) { return ::equal(a.get(), b); }
+    template<> struct StrHash<RefPtr<StringImpl> > : public StrHash<StringImpl*> {
+        using StrHash<StringImpl*>::hash;
+        static unsigned hash(const RefPtr<StringImpl>& key) { return key->hash(); }
+        using StrHash<StringImpl*>::equal;
+        static bool equal(const RefPtr<StringImpl>& a, const RefPtr<StringImpl>& b) { return ::equal(a.get(), b.get()); }
+        static bool equal(const StringImpl* a, const RefPtr<StringImpl>& b) { return ::equal(a, b.get()); }
+        static bool equal(const RefPtr<StringImpl>& a, const StringImpl* b) { return ::equal(a.get(), b); }
 
         static const bool safeToCompareToEmptyOrDeleted = false;
     };
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 0bff7a0..0a62793 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,41 @@
+2010-08-10  Gavin Barraclough  <barraclough at apple.com>
+
+        Rubber stamped by Sam Weinig
+
+        Bug 43817 - Remove UString::Rep
+        UString::Rep has for a long time been replaced by UStringImpl (Rep
+        remaining as a typedef).  UStringImpl has since been removed too
+        (unified with StringImpl). Remove Rep, rename rep() to impl() and
+        m_rep to m_impl.  Also add impl() method to Identifier, and rename
+        its UString member from _ustring to m_string.
+
+        * bindings/js/JSDOMBinding.cpp:
+        (WebCore::findAtomicString):
+        * bindings/js/JSDOMBinding.h:
+        (WebCore::ustringToString):
+        (WebCore::identifierToString):
+        (WebCore::ustringToAtomicString):
+        (WebCore::identifierToAtomicString):
+        * bindings/js/SerializedScriptValue.h:
+        (WebCore::SerializedScriptValueData::SerializedScriptValueData):
+        * bridge/IdentifierRep.cpp:
+        (WebCore::IdentifierRep::get):
+        * bridge/c/c_class.cpp:
+        (JSC::Bindings::CClass::methodsNamed):
+        (JSC::Bindings::CClass::fieldNamed):
+        * bridge/jni/jsc/JavaClassJSC.cpp:
+        (JavaClass::JavaClass):
+        (JavaClass::methodsNamed):
+        (JavaClass::fieldNamed):
+        * bridge/jni/jsc/JavaStringJSC.h:
+        (JSC::Bindings::JavaStringImpl::~JavaStringImpl):
+        (JSC::Bindings::JavaStringImpl::init):
+        (JSC::Bindings::JavaStringImpl::UTF8String):
+        (JSC::Bindings::JavaStringImpl::uchars):
+        (JSC::Bindings::JavaStringImpl::length):
+        (JSC::Bindings::JavaStringImpl::uString):
+        * bridge/jsc/BridgeJSC.h:
+
 2010-08-10  Jian Li  <jianli at chromium.org>
 
         Fix qt build break.
diff --git a/WebCore/bindings/js/JSDOMBinding.cpp b/WebCore/bindings/js/JSDOMBinding.cpp
index 87512f2..96394eb 100644
--- a/WebCore/bindings/js/JSDOMBinding.cpp
+++ b/WebCore/bindings/js/JSDOMBinding.cpp
@@ -501,7 +501,7 @@ AtomicStringImpl* findAtomicString(const Identifier& identifier)
 {
     if (identifier.isNull())
         return 0;
-    StringImpl* impl = identifier.ustring().rep();
+    StringImpl* impl = identifier.impl();
     ASSERT(impl->existingHash());
     return AtomicString::find(impl->characters(), impl->length(), impl->existingHash());
 }
diff --git a/WebCore/bindings/js/JSDOMBinding.h b/WebCore/bindings/js/JSDOMBinding.h
index 2e78eb2..749b0d7 100644
--- a/WebCore/bindings/js/JSDOMBinding.h
+++ b/WebCore/bindings/js/JSDOMBinding.h
@@ -339,7 +339,7 @@ namespace WebCore {
 
     inline String ustringToString(const JSC::UString& u)
     {
-        return u.rep();
+        return u.impl();
     }
 
     inline JSC::UString stringToUString(const String& s)
@@ -349,17 +349,17 @@ namespace WebCore {
 
     inline String identifierToString(const JSC::Identifier& i)
     {
-        return i.ustring().rep();
+        return i.impl();
     }
 
     inline AtomicString ustringToAtomicString(const JSC::UString& u)
     {
-        return AtomicString(u.rep());
+        return AtomicString(u.impl());
     }
 
     inline AtomicString identifierToAtomicString(const JSC::Identifier& identifier)
     {
-        return AtomicString(identifier.ustring().rep());
+        return AtomicString(identifier.impl());
     }
 
 } // namespace WebCore
diff --git a/WebCore/bindings/js/SerializedScriptValue.h b/WebCore/bindings/js/SerializedScriptValue.h
index c165810..2b7d222 100644
--- a/WebCore/bindings/js/SerializedScriptValue.h
+++ b/WebCore/bindings/js/SerializedScriptValue.h
@@ -90,7 +90,7 @@ namespace WebCore {
 
         explicit SerializedScriptValueData(const String& string)
             : m_type(StringType)
-            , m_string(string.crossThreadString()) // FIXME: Should be able to just share the Rep
+            , m_string(string.crossThreadString()) // FIXME: Should be able to just share the StringImpl
         {
         }
 
diff --git a/WebCore/bridge/IdentifierRep.cpp b/WebCore/bridge/IdentifierRep.cpp
index bc599de..fed47ca 100644
--- a/WebCore/bridge/IdentifierRep.cpp
+++ b/WebCore/bridge/IdentifierRep.cpp
@@ -78,7 +78,7 @@ IdentifierRep* IdentifierRep::get(int intID)
     return result.first->second;
 }
 
-typedef HashMap<RefPtr<JSC::UString::Rep>, IdentifierRep*> StringIdentifierMap;
+typedef HashMap<RefPtr<StringImpl>, IdentifierRep*> StringIdentifierMap;
 
 static StringIdentifierMap& stringIdentifierMap()
 {
@@ -93,7 +93,7 @@ IdentifierRep* IdentifierRep::get(const char* name)
         return 0;
   
     UString string = stringToUString(String::fromUTF8WithLatin1Fallback(name, strlen(name)));
-    pair<StringIdentifierMap::iterator, bool> result = stringIdentifierMap().add(string.rep(), 0);
+    pair<StringIdentifierMap::iterator, bool> result = stringIdentifierMap().add(string.impl(), 0);
     if (result.second) {
         ASSERT(!result.first->second);
         result.first->second = new IdentifierRep(name);
diff --git a/WebCore/bridge/c/c_class.cpp b/WebCore/bridge/c/c_class.cpp
index ea71638..694b887 100644
--- a/WebCore/bridge/c/c_class.cpp
+++ b/WebCore/bridge/c/c_class.cpp
@@ -75,7 +75,7 @@ MethodList CClass::methodsNamed(const Identifier& identifier, Instance* instance
 {
     MethodList methodList;
 
-    Method* method = _methods.get(identifier.ustring().rep());
+    Method* method = _methods.get(identifier.ustring().impl());
     if (method) {
         methodList.append(method);
         return methodList;
@@ -88,7 +88,7 @@ MethodList CClass::methodsNamed(const Identifier& identifier, Instance* instance
         Method* aMethod = new CMethod(ident); // deleted in the CClass destructor
         {
             JSLock lock(SilenceAssertionsOnly);
-            _methods.set(identifier.ustring().rep(), aMethod);
+            _methods.set(identifier.ustring().impl(), aMethod);
         }
         methodList.append(aMethod);
     }
@@ -98,7 +98,7 @@ MethodList CClass::methodsNamed(const Identifier& identifier, Instance* instance
 
 Field* CClass::fieldNamed(const Identifier& identifier, Instance* instance) const
 {
-    Field* aField = _fields.get(identifier.ustring().rep());
+    Field* aField = _fields.get(identifier.ustring().impl());
     if (aField)
         return aField;
     
@@ -109,7 +109,7 @@ Field* CClass::fieldNamed(const Identifier& identifier, Instance* instance) cons
         aField = new CField(ident); // deleted in the CClass destructor
         {
             JSLock lock(SilenceAssertionsOnly);
-            _fields.set(identifier.ustring().rep(), aField);
+            _fields.set(identifier.ustring().impl(), aField);
         }
     }
     return aField;
diff --git a/WebCore/bridge/jni/jsc/JavaClassJSC.cpp b/WebCore/bridge/jni/jsc/JavaClassJSC.cpp
index 780c4fc..43cdc96 100644
--- a/WebCore/bridge/jni/jsc/JavaClassJSC.cpp
+++ b/WebCore/bridge/jni/jsc/JavaClassJSC.cpp
@@ -63,7 +63,7 @@ JavaClass::JavaClass(jobject anInstance)
             JavaField* aField = new JavaField(env, aJField); // deleted in the JavaClass destructor
             {
                 JSLock lock(SilenceAssertionsOnly);
-                m_fields.set(((UString)aField->name()).rep(), aField);
+                m_fields.set(((UString)aField->name()).impl(), aField);
             }
             env->DeleteLocalRef(aJField);
         }
@@ -80,10 +80,10 @@ JavaClass::JavaClass(jobject anInstance)
             {
                 JSLock lock(SilenceAssertionsOnly);
 
-                methodList = m_methods.get(((UString)aMethod->name()).rep());
+                methodList = m_methods.get(((UString)aMethod->name()).impl());
                 if (!methodList) {
                     methodList = new MethodList();
-                    m_methods.set(((UString)aMethod->name()).rep(), methodList);
+                    m_methods.set(((UString)aMethod->name()).impl(), methodList);
                 }
             }
             methodList->append(aMethod);
@@ -115,7 +115,7 @@ JavaClass::~JavaClass()
 
 MethodList JavaClass::methodsNamed(const Identifier& identifier, Instance*) const
 {
-    MethodList* methodList = m_methods.get(identifier.ustring().rep());
+    MethodList* methodList = m_methods.get(identifier.ustring().impl());
 
     if (methodList)
         return *methodList;
@@ -124,7 +124,7 @@ MethodList JavaClass::methodsNamed(const Identifier& identifier, Instance*) cons
 
 Field* JavaClass::fieldNamed(const Identifier& identifier, Instance*) const
 {
-    return m_fields.get(identifier.ustring().rep());
+    return m_fields.get(identifier.ustring().impl());
 }
 
 bool JavaClass::isNumberClass() const
diff --git a/WebCore/bridge/jni/jsc/JavaStringJSC.h b/WebCore/bridge/jni/jsc/JavaStringJSC.h
index 0a7dad5..290c81a 100644
--- a/WebCore/bridge/jni/jsc/JavaStringJSC.h
+++ b/WebCore/bridge/jni/jsc/JavaStringJSC.h
@@ -40,13 +40,13 @@ public:
     ~JavaStringImpl()
     {
         JSLock lock(SilenceAssertionsOnly);
-        m_rep = 0;
+        m_impl = 0;
     }
 
     void init()
     {
         JSLock lock(SilenceAssertionsOnly);
-        m_rep = UString().rep();
+        m_impl = UString().impl();
     }
 
     void init(JNIEnv* e, jstring s)
@@ -55,7 +55,7 @@ public:
         const jchar* uc = getUCharactersFromJStringInEnv(e, s);
         {
             JSLock lock(SilenceAssertionsOnly);
-            m_rep = UString(reinterpret_cast<const UChar*>(uc), size).rep();
+            m_impl = UString(reinterpret_cast<const UChar*>(uc), size).impl();
         }
         releaseUCharactersForJStringInEnv(e, s, uc);
     }
@@ -64,16 +64,16 @@ public:
     {
         if (!m_utf8String.data()) {
             JSLock lock(SilenceAssertionsOnly);
-            m_utf8String = UString(m_rep).UTF8String();
+            m_utf8String = UString(m_impl).UTF8String();
         }
         return m_utf8String.data();
     }
-    const jchar* uchars() const { return (const jchar*)m_rep->characters(); }
-    int length() const { return m_rep->length(); }
-    UString uString() const { return UString(m_rep); }
+    const jchar* uchars() const { return (const jchar*)m_impl->characters(); }
+    int length() const { return m_impl->length(); }
+    UString uString() const { return UString(m_impl); }
 
 private:
-    RefPtr<UString::Rep> m_rep;
+    RefPtr<StringImpl> m_impl;
     mutable CString m_utf8String;
 };
 
diff --git a/WebCore/bridge/jsc/BridgeJSC.h b/WebCore/bridge/jsc/BridgeJSC.h
index 44ce4d1..9cc9140 100644
--- a/WebCore/bridge/jsc/BridgeJSC.h
+++ b/WebCore/bridge/jsc/BridgeJSC.h
@@ -140,9 +140,9 @@ protected:
 
 const char* signatureForParameters(const ArgList&);
 
-typedef HashMap<RefPtr<UString::Rep>, MethodList*> MethodListMap;
-typedef HashMap<RefPtr<UString::Rep>, Method*> MethodMap;
-typedef HashMap<RefPtr<UString::Rep>, Field*> FieldMap;
+typedef HashMap<RefPtr<StringImpl>, MethodList*> MethodListMap;
+typedef HashMap<RefPtr<StringImpl>, Method*> MethodMap;
+typedef HashMap<RefPtr<StringImpl>, Field*> FieldMap;
 
 } // namespace Bindings
 
diff --git a/WebKit/mac/ChangeLog b/WebKit/mac/ChangeLog
index 269110f..5f867ce 100644
--- a/WebKit/mac/ChangeLog
+++ b/WebKit/mac/ChangeLog
@@ -1,3 +1,18 @@
+2010-08-10  Gavin Barraclough  <barraclough at apple.com>
+
+        Rubber stamped by Sam Weinig
+
+        Bug 43817 - Remove UString::Rep
+        UString::Rep has for a long time been replaced by UStringImpl (Rep
+        remaining as a typedef).  UStringImpl has since been removed too
+        (unified with StringImpl). Remove Rep, rename rep() to impl() and
+        m_rep to m_impl.  Also add impl() method to Identifier, and rename
+        its UString member from _ustring to m_string.
+
+        * Plugins/Hosted/ProxyInstance.mm:
+        (WebKit::ProxyInstance::methodsNamed):
+        (WebKit::ProxyInstance::fieldNamed):
+
 2010-08-06  Gavin Barraclough  <barraclough at apple.com>
 
         Rubber stamped by Sam Weinig
diff --git a/WebKit/mac/Plugins/Hosted/ProxyInstance.mm b/WebKit/mac/Plugins/Hosted/ProxyInstance.mm
index b3799ca..fe95120 100644
--- a/WebKit/mac/Plugins/Hosted/ProxyInstance.mm
+++ b/WebKit/mac/Plugins/Hosted/ProxyInstance.mm
@@ -329,7 +329,7 @@ MethodList ProxyInstance::methodsNamed(const Identifier& identifier)
         return MethodList();
     
     // If we already have an entry in the map, use it.
-    MethodMap::iterator existingMapEntry = m_methods.find(identifier.ustring().rep());
+    MethodMap::iterator existingMapEntry = m_methods.find(identifier.impl());
     if (existingMapEntry != m_methods.end()) {
         MethodList methodList;
         if (existingMapEntry->second)
@@ -353,7 +353,7 @@ MethodList ProxyInstance::methodsNamed(const Identifier& identifier)
         return MethodList();
 
     // Add a new entry to the map unless an entry was added while we were in waitForReply.
-    pair<MethodMap::iterator, bool> mapAddResult = m_methods.add(identifier.ustring().rep(), 0);
+    pair<MethodMap::iterator, bool> mapAddResult = m_methods.add(identifier.impl(), 0);
     if (mapAddResult.second && reply->m_result)
         mapAddResult.first->second = new ProxyMethod(methodName);
 
@@ -369,7 +369,7 @@ Field* ProxyInstance::fieldNamed(const Identifier& identifier)
         return 0;
     
     // If we already have an entry in the map, use it.
-    FieldMap::iterator existingMapEntry = m_fields.find(identifier.ustring().rep());
+    FieldMap::iterator existingMapEntry = m_fields.find(identifier.impl());
     if (existingMapEntry != m_fields.end())
         return existingMapEntry->second;
     
@@ -389,7 +389,7 @@ Field* ProxyInstance::fieldNamed(const Identifier& identifier)
         return 0;
     
     // Add a new entry to the map unless an entry was added while we were in waitForReply.
-    pair<FieldMap::iterator, bool> mapAddResult = m_fields.add(identifier.ustring().rep(), 0);
+    pair<FieldMap::iterator, bool> mapAddResult = m_fields.add(identifier.impl(), 0);
     if (mapAddResult.second && reply->m_result)
         mapAddResult.first->second = new ProxyField(propertyName);
     return mapAddResult.first->second;

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list