12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- /* Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 */
- /* For details: https://bitbucket.org/ned/coveragepy/src/default/NOTICE.txt */
- #include "util.h"
- #include "datastack.h"
- #define STACK_DELTA 100
- 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)
- {
- 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;
- }
- pdata_stack->stack = bigger_data_stack;
- pdata_stack->alloc = bigger;
- }
- return RET_OK;
- }
|