Windows some modules are considered (by me, and I don't care what anyone
else thinks about this <wink>) to be part of "the core" despite that they
happen to be compiled into separate DLLs (the "to DLL or not to DLL?"
question on Windows is nearly arbitrary). Making the pymalloc entry
points available to them allows the Windows build to complete without
incident when WITH_PYMALLOC is #define'd.
Note that this isn't unprecedented. Other "private API" functions we
export include _PySequence_IterSearch, _PyEval_SliceIndex, _PyCodec_Lookup,
_Py_ZeroStruct, _Py_TrueStruct, _PyLong_New and _PyModule_Clear.
/* pymalloc (private to the interpreter) */
#ifdef WITH_PYMALLOC
-void *_PyMalloc_Malloc(size_t nbytes);
-void *_PyMalloc_Realloc(void *p, size_t nbytes);
-void _PyMalloc_Free(void *p);
+DL_IMPORT(void *) _PyMalloc_Malloc(size_t nbytes);
+DL_IMPORT(void *) _PyMalloc_Realloc(void *p, size_t nbytes);
+DL_IMPORT(void) _PyMalloc_Free(void *p);
#define _PyMalloc_MALLOC _PyMalloc_Malloc
#define _PyMalloc_REALLOC _PyMalloc_Realloc
#define _PyMalloc_FREE _PyMalloc_Free