Title: [146568] trunk/Source/_javascript_Core
Revision
146568
Author
[email protected]
Date
2013-03-22 00:36:58 -0700 (Fri, 22 Mar 2013)

Log Message

Leak bots erroneously report JSC::WatchpointSet as leaking
https://bugs.webkit.org/show_bug.cgi?id=107781

Reviewed by Filip Pizlo.

Since leaks doesn't support tagged pointers, avoid using it by flipping the bit flag to indicate
the entry is "fat". We set the flag when the entry is NOT fat; i.e. slim.

Replaced FatFlag by SlimFlag and initialized m_bits with this flag to indicate that the entry is
initially "slim".

* runtime/SymbolTable.cpp:
(JSC::SymbolTableEntry::copySlow): Don't set FatFlag since it has been replaced by SlimFlag.
(JSC::SymbolTableEntry::inflateSlow): Ditto.

* runtime/SymbolTable.h:
(JSC::SymbolTableEntry::Fast::Fast): Set SlimFlag by default.
(JSC::SymbolTableEntry::Fast::isNull): Ignore SlimFlag.
(JSC::SymbolTableEntry::Fast::isFat): An entry is fat when m_bits is not entirely zero and SlimFlag
is not set.

(JSC::SymbolTableEntry::SymbolTableEntry): Set SlimFlag by default.
(JSC::SymbolTableEntry::SymbolTableEntry::getFast): Set SlimFlag when creating Fast from a fat entry.
(JSC::SymbolTableEntry::isNull): Ignore SlimFlag.
(JSC::SymbolTableEntry::FatEntry::FatEntry): Strip SlimFlag.
(JSC::SymbolTableEntry::isFat): An entry is fat when m_bits is not entirely zero and SlimFlag is unset.
(JSC::SymbolTableEntry::fatEntry): Don't strip FatFlag as this flag doesn't exist anymore.
(JSC::SymbolTableEntry::pack): Preserve SlimFlag.

(JSC::SymbolTableIndexHashTraits): empty value is no longer zero so don't set emptyValueIsZero true.

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (146567 => 146568)


--- trunk/Source/_javascript_Core/ChangeLog	2013-03-22 07:19:45 UTC (rev 146567)
+++ trunk/Source/_javascript_Core/ChangeLog	2013-03-22 07:36:58 UTC (rev 146568)
@@ -1,3 +1,36 @@
+2013-03-22  Ryosuke Niwa  <[email protected]>
+
+        Leak bots erroneously report JSC::WatchpointSet as leaking
+        https://bugs.webkit.org/show_bug.cgi?id=107781
+
+        Reviewed by Filip Pizlo.
+
+        Since leaks doesn't support tagged pointers, avoid using it by flipping the bit flag to indicate
+        the entry is "fat". We set the flag when the entry is NOT fat; i.e. slim.
+
+        Replaced FatFlag by SlimFlag and initialized m_bits with this flag to indicate that the entry is
+        initially "slim".
+
+        * runtime/SymbolTable.cpp:
+        (JSC::SymbolTableEntry::copySlow): Don't set FatFlag since it has been replaced by SlimFlag.
+        (JSC::SymbolTableEntry::inflateSlow): Ditto.
+
+        * runtime/SymbolTable.h:
+        (JSC::SymbolTableEntry::Fast::Fast): Set SlimFlag by default.
+        (JSC::SymbolTableEntry::Fast::isNull): Ignore SlimFlag.
+        (JSC::SymbolTableEntry::Fast::isFat): An entry is fat when m_bits is not entirely zero and SlimFlag
+        is not set.
+
+        (JSC::SymbolTableEntry::SymbolTableEntry): Set SlimFlag by default.
+        (JSC::SymbolTableEntry::SymbolTableEntry::getFast): Set SlimFlag when creating Fast from a fat entry.
+        (JSC::SymbolTableEntry::isNull): Ignore SlimFlag.
+        (JSC::SymbolTableEntry::FatEntry::FatEntry): Strip SlimFlag.
+        (JSC::SymbolTableEntry::isFat): An entry is fat when m_bits is not entirely zero and SlimFlag is unset.
+        (JSC::SymbolTableEntry::fatEntry): Don't strip FatFlag as this flag doesn't exist anymore.
+        (JSC::SymbolTableEntry::pack): Preserve SlimFlag.
+
+        (JSC::SymbolTableIndexHashTraits): empty value is no longer zero so don't set emptyValueIsZero true.
+
 2013-03-21  Mark Hahnenberg  <[email protected]>
 
         Objective-C API: Need a good way to preserve custom properties on JS wrappers

Modified: trunk/Source/_javascript_Core/runtime/SymbolTable.cpp (146567 => 146568)


--- trunk/Source/_javascript_Core/runtime/SymbolTable.cpp	2013-03-22 07:19:45 UTC (rev 146567)
+++ trunk/Source/_javascript_Core/runtime/SymbolTable.cpp	2013-03-22 07:36:58 UTC (rev 146568)
@@ -38,7 +38,7 @@
     ASSERT(other.isFat());
     FatEntry* newFatEntry = new FatEntry(*other.fatEntry());
     freeFatEntry();
