/* Include files and extern declarations used by most of the parser. */
-#include "pyconfig.h"
-
-/* pyconfig.h may or may not define DL_IMPORT */
-#ifndef DL_IMPORT /* declarations for DLL import/export */
-#define DL_IMPORT(RTYPE) RTYPE
-#endif
-
-#include <stdio.h>
-#include <string.h>
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-#include "pymem.h"
-
-#include "pydebug.h"
+#include "Python.h"
DL_IMPORT(void) PySys_WriteStdout(const char *format, ...)
__attribute__((format(printf, 1, 2)));
no longer supported. They used to call PyErr_NoMemory() on failure. */
/* Macros. */
-#ifndef PyMem_MALLOC
+#ifdef PYMALLOC_DEBUG
+/* Redirect all memory operations to Python's debugging allocator. */
+#define PyMem_MALLOC PyObject_MALLOC
+#define PyMem_REALLOC PyObject_REALLOC
+#define PyMem_FREE PyObject_FREE
+
+#else /* ! PYMALLOC_DEBUG */
+
#ifdef MALLOC_ZERO_RETURNS_NULL
#define PyMem_MALLOC(n) malloc((n) ? (n) : 1)
#else
#define PyMem_MALLOC malloc
#endif
-
/* Caution: whether MALLOC_ZERO_RETURNS_NULL is #defined has nothing to
do with whether platform realloc(non-NULL, 0) normally frees the memory
or returns NULL. Rather than introduce yet another config variation,
#define PyMem_REALLOC(p, n) realloc((p), (n) ? (n) : 1)
#define PyMem_FREE free
-#endif /* PyMem_MALLOC */
+#endif /* PYMALLOC_DEBUG */
/*
* Type-oriented memory interface
/* In order to avoid breaking old code mixing PyObject_{New, NEW} with
PyMem_{Del, DEL} (there was no choice about this in 1.5.2), the latter
have to be redirected to the object allocator. */
-/* XXX The parser module needs rework before this can be enabled. */
-#if 0
#define PyMem_Del PyObject_Free
-#else
-#define PyMem_Del PyMem_Free
-#endif
/* Macros */
#define PyMem_NEW(type, n) \
#define PyMem_RESIZE(p, type, n) \
( (p) = (type *) PyMem_REALLOC((p), (n) * sizeof(type)) )
-/* XXX The parser module needs rework before this can be enabled. */
-#if 0
#define PyMem_DEL PyObject_FREE
-#else
-#define PyMem_DEL PyMem_FREE
-#endif
#ifdef __cplusplus
}
return;
}
if (childtype == MINUS) {
- char *s = malloc(strlen(STR(pnum)) + 2);
+ char *s = PyMem_Malloc(strlen(STR(pnum)) + 2);
if (s == NULL) {
com_error(c, PyExc_MemoryError, "");
com_addbyte(c, 255);
}
s[0] = '-';
strcpy(s + 1, STR(pnum));
- free(STR(pnum));
+ PyMem_Free(STR(pnum));
STR(pnum) = s;
}
com_atom(c, patom);