Changeset 39815 in webkit for trunk/JavaScriptCore/runtime/SmallStrings.cpp
- Timestamp:
- Jan 11, 2009, 7:19:23 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/runtime/SmallStrings.cpp
r37938 r39815 30 30 #include "JSString.h" 31 31 32 #include <wtf/Noncopyable.h> 33 32 34 namespace JSC { 35 static const unsigned numCharactersToStore = 0x100; 33 36 34 class SmallStringsStorage {37 class SmallStringsStorage : Noncopyable { 35 38 public: 36 39 SmallStringsStorage(); 37 ~SmallStringsStorage();38 40 39 UString::Rep* rep(unsigned char character) { return & reps[character]; }41 UString::Rep* rep(unsigned char character) { return &m_reps[character]; } 40 42 41 43 private: 42 UChar characters[0x100]; 43 UString::Rep* reps; 44 UChar m_characters[numCharactersToStore]; 45 UString::BaseString m_base; 46 UString::Rep m_reps[numCharactersToStore]; 44 47 }; 45 48 46 49 SmallStringsStorage::SmallStringsStorage() 47 : reps(static_cast<UString::Rep*>(fastZeroedMalloc(sizeof(UString::Rep) * 0x100)))48 50 { 49 for (unsigned i = 0; i < 0x100; ++i) { 50 characters[i] = i; 51 reps[i].offset = i; 52 reps[i].len = 1; 53 reps[i].rc = 1; 54 reps[i].baseString = &reps[0]; 55 } 56 reps[0].rc = 0x101; 57 reps[0].buf = characters; 51 for (unsigned i = 0; i < numCharactersToStore; ++i) 52 m_characters[i] = i; 53 54 m_base.rc = numCharactersToStore + 1; 55 m_base.buf = m_characters; 56 m_base.len = numCharactersToStore; 57 m_base.offset = 0; 58 m_base._hash = 0; 59 m_base.m_baseString = 0; 60 m_base.preCapacity = 0; 61 m_base.usedPreCapacity = 0; 62 m_base.reportedCost = 0; 58 63 59 64 // make sure UString doesn't try to reuse the buffer by pretending we have one more character in it 60 reps[0].usedCapacity = 0x101;61 reps[0].capacity = 0x101;62 } 65 m_base.usedCapacity = numCharactersToStore + 1; 66 m_base.capacity = numCharactersToStore + 1; 67 m_base.checkConsistency(); 63 68 64 SmallStringsStorage::~SmallStringsStorage() 65 { 66 fastFree(reps); 69 memset(&m_reps, 0, sizeof(m_reps)); 70 for (unsigned i = 0; i < numCharactersToStore; ++i) { 71 m_reps[i].offset = i; 72 m_reps[i].len = 1; 73 m_reps[i].rc = 1; 74 m_reps[i].setBaseString(&m_base); 75 m_reps[i].checkConsistency(); 76 } 67 77 } 68 78 … … 71 81 , m_storage(0) 72 82 { 73 for (unsigned i = 0; i < 0x100; ++i) 83 COMPILE_ASSERT(numCharactersToStore == sizeof(m_singleCharacterStrings) / sizeof(m_singleCharacterStrings[0]), IsNumCharactersConstInSyncWithClassUsage); 84 85 for (unsigned i = 0; i < numCharactersToStore; ++i) 74 86 m_singleCharacterStrings[i] = 0; 75 87 } … … 83 95 if (m_emptyString && !m_emptyString->marked()) 84 96 m_emptyString->mark(); 85 for (unsigned i = 0; i < 0x100; ++i) {97 for (unsigned i = 0; i < numCharactersToStore; ++i) { 86 98 if (m_singleCharacterStrings[i] && !m_singleCharacterStrings[i]->marked()) 87 99 m_singleCharacterStrings[i]->mark(); … … 110 122 } 111 123 112 } 124 } // namespace JSC
Note:
See TracChangeset
for help on using the changeset viewer.