/* Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 */ /* For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt */ #ifndef _COVERAGE_DATASTACK_H #define _COVERAGE_DATASTACK_H #include "util.h" #include "stats.h" /* An entry on the data stack. For each call frame, we need to record all * the information needed for CTracer_handle_line to operate as quickly as * possible. */ typedef struct DataStackEntry { /* The current file_data set. Owned. */ PyObject * file_data; /* The disposition object for this frame. A borrowed instance of CFileDisposition. */ PyObject * disposition; /* The FileTracer handling this frame, or None if it's Python. Borrowed. */ PyObject * file_tracer; /* The line number of the last line recorded, for tracing arcs. -1 means there was no previous line, as when entering a code object. */ int last_line; BOOL started_context; } DataStackEntry; /* A data stack is a dynamically allocated vector of DataStackEntry's. */ typedef struct DataStack { int depth; /* The index of the last-used entry in stack. */ int alloc; /* number of entries allocated at stack. */ /* The file data at each level, or NULL if not recording. */ DataStackEntry * stack; } DataStack; int DataStack_init(Stats * pstats, DataStack *pdata_stack); void DataStack_dealloc(Stats * pstats, DataStack *pdata_stack); int DataStack_grow(Stats * pstats, DataStack *pdata_stack); #endif /* _COVERAGE_DATASTACK_H */