diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2015-08-01 10:05:22 -0400 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2015-08-01 10:05:22 -0400 |
commit | 3ca81249fd940ba054338317c3aaaa776bc88593 (patch) | |
tree | cc8017296632a81fbd409564e372780efe230193 /coverage/ctracer/datastack.c | |
parent | 12d1d340283d6e2bc94bc3ad2d512380192710ac (diff) | |
download | python-coveragepy-git-3ca81249fd940ba054338317c3aaaa776bc88593.tar.gz |
Split tracer.c into smaller files
Diffstat (limited to 'coverage/ctracer/datastack.c')
-rw-r--r-- | coverage/ctracer/datastack.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/coverage/ctracer/datastack.c b/coverage/ctracer/datastack.c new file mode 100644 index 00000000..1d925ad7 --- /dev/null +++ b/coverage/ctracer/datastack.c @@ -0,0 +1,42 @@ +/* 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) { + STATS( pstats->stack_reallocs++; ) + /* 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)); + 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; +} |