mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-16 22:51:17 +07:00
51 lines
1.4 KiB
C
51 lines
1.4 KiB
C
/* Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 */
|
|
/* For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt */
|
|
|
|
#include "util.h"
|
|
#include "datastack.h"
|
|
|
|
#define STACK_DELTA 20
|
|
|
|
int
|
|
DataStack_init(Stats *pstats, DataStack *pdata_stack)
|
|
{
|
|
pdata_stack->depth = -1;
|
|
pdata_stack->stack = NULL;
|
|
pdata_stack->alloc = 0;
|
|
return RET_OK;
|
|
}
|
|
|
|
void
|
|
DataStack_dealloc(Stats *pstats, DataStack *pdata_stack)
|
|
{
|
|
int i;
|
|
|
|
for (i = 0; i < pdata_stack->alloc; i++) {
|
|
Py_XDECREF(pdata_stack->stack[i].file_data);
|
|
}
|
|
PyMem_Free(pdata_stack->stack);
|
|
}
|
|
|
|
int
|
|
DataStack_grow(Stats *pstats, DataStack *pdata_stack)
|
|
{
|
|
pdata_stack->depth++;
|
|
if (pdata_stack->depth >= pdata_stack->alloc) {
|
|
/* We've outgrown our data_stack array: make it bigger. */
|
|
int bigger = pdata_stack->alloc + STACK_DELTA;
|
|
DataStackEntry * bigger_data_stack = PyMem_Realloc(pdata_stack->stack, bigger * sizeof(DataStackEntry));
|
|
STATS( pstats->stack_reallocs++; )
|
|
if (bigger_data_stack == NULL) {
|
|
PyErr_NoMemory();
|
|
pdata_stack->depth--;
|
|
return RET_ERROR;
|
|
}
|
|
/* Zero the new entries. */
|
|
memset(bigger_data_stack + pdata_stack->alloc, 0, STACK_DELTA * sizeof(DataStackEntry));
|
|
|
|
pdata_stack->stack = bigger_data_stack;
|
|
pdata_stack->alloc = bigger;
|
|
}
|
|
return RET_OK;
|
|
}
|