mirror of
https://github.com/python/cpython.git
synced 2025-11-02 03:01:58 +00:00
Merge from ast-arena. This reduces the code in Python/ast.c by ~300 lines,
simplifies a lot of error handling code, and fixes many memory leaks.
This commit is contained in:
parent
23a6958910
commit
adb69fcdff
16 changed files with 704 additions and 1242 deletions
42
Include/pyarena.h
Normal file
42
Include/pyarena.h
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
/* An arena-like memory interface for the compiler.
|
||||
*/
|
||||
|
||||
#ifndef Py_PYARENA_H
|
||||
#define Py_PYARENA_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct _arena PyArena;
|
||||
|
||||
/* PyArena_New() and PyArena_Free() create a new arena and free it,
|
||||
respectively. Once an arena has been created, it can be used
|
||||
to allocate memory. Once it is freed, all the memory it allocated
|
||||
is freed and none of its pointers are valid.
|
||||
|
||||
PyArena_New() returns an arena pointer. On error, it
|
||||
returns a negative number and sets an exception.
|
||||
*/
|
||||
PyAPI_FUNC(PyArena *) PyArena_New(void);
|
||||
PyAPI_FUNC(void) PyArena_Free(PyArena *);
|
||||
|
||||
PyAPI_FUNC(void *) PyArena_Malloc(PyArena *, size_t);
|
||||
|
||||
/* The next two routines aren't proper arena allocation routines.
|
||||
They exist to experiment with the arena API without making wholesale
|
||||
changes to the implementation.
|
||||
|
||||
The two functions register pointers with the arena id. These
|
||||
are externally allocated pointers that will be freed when the
|
||||
arena is freed. One takes a pointer allocated with malloc. The
|
||||
other takes a PyObject that is DECREFed when the arena is freed.
|
||||
*/
|
||||
PyAPI_FUNC(int) PyArena_AddMallocPointer(PyArena *, void *);
|
||||
PyAPI_FUNC(int) PyArena_AddPyObject(PyArena *, PyObject *);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* !Py_PYARENA_H */
|
||||
Loading…
Add table
Add a link
Reference in a new issue