X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/14957cd040308e3eeec43d26bae5d76da13fcd85..refs/heads/master:/parser/ParserArena.cpp diff --git a/parser/ParserArena.cpp b/parser/ParserArena.cpp index 9c96de7..a276887 100644 --- a/parser/ParserArena.cpp +++ b/parser/ParserArena.cpp @@ -27,14 +27,13 @@ #include "ParserArena.h" #include "Nodes.h" -#include +#include "JSCInlines.h" namespace JSC { ParserArena::ParserArena() : m_freeableMemory(0) , m_freeablePoolEnd(0) - , m_identifierArena(adoptPtr(new IdentifierArena)) { } @@ -46,19 +45,16 @@ inline void* ParserArena::freeablePool() inline void ParserArena::deallocateObjects() { + size_t size = m_deletableObjects.size(); + for (size_t i = 0; i < size; ++i) + m_deletableObjects[i]->~ParserArenaDeletable(); + if (m_freeablePoolEnd) fastFree(freeablePool()); - size_t size = m_freeablePools.size(); + size = m_freeablePools.size(); for (size_t i = 0; i < size; ++i) fastFree(m_freeablePools[i]); - - size = m_deletableObjects.size(); - for (size_t i = 0; i < size; ++i) { - ParserArenaDeletable* object = m_deletableObjects[i]; - object->~ParserArenaDeletable(); - fastFree(object); - } } ParserArena::~ParserArena() @@ -66,37 +62,6 @@ ParserArena::~ParserArena() deallocateObjects(); } -bool ParserArena::contains(ParserArenaRefCounted* object) const -{ - return m_refCountedObjects.find(object) != notFound; -} - -ParserArenaRefCounted* ParserArena::last() const -{ - return m_refCountedObjects.last().get(); -} - -void ParserArena::removeLast() -{ - m_refCountedObjects.removeLast(); -} - -void ParserArena::reset() -{ - // Since this code path is used only when parsing fails, it's not bothering to reuse - // any of the memory the arena allocated. We could improve that later if we want to - // efficiently reuse the same arena. - - deallocateObjects(); - - m_freeableMemory = 0; - m_freeablePoolEnd = 0; - m_identifierArena->clear(); - m_freeablePools.clear(); - m_deletableObjects.clear(); - m_refCountedObjects.clear(); -} - void ParserArena::allocateFreeablePool() { if (m_freeablePoolEnd) @@ -108,18 +73,4 @@ void ParserArena::allocateFreeablePool() ASSERT(freeablePool() == pool); } -bool ParserArena::isEmpty() const -{ - return !m_freeablePoolEnd - && m_identifierArena->isEmpty() - && m_freeablePools.isEmpty() - && m_deletableObjects.isEmpty() - && m_refCountedObjects.isEmpty(); -} - -void ParserArena::derefWithArena(PassRefPtr object) -{ - m_refCountedObjects.append(object); -} - }