diff options
author | Simon Hausmann <simon.hausmann@nokia.com> | 2009-06-15 09:06:43 (GMT) |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2009-06-15 09:31:31 (GMT) |
commit | c411f16870f112c3407c28c22b617f613a82cff4 (patch) | |
tree | 29a1bcd590c8b31af2aab445bfe8a978dc5bf582 /src/3rdparty/webkit/JavaScriptCore/runtime/SmallStrings.cpp | |
parent | 3d77b56b32a0c53ec0bbfaa07236fedb900ff336 (diff) | |
download | Qt-c411f16870f112c3407c28c22b617f613a82cff4.zip Qt-c411f16870f112c3407c28c22b617f613a82cff4.tar.gz Qt-c411f16870f112c3407c28c22b617f613a82cff4.tar.bz2 |
Updated WebKit from /home/shausman/src/webkit/trunk to qtwebkit-4.6-snapshot-15062009 ( 65232bf00dc494ebfd978f998c88f58d18ecce1e )
Diffstat (limited to 'src/3rdparty/webkit/JavaScriptCore/runtime/SmallStrings.cpp')
-rw-r--r-- | src/3rdparty/webkit/JavaScriptCore/runtime/SmallStrings.cpp | 68 |
1 files changed, 42 insertions, 26 deletions
diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/SmallStrings.cpp b/src/3rdparty/webkit/JavaScriptCore/runtime/SmallStrings.cpp index 06811b9..87b49f0 100644 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/SmallStrings.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/SmallStrings.cpp @@ -29,48 +29,52 @@ #include "JSGlobalObject.h" #include "JSString.h" +#include <wtf/Noncopyable.h> + namespace JSC { +static const unsigned numCharactersToStore = 0x100; -class SmallStringsStorage { +class SmallStringsStorage : Noncopyable { public: SmallStringsStorage(); - ~SmallStringsStorage(); - UString::Rep* rep(unsigned char character) { return &reps[character]; } + UString::Rep* rep(unsigned char character) { return &m_reps[character]; } private: - UChar characters[0x100]; - UString::Rep* reps; + UChar m_characters[numCharactersToStore]; + UString::BaseString m_base; + UString::Rep m_reps[numCharactersToStore]; }; SmallStringsStorage::SmallStringsStorage() - : reps(static_cast<UString::Rep*>(fastZeroedMalloc(sizeof(UString::Rep) * 0x100))) + : m_base(m_characters, numCharactersToStore) { - for (unsigned i = 0; i < 0x100; ++i) { - characters[i] = i; - reps[i].offset = i; - reps[i].len = 1; - reps[i].rc = 1; - reps[i].baseString = &reps[0]; - } - reps[0].rc = 0x101; - reps[0].buf = characters; - + m_base.rc = numCharactersToStore + 1; // make sure UString doesn't try to reuse the buffer by pretending we have one more character in it - reps[0].usedCapacity = 0x101; - reps[0].capacity = 0x101; -} + m_base.usedCapacity = numCharactersToStore + 1; + m_base.capacity = numCharactersToStore + 1; + m_base.checkConsistency(); -SmallStringsStorage::~SmallStringsStorage() -{ - fastFree(reps); + for (unsigned i = 0; i < numCharactersToStore; ++i) + m_characters[i] = i; + + memset(&m_reps, 0, sizeof(m_reps)); + for (unsigned i = 0; i < numCharactersToStore; ++i) { + m_reps[i].offset = i; + m_reps[i].len = 1; + m_reps[i].rc = 1; + m_reps[i].setBaseString(&m_base); + m_reps[i].checkConsistency(); + } } SmallStrings::SmallStrings() : m_emptyString(0) , m_storage(0) { - for (unsigned i = 0; i < 0x100; ++i) + COMPILE_ASSERT(numCharactersToStore == sizeof(m_singleCharacterStrings) / sizeof(m_singleCharacterStrings[0]), IsNumCharactersConstInSyncWithClassUsage); + + for (unsigned i = 0; i < numCharactersToStore; ++i) m_singleCharacterStrings[i] = 0; } @@ -82,12 +86,24 @@ void SmallStrings::mark() { if (m_emptyString && !m_emptyString->marked()) m_emptyString->mark(); - for (unsigned i = 0; i < 0x100; ++i) { + for (unsigned i = 0; i < numCharactersToStore; ++i) { if (m_singleCharacterStrings[i] && !m_singleCharacterStrings[i]->marked()) m_singleCharacterStrings[i]->mark(); } } - + +unsigned SmallStrings::count() const +{ + unsigned count = 0; + if (m_emptyString) + ++count; + for (unsigned i = 0; i < numCharactersToStore; ++i) { + if (m_singleCharacterStrings[i]) + ++count; + } + return count; +} + void SmallStrings::createEmptyString(JSGlobalData* globalData) { ASSERT(!m_emptyString); @@ -109,4 +125,4 @@ UString::Rep* SmallStrings::singleCharacterStringRep(unsigned char character) return m_storage->rep(character); } -} +} // namespace JSC |