1
0
forked from GitHub/gf-core

Add FreeHypos function. Remove old Python 2 preproc definition

This commit is contained in:
John J. Camilleri
2021-09-30 10:45:01 +02:00
parent 0fa739e6e3
commit ad0832903a
4 changed files with 21 additions and 28 deletions

View File

@@ -42,9 +42,6 @@ PyUnicode_AsPgfText(PyObject *pystr)
PyErr_SetString(PyExc_TypeError, "input to PyUnicode_AsPgfText is not a string");
return NULL;
}
if (PyUnicode_READY(pystr) != 0) {
return NULL;
}
Py_ssize_t size;
const char *enc = PyUnicode_AsUTF8AndSize(pystr, &size);
@@ -186,6 +183,16 @@ FreePgfText(PgfText *txt)
PyMem_RawFree(txt);
}
void
FreeHypos(PgfTypeHypo *hypos, Py_ssize_t n_hypos)
{
for (Py_ssize_t i = 0; i < n_hypos; i++) {
FreePgfText(hypos[i].cid);
Py_DECREF(hypos[i].type);
}
PyMem_RawFree(hypos);
}
void
FreePgfPrintContext(PgfPrintContext *ctxt)
{
@@ -508,11 +515,7 @@ match_type(PgfMarshaller *this, PgfUnmarshaller *u, PgfType ty)
for (Py_ssize_t i = 0; i < n_exprs; i++) {
Py_DECREF(exprs[i]);
}
for (Py_ssize_t i = 0; i < n_hypos; i++) {
free(hypos[i].cid);
Py_DECREF(hypos[i].type);
}
PyMem_Free(hypos);
FreeHypos(hypos, n_hypos);
FreePgfText(cat);
return res;

View File

@@ -26,6 +26,7 @@ PyObject *PyList_FromHypos(PgfTypeHypo *hypos, const size_t n_hypos);
PgfPrintContext *PyList_AsPgfPrintContext(PyObject *pylist);
void FreePgfText(PgfText *txt);
void FreeHypos(PgfTypeHypo *hypos, Py_ssize_t n_hypos);
void FreePgfPrintContext(PgfPrintContext *ctxt);
PgfUnmarshaller unmarshaller;

View File

@@ -724,21 +724,13 @@ static PyMethodDef module_methods[] = {
{NULL, NULL, 0, NULL} /* Sentinel */
};
#if PY_MAJOR_VERSION >= 3
#define MOD_ERROR_VAL NULL
#define MOD_SUCCESS_VAL(val) val
#define MOD_INIT(name) PyMODINIT_FUNC PyInit_##name(void)
#define MOD_DEF(ob, name, doc, methods) \
static struct PyModuleDef moduledef = { \
PyModuleDef_HEAD_INIT, name, doc, -1, methods, }; \
ob = PyModule_Create(&moduledef);
#else
#define MOD_ERROR_VAL
#define MOD_SUCCESS_VAL(val)
#define MOD_INIT(name) void init##name(void)
#define MOD_DEF(ob, name, doc, methods) \
ob = Py_InitModule3(name, methods, doc);
#endif
#define MOD_ERROR_VAL NULL
#define MOD_SUCCESS_VAL(val) val
#define MOD_INIT(name) PyMODINIT_FUNC PyInit_##name(void)
#define MOD_DEF(ob, name, doc, methods) \
static struct PyModuleDef moduledef = { \
PyModuleDef_HEAD_INIT, name, doc, -1, methods, }; \
ob = PyModule_Create(&moduledef);
#define TYPE_READY(type) \
if (PyType_Ready(&type) < 0) \

View File

@@ -205,12 +205,9 @@ Transaction_createCategory(TransactionObject *self, PyObject *args)
pgf_create_category(self->pgf->db, self->revision, catname, n_hypos, context, prob, &marshaller, &err);
FreePgfText(catname);
for (Py_ssize_t i = 0; i < n_hypos; i++) {
FreePgfText(context[i].cid);
}
PyMem_Free(context);
FreeHypos(context, n_hypos);
if (handleError(err) != PGF_EXN_NONE) {
if (handleError(err) != PGF_EXN_NONE) {
return NULL;
}