summaryrefslogtreecommitdiff
path: root/coverage/ctracer/datastack.c
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2015-08-01 10:05:22 -0400
committerNed Batchelder <ned@nedbatchelder.com>2015-08-01 10:05:22 -0400
commit3ca81249fd940ba054338317c3aaaa776bc88593 (patch)
treecc8017296632a81fbd409564e372780efe230193 /coverage/ctracer/datastack.c
parent12d1d340283d6e2bc94bc3ad2d512380192710ac (diff)
downloadpython-coveragepy-git-3ca81249fd940ba054338317c3aaaa776bc88593.tar.gz
Split tracer.c into smaller files
Diffstat (limited to 'coverage/ctracer/datastack.c')
-rw-r--r--coverage/ctracer/datastack.c42
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;
+}