diff options
author | Noel Grandin <noel.grandin@collabora.co.uk> | 2018-08-29 12:34:52 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2018-08-30 08:30:17 +0200 |
commit | cb2c7428f68d2c07f5e97ae4b42fee7c43e709a8 (patch) | |
tree | 2a031e4245d05acfd22584f3024223efad082109 /idlc/source | |
parent | e040d8defb774255e083825863641493f4c7d9ff (diff) |
use std::vector in AstStack
instead of a hand-coded equivalent. Note that I can't use
std::unique_ptr, because the parsing code appears to just randomly leak
AstScope
Change-Id: Idc56dfe1f084db55c9d5a7558ac44ddab53b98e3
Reviewed-on: https://gerrit.libreoffice.org/59771
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'idlc/source')
-rw-r--r-- | idlc/source/aststack.cxx | 65 |
1 files changed, 14 insertions, 51 deletions
diff --git a/idlc/source/aststack.cxx b/idlc/source/aststack.cxx index 464879794d53..6e01cdabf089 100644 --- a/idlc/source/aststack.cxx +++ b/idlc/source/aststack.cxx @@ -21,102 +21,65 @@ #include <aststack.hxx> #include <astscope.hxx> -#define STACKSIZE_INCREMENT 64 - AstStack::AstStack() - : m_stack(static_cast<AstScope**>(rtl_allocateZeroMemory(sizeof(AstScope*) * STACKSIZE_INCREMENT))) - , m_size(STACKSIZE_INCREMENT) - , m_top(0) { } AstStack::~AstStack() { - for(sal_uInt32 i=0; i < m_top; i++) - { - if (m_stack[i]) - delete m_stack[i]; - } - - std::free(m_stack); + for (AstScope* p : m_stack) + delete p; } AstScope* AstStack::top() { - if (m_top < 1) + if (m_stack.empty()) return nullptr; - return m_stack[m_top - 1]; + return m_stack.back(); } AstScope* AstStack::bottom() { - if (m_top == 0) + if (m_stack.empty()) return nullptr; - return m_stack[0]; + return m_stack.front(); } AstScope* AstStack::nextToTop() { - AstScope *tmp, *retval; - - if (depth() < 2) + if (m_stack.size() < 2) return nullptr; - tmp = top(); // Save top - pop(); // Pop it - retval = top(); // Get next one down - (void) push(tmp); // Push top back - return retval; // Return next one down + return m_stack[m_stack.size() - 2]; } AstScope* AstStack::topNonNull() { - for (sal_uInt32 i = m_top; i > 0; i--) + for (sal_uInt32 i = m_stack.size(); i > 0; i--) { if ( m_stack[i - 1] ) return m_stack[i - 1]; - } + } return nullptr; } AstStack* AstStack::push(AstScope* pScope) { - AstScope **tmp; -// AstDeclaration *pDecl = ScopeAsDecl(pScope); - sal_uInt32 newSize; - sal_uInt32 i; - - // Make sure there's space for one more - if (m_size == m_top) - { - newSize = m_size; - newSize += STACKSIZE_INCREMENT; - tmp = static_cast<AstScope**>(rtl_allocateZeroMemory(sizeof(AstScope*) * newSize)); - - for(i=0; i < m_size; i++) - tmp[i] = m_stack[i]; - - std::free(m_stack); - m_stack = tmp; - } - - // Insert new scope - m_stack[m_top++] = pScope; - + m_stack.push_back(pScope); return this; } void AstStack::pop() { - if (m_top < 1) + if (m_stack.empty()) return; - --m_top; + m_stack.pop_back(); } void AstStack::clear() { - m_top = 0; + m_stack.clear(); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |