Changeset 13120 in webkit for trunk/JavaScriptCore/kjs
- Timestamp:
- Mar 3, 2006, 3:33:05 PM (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/kjs/property_map.cpp
r13066 r13120 101 101 102 102 // This is a method rather than a variable to work around <rdar://problem/4462053> 103 static inline UString::Rep* deletedSentinel() { return reinterpret_cast<UString::Rep*>(-1); } 103 static inline UString::Rep* deletedSentinel() { return reinterpret_cast<UString::Rep*>(0x1); } 104 105 // Returns true if the key is not null or the deleted sentinel, false otherwise 106 static inline bool isValid(UString::Rep* key) 107 { 108 return reinterpret_cast<uintptr_t>(key) & ~0x1; 109 } 104 110 105 111 PropertyMap::~PropertyMap() … … 118 124 for (int i = 0; i < minimumKeysToProcess; i++) { 119 125 UString::Rep *key = entries[i].key; 120 if (key && key != deletedSentinel()) 121 key->deref(); 122 else if (key != deletedSentinel()) 126 if (key) { 127 if (key != deletedSentinel()) 128 key->deref(); 129 } else 123 130 ++minimumKeysToProcess; 124 131 } … … 143 150 for (int i = 0; i < size; i++) { 144 151 UString::Rep *key = entries[i].key; 145 if ( key && key != deletedSentinel()) {152 if (isValid(key)) { 146 153 key->deref(); 147 154 entries[i].key = 0; … … 447 454 Entry &entry = oldTable->entries[i]; 448 455 UString::Rep *key = entry.key; 449 if (key) { 450 // Don't copy deleted-element sentinels. 451 if (key != deletedSentinel()) { 452 int index = entry.index; 453 lastIndexUsed = max(index, lastIndexUsed); 454 insert(key, entry.value, entry.attributes, index); 455 } 456 if (isValid(key)) { 457 int index = entry.index; 458 lastIndexUsed = max(index, lastIndexUsed); 459 insert(key, entry.value, entry.attributes, index); 456 460 } 457 461 } … … 632 636 for (int i = 0; i != size; ++i) { 633 637 UString::Rep *key = entries[i].key; 634 if ( key && key != deletedSentinel()) {638 if (isValid(key)) { 635 639 UString k(key); 636 640 bool fitsInUInt32; … … 655 659 Entry *entries = _table->entries; 656 660 for (int i = 0; i != size; ++i) 657 if ( entries[i].key&& !(entries[i].attributes & (ReadOnly | Function)))661 if (isValid(entries[i].key) && !(entries[i].attributes & (ReadOnly | Function))) 658 662 ++count; 659 663 } … … 691 695 for (int i = 0; i != size; ++i) { 692 696 Entry *e = &entries[i]; 693 if ( e->key&& !(e->attributes & (ReadOnly | Function)))697 if (isValid(e->key) && !(e->attributes & (ReadOnly | Function))) 694 698 *p++ = e; 695 699 }
Note:
See TracChangeset
for help on using the changeset viewer.