Changeset 146568 in webkit
- Timestamp:
- Mar 22, 2013 12:36:58 AM (11 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r146558 r146568 1 2013-03-22 Ryosuke Niwa <rniwa@webkit.org> 2 3 Leak bots erroneously report JSC::WatchpointSet as leaking 4 https://bugs.webkit.org/show_bug.cgi?id=107781 5 6 Reviewed by Filip Pizlo. 7 8 Since leaks doesn't support tagged pointers, avoid using it by flipping the bit flag to indicate 9 the entry is "fat". We set the flag when the entry is NOT fat; i.e. slim. 10 11 Replaced FatFlag by SlimFlag and initialized m_bits with this flag to indicate that the entry is 12 initially "slim". 13 14 * runtime/SymbolTable.cpp: 15 (JSC::SymbolTableEntry::copySlow): Don't set FatFlag since it has been replaced by SlimFlag. 16 (JSC::SymbolTableEntry::inflateSlow): Ditto. 17 18 * runtime/SymbolTable.h: 19 (JSC::SymbolTableEntry::Fast::Fast): Set SlimFlag by default. 20 (JSC::SymbolTableEntry::Fast::isNull): Ignore SlimFlag. 21 (JSC::SymbolTableEntry::Fast::isFat): An entry is fat when m_bits is not entirely zero and SlimFlag 22 is not set. 23 24 (JSC::SymbolTableEntry::SymbolTableEntry): Set SlimFlag by default. 25 (JSC::SymbolTableEntry::SymbolTableEntry::getFast): Set SlimFlag when creating Fast from a fat entry. 26 (JSC::SymbolTableEntry::isNull): Ignore SlimFlag. 27 (JSC::SymbolTableEntry::FatEntry::FatEntry): Strip SlimFlag. 28 (JSC::SymbolTableEntry::isFat): An entry is fat when m_bits is not entirely zero and SlimFlag is unset. 29 (JSC::SymbolTableEntry::fatEntry): Don't strip FatFlag as this flag doesn't exist anymore. 30 (JSC::SymbolTableEntry::pack): Preserve SlimFlag. 31 32 (JSC::SymbolTableIndexHashTraits): empty value is no longer zero so don't set emptyValueIsZero true. 33 1 34 2013-03-21 Mark Hahnenberg <mhahnenberg@apple.com> 2 35 -
trunk/Source/JavaScriptCore/runtime/SymbolTable.cpp
r126695 r146568 39 39 FatEntry* newFatEntry = new FatEntry(*other.fatEntry()); 40 40 freeFatEntry(); 41 m_bits = bitwise_cast<intptr_t>(newFatEntry) | FatFlag;41 m_bits = bitwise_cast<intptr_t>(newFatEntry); 42 42 return *this; 43 43 } … … 95 95 { 96 96 FatEntry* entry = new FatEntry(m_bits); 97 m_bits = bitwise_cast<intptr_t>(entry) | FatFlag;97 m_bits = bitwise_cast<intptr_t>(entry); 98 98 return entry; 99 99 } -
trunk/Source/JavaScriptCore/runtime/SymbolTable.h
r132566 r146568 94 94 public: 95 95 Fast() 96 : m_bits( 0)96 : m_bits(SlimFlag) 97 97 { 98 98 } … … 105 105 bool isNull() const 106 106 { 107 return ! m_bits;107 return !(m_bits & ~SlimFlag); 108 108 } 109 109 … … 130 130 bool isFat() const 131 131 { 132 return m_bits & FatFlag;132 return !(m_bits & SlimFlag); 133 133 } 134 134 … … 139 139 140 140 SymbolTableEntry() 141 : m_bits( 0)141 : m_bits(SlimFlag) 142 142 { 143 143 } 144 144 145 145 SymbolTableEntry(int index) 146 : m_bits( 0)146 : m_bits(SlimFlag) 147 147 { 148 148 ASSERT(isValidIndex(index)); … … 151 151 152 152 SymbolTableEntry(int index, unsigned attributes) 153 : m_bits( 0)153 : m_bits(SlimFlag) 154 154 { 155 155 ASSERT(isValidIndex(index)); … … 163 163 164 164 SymbolTableEntry(const SymbolTableEntry& other) 165 : m_bits( 0)165 : m_bits(SlimFlag) 166 166 { 167 167 *this = other; … … 179 179 bool isNull() const 180 180 { 181 return ! bits();181 return !(bits() & ~SlimFlag); 182 182 } 183 183 … … 197 197 wasFat = isFat(); 198 198 if (wasFat) 199 result.m_bits = fatEntry()->m_bits ;199 result.m_bits = fatEntry()->m_bits | SlimFlag; 200 200 else 201 201 result.m_bits = m_bits; … … 247 247 248 248 private: 249 static const intptr_t FatFlag = 0x1;249 static const intptr_t SlimFlag = 0x1; 250 250 static const intptr_t ReadOnlyFlag = 0x2; 251 251 static const intptr_t DontEnumFlag = 0x4; … … 257 257 public: 258 258 FatEntry(intptr_t bits) 259 : m_bits(bits | FatFlag)259 : m_bits(bits & ~SlimFlag) 260 260 { 261 261 } … … 271 271 bool isFat() const 272 272 { 273 return m_bits & FatFlag;273 return !(m_bits & SlimFlag); 274 274 } 275 275 … … 277 277 { 278 278 ASSERT(isFat()); 279 return bitwise_cast<const FatEntry*>(m_bits & ~FatFlag);279 return bitwise_cast<const FatEntry*>(m_bits); 280 280 } 281 281 … … 283 283 { 284 284 ASSERT(isFat()); 285 return bitwise_cast<FatEntry*>(m_bits & ~FatFlag);285 return bitwise_cast<FatEntry*>(m_bits); 286 286 } 287 287 … … 320 320 void pack(int index, bool readOnly, bool dontEnum) 321 321 { 322 ASSERT(!isFat()); 322 323 intptr_t& bitsRef = bits(); 323 bitsRef = (static_cast<intptr_t>(index) << FlagBits) | NotNullFlag ;324 bitsRef = (static_cast<intptr_t>(index) << FlagBits) | NotNullFlag | SlimFlag; 324 325 if (readOnly) 325 326 bitsRef |= ReadOnlyFlag; … … 337 338 338 339 struct SymbolTableIndexHashTraits : HashTraits<SymbolTableEntry> { 339 static const bool emptyValueIsZero = true;340 340 static const bool needsDestruction = true; 341 341 };
Note: See TracChangeset
for help on using the changeset viewer.