1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: aststack.cxx,v $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 // MARKER(update_precomp.py): autogen include statement, do not remove
32 #include "precompiled_idlc.hxx"
33 #include <rtl/alloc.h>
34 #include <idlc/aststack.hxx>
35 #include <idlc/astscope.hxx>
37 #define STACKSIZE_INCREMENT 64
40 : m_stack((AstScope
**)rtl_allocateZeroMemory(sizeof(AstScope
*) * STACKSIZE_INCREMENT
))
41 , m_size(STACKSIZE_INCREMENT
)
48 for(sal_uInt32 i
=0; i
< m_top
; i
++)
54 rtl_freeMemory(m_stack
);
57 sal_uInt32
AstStack::depth()
62 AstScope
* AstStack::top()
66 return m_stack
[m_top
- 1];
69 AstScope
* AstStack::bottom()
76 AstScope
* AstStack::nextToTop()
78 AstScope
*tmp
, *retval
;
83 tmp
= top(); // Save top
84 (void) pop(); // Pop it
85 retval
= top(); // Get next one down
86 (void) push(tmp
); // Push top back
87 return retval
; // Return next one down
90 AstScope
* AstStack::topNonNull()
92 for (sal_uInt32 i
= m_top
; i
> 0; i
--)
95 return m_stack
[i
- 1];
100 AstStack
* AstStack::push(AstScope
* pScope
)
103 // AstDeclaration *pDecl = ScopeAsDecl(pScope);
107 // Make sure there's space for one more
111 newSize
+= STACKSIZE_INCREMENT
;
112 tmp
= (AstScope
**)rtl_allocateZeroMemory(sizeof(AstScope
*) * newSize
);
114 for(i
=0; i
< m_size
; i
++)
117 rtl_freeMemory(m_stack
);
122 m_stack
[m_top
++] = pScope
;
133 pScope
= m_stack
[--m_top
];
136 void AstStack::clear()