-    m_bits = bitwise_cast<intptr_t>(newFatEntry) | FatFlag;
+    m_bits = bitwise_cast<intptr_t>(newFatEntry);
     return *this;
 }
 
@@ -94,7 +94,7 @@
 SymbolTableEntry::FatEntry* SymbolTableEntry::inflateSlow()
 {
     FatEntry* entry = new FatEntry(m_bits);
-    m_bits = bitwise_cast<intptr_t>(entry) | FatFlag;
+    m_bits = bitwise_cast<intptr_t>(entry);
     return entry;
 }
 

Modified: trunk/Source/_javascript_Core/runtime/SymbolTable.h (146567 => 146568)


--- trunk/Source/_javascript_Core/runtime/SymbolTable.h	2013-03-22 07:19:45 UTC (rev 146567)
+++ trunk/Source/_javascript_Core/runtime/SymbolTable.h	2013-03-22 07:36:58 UTC (rev 146568)
@@ -93,7 +93,7 @@
         class Fast {
         public:
             Fast()
-                : m_bits(0)
+                : m_bits(SlimFlag)
             {
             }
             
@@ -104,7 +104,7 @@
         
             bool isNull() const
             {
-                return !m_bits;
+                return !(m_bits & ~SlimFlag);
             }
 
             int getIndex() const
@@ -129,7 +129,7 @@
 
             bool isFat() const
             {
-                return m_bits & FatFlag;
+                return !(m_bits & SlimFlag);
             }
             
         private:
@@ -138,19 +138,19 @@
         };
 
         SymbolTableEntry()
-            : m_bits(0)
+            : m_bits(SlimFlag)
         {
         }
 
         SymbolTableEntry(int index)
-            : m_bits(0)
+            : m_bits(SlimFlag)
         {
             ASSERT(isValidIndex(index));
             pack(index, false, false);
         }
 
         SymbolTableEntry(int index, unsigned attributes)
-            : m_bits(0)
+            : m_bits(SlimFlag)
         {
             ASSERT(isValidIndex(index));
             pack(index, attributes & ReadOnly, attributes & DontEnum);
@@ -162,7 +162,7 @@
         }
         
         SymbolTableEntry(const SymbolTableEntry& other)
-            : m_bits(0)
+            : m_bits(SlimFlag)
         {
             *this = other;
         }
@@ -178,7 +178,7 @@
         
         bool isNull() const
         {
-            return !bits();
+            return !(bits() & ~SlimFlag);
         }
 
         int getIndex() const
@@ -196,7 +196,7 @@
             Fast result;
             wasFat = isFat();
             if (wasFat)
-                result.m_bits = fatEntry()->m_bits;
+                result.m_bits = fatEntry()->m_bits | SlimFlag;
             else
                 result.m_bits = m_bits;
             return result;
@@ -246,7 +246,7 @@
         }
         
     private:
-        static const intptr_t FatFlag = 0x1;
+        static const intptr_t SlimFlag = 0x1;
         static const intptr_t ReadOnlyFlag = 0x2;
         static const intptr_t DontEnumFlag = 0x4;
         static const intptr_t NotNullFlag = 0x8;
@@ -256,7 +256,7 @@
             WTF_MAKE_FAST_ALLOCATED;
         public:
             FatEntry(intptr_t bits)
-                : m_bits(bits | FatFlag)
+                : m_bits(bits & ~SlimFlag)
             {
             }
             
@@ -270,19 +270,19 @@
         
         bool isFat() const
         {
-            return m_bits & FatFlag;
+            return !(m_bits & SlimFlag);
         }
         
         const FatEntry* fatEntry() const
         {
             ASSERT(isFat());
-            return bitwise_cast<const FatEntry*>(m_bits & ~FatFlag);
+            return bitwise_cast<const FatEntry*>(m_bits);
         }
         
         FatEntry* fatEntry()
         {
             ASSERT(isFat());
-            return bitwise_cast<FatEntry*>(m_bits & ~FatFlag);
+            return bitwise_cast<FatEntry*>(m_bits);
         }
         
         FatEntry* inflate()
@@ -319,8 +319,9 @@
 
         void pack(int index, bool readOnly, bool dontEnum)
         {
+            ASSERT(!isFat());
             intptr_t& bitsRef = bits();
-            bitsRef = (static_cast<intptr_t>(index) << FlagBits) | NotNullFlag;
+            bitsRef = (static_cast<intptr_t>(index) << FlagBits) | NotNullFlag | SlimFlag;
             if (readOnly)
                 bitsRef |= ReadOnlyFlag;
             if (dontEnum)
@@ -336,7 +337,6 @@
     };
 
     struct SymbolTableIndexHashTraits : HashTraits<SymbolTableEntry> {
-        static const bool emptyValueIsZero = true;
         static const bool needsDestruction = true;
     };
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to