Ignore:
Timestamp:
Aug 20, 2009, 11:04:37 AM (16 years ago)
Author:
[email protected]
Message:

Roll out r47571 and related build fixes as it caused us to leak the world without warning.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/parser/ParserArena.h

    r47573 r47582  
    2727#define ParserArena_h
    2828
    29 #include "Identifier.h"
    30 #include <wtf/SegmentedVector.h>
     29#include <wtf/PassRefPtr.h>
     30#include <wtf/RefPtr.h>
     31#include <wtf/Vector.h>
    3132
    3233namespace JSC {
     
    3536    class ParserArenaRefCounted;
    3637
    37     class IdentifierArena {
     38    class ParserArena {
    3839    public:
    39         ALWAYS_INLINE const Identifier& makeIdentifier(JSGlobalData*, const UChar* characters, size_t length);
    40         const Identifier& makeNumericIdentifier(JSGlobalData*, double number);
    41 
    42         void clear() { m_identifiers.clear(); }
    43         bool isEmpty() const { return m_identifiers.isEmpty(); }
    44 
    45     private:
    46         typedef SegmentedVector<Identifier, 64> IdentifierVector;
    47         IdentifierVector m_identifiers;
    48     };
    49 
    50     ALWAYS_INLINE const Identifier& IdentifierArena::makeIdentifier(JSGlobalData* globalData, const UChar* characters, size_t length)
    51     {
    52         m_identifiers.append(Identifier(globalData, characters, length));
    53         return m_identifiers.last();
    54     }
    55 
    56     inline const Identifier& IdentifierArena::makeNumericIdentifier(JSGlobalData* globalData, double number)
    57     {
    58         m_identifiers.append(Identifier(globalData, UString::from(number)));
    59         return m_identifiers.last();
    60     }
    61 
    62     class ParserArena : Noncopyable {
    63     public:
    64         ParserArena();
    65         ~ParserArena();
    66 
    6740        void swap(ParserArena& otherArena)
    6841        {
    69             std::swap(m_freeableMemory, otherArena.m_freeableMemory);
    70             std::swap(m_freeablePoolEnd, otherArena.m_freeablePoolEnd);
    71             m_identifierArena.swap(otherArena.m_identifierArena);
    72             m_freeablePools.swap(otherArena.m_freeablePools);
    7342            m_deletableObjects.swap(otherArena.m_deletableObjects);
    7443            m_refCountedObjects.swap(otherArena.m_refCountedObjects);
    7544        }
     45        ~ParserArena();
    7646
    77         void* allocateFreeable(size_t size)
    78         {
    79             ASSERT(size);
    80             ASSERT(size <= freeablePoolSize);
    81             size_t alignedSize = alignSize(size);
    82             ASSERT(alignedSize <= freeablePoolSize);
    83             if (UNLIKELY(static_cast<size_t>(m_freeablePoolEnd - m_freeableMemory) < alignedSize))
    84                 allocateFreeablePool();
    85             void* block = m_freeableMemory;
    86             m_freeableMemory += alignedSize;
    87             return block;
    88         }
     47        void deleteWithArena(ParserArenaDeletable* object) { m_deletableObjects.append(object); }
     48        void derefWithArena(PassRefPtr<ParserArenaRefCounted> object) { m_refCountedObjects.append(object); }
    8949
    90         void* allocateDeletable(size_t size)
    91         {
    92             ParserArenaDeletable* deletable = static_cast<ParserArenaDeletable*>(fastMalloc(size));
    93             m_deletableObjects.append(deletable);
    94             return deletable;
    95         }
    96 
    97         void derefWithArena(PassRefPtr<ParserArenaRefCounted>);
    9850        bool contains(ParserArenaRefCounted*) const;
    9951        ParserArenaRefCounted* last() const;
    10052        void removeLast();
    10153
    102         bool isEmpty() const;
     54        bool isEmpty() const { return m_deletableObjects.isEmpty() && m_refCountedObjects.isEmpty(); }
    10355        void reset();
    10456
    105         IdentifierArena& identifierArena() { return *m_identifierArena; }
    106 
    10757    private:
    108         static const size_t freeablePoolSize = 8000;
    109 
    110         static size_t alignSize(size_t size)
    111         {
    112             return (size + sizeof(WTF::AllocAlignmentInteger) - 1) & ~(sizeof(WTF::AllocAlignmentInteger) - 1);
    113         }
    114 
    115         void* freeablePool();
    116         void allocateFreeablePool();
    117         void deallocateObjects();
    118 
    119         char* m_freeableMemory;
    120         char* m_freeablePoolEnd;
    121 
    122         OwnPtr<IdentifierArena> m_identifierArena;
    123         Vector<void*> m_freeablePools;
    12458        Vector<ParserArenaDeletable*> m_deletableObjects;
    12559        Vector<RefPtr<ParserArenaRefCounted> > m_refCountedObjects;
Note: See TracChangeset for help on using the changeset viewer.