Changeset 32222 in webkit for trunk/JavaScriptCore/kjs/identifier.cpp
- Timestamp:
- Apr 18, 2008, 12:46:13 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/kjs/identifier.cpp
r31944 r32222 53 53 namespace KJS { 54 54 55 typedef HashSet<UString::Rep*> IdentifierTable; 56 typedef HashMap<const char*, UString::Rep*, PtrHash<const char*> > LiteralIdentifierTable; 55 class IdentifierTable { 56 public: 57 ~IdentifierTable() 58 { 59 HashSet<UString::Rep*>::iterator end = m_table.end(); 60 for (HashSet<UString::Rep*>::iterator iter = m_table.begin(); iter != end; ++iter) 61 (*iter)->identifierTable = 0; 62 } 63 64 std::pair<HashSet<UString::Rep*>::iterator, bool> add(UString::Rep* value) 65 { 66 std::pair<HashSet<UString::Rep*>::iterator, bool> result = m_table.add(value); 67 (*result.first)->identifierTable = this; 68 return result; 69 } 70 71 template<typename U, typename V> 72 std::pair<HashSet<UString::Rep*>::iterator, bool> add(U value) 73 { 74 std::pair<HashSet<UString::Rep*>::iterator, bool> result = m_table.add<U, V>(value); 75 (*result.first)->identifierTable = this; 76 return result; 77 } 78 79 void remove(UString::Rep* r) { m_table.remove(r); } 80 81 private: 82 HashSet<UString::Rep*> m_table; 83 }; 84 85 typedef HashMap<const char*, RefPtr<UString::Rep>, PtrHash<const char*> > LiteralIdentifierTable; 57 86 58 87 static inline IdentifierTable& identifierTable() … … 138 167 139 168 UString::Rep *r = UString::Rep::create(d, static_cast<int>(length)).releaseRef(); 140 r->isIdentifier = true;141 169 r->rc = 0; 142 170 r->_hash = hash; … … 166 194 UString::Rep* addedString = *identifierTable().add<const char*, CStringTranslator>(c).first; 167 195 literalTableLocalRef.add(c, addedString); 168 addedString->ref();169 196 170 197 return addedString; … … 195 222 196 223 UString::Rep *r = UString::Rep::create(d, buf.length).releaseRef(); 197 r->isIdentifier = true;198 224 r->rc = 0; 199 225 r->_hash = hash; … … 216 242 PassRefPtr<UString::Rep> Identifier::addSlowCase(UString::Rep *r) 217 243 { 218 ASSERT(!r->i sIdentifier);244 ASSERT(!r->identifierTable); 219 245 220 246 if (r->len == 0) { … … 223 249 } 224 250 225 UString::Rep *result = *identifierTable().add(r).first; 226 if (result == r) 227 r->isIdentifier = true; 228 return result; 251 return *identifierTable().add(r).first; 229 252 } 230 253 231 254 void Identifier::remove(UString::Rep *r) 232 255 { 233 identifierTable().remove(r);256 r->identifierTable->remove(r); 234 257 } 235 258
Note:
See TracChangeset
for help on using the changeset viewer.