mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-23 19:42:50 -06:00
Merge branch 'majestic' of github.com:GrammaticalFramework/gf-core into majestic
This commit is contained in:
@@ -9,8 +9,10 @@
|
|||||||
static PyObject *
|
static PyObject *
|
||||||
Expr_str(ExprObject *self)
|
Expr_str(ExprObject *self)
|
||||||
{
|
{
|
||||||
PgfText *s = pgf_print_expr((PgfExpr) &self, NULL, 1, &marshaller);
|
PgfText *s = pgf_print_expr((PgfExpr) self, NULL, 1, &marshaller);
|
||||||
return PyString_FromStringAndSize(s->text, s->size);
|
PyObject *str = PyString_FromStringAndSize(s->text, s->size);
|
||||||
|
free(s);
|
||||||
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
@@ -204,8 +206,10 @@ PyTypeObject pgf_ExprLitType = {
|
|||||||
static PyObject *
|
static PyObject *
|
||||||
Type_str(TypeObject *self)
|
Type_str(TypeObject *self)
|
||||||
{
|
{
|
||||||
PgfText *s = pgf_print_type((PgfType) &self, NULL, 1, &marshaller);
|
PgfText *s = pgf_print_type((PgfType) self, NULL, 1, &marshaller);
|
||||||
return PyString_FromStringAndSize(s->text, s->size);
|
PyObject *str = PyString_FromStringAndSize(s->text, s->size);
|
||||||
|
free(s);
|
||||||
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
|
|||||||
@@ -9,6 +9,21 @@
|
|||||||
|
|
||||||
static PyObject *PGFError;
|
static PyObject *PGFError;
|
||||||
|
|
||||||
|
static
|
||||||
|
PgfExnType handleError(PgfExn err)
|
||||||
|
{
|
||||||
|
if (err.type == PGF_EXN_SYSTEM_ERROR) {
|
||||||
|
errno = err.code;
|
||||||
|
PyErr_SetFromErrnoWithFilename(PyExc_IOError, err.msg);
|
||||||
|
} else if (err.type == PGF_EXN_PGF_ERROR) {
|
||||||
|
PyErr_SetString(PGFError, err.msg);
|
||||||
|
free((char*) err.msg);
|
||||||
|
} else if (err.type == PGF_EXN_OTHER_ERROR) {
|
||||||
|
PyErr_SetString(PGFError, "an unknown error occured");
|
||||||
|
}
|
||||||
|
return err.type;
|
||||||
|
}
|
||||||
|
|
||||||
// static PyObject* ParseError;
|
// static PyObject* ParseError;
|
||||||
|
|
||||||
// static PyObject* TypeError;
|
// static PyObject* TypeError;
|
||||||
@@ -1771,8 +1786,7 @@ PGF_getAbstractName(PGFObject *self, void *closure)
|
|||||||
PgfExn err;
|
PgfExn err;
|
||||||
PgfText* txt = pgf_abstract_name(self->db, self->revision, &err);
|
PgfText* txt = pgf_abstract_name(self->db, self->revision, &err);
|
||||||
|
|
||||||
if (err.type != PGF_EXN_NONE) {
|
if (handleError(err) != PGF_EXN_NONE) {
|
||||||
PyErr_SetString(PGFError, err.msg);
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1851,16 +1865,16 @@ pgf_collect_cats(PgfItor* fn, PgfText* key, void* value, PgfExn *err)
|
|||||||
PgfText* name = key;
|
PgfText* name = key;
|
||||||
PyPGFClosure* clo = (PyPGFClosure*) fn;
|
PyPGFClosure* clo = (PyPGFClosure*) fn;
|
||||||
|
|
||||||
PyObject* py_name = NULL;
|
PyObject* py_name = PyString_FromStringAndSize(name->text, name->size);
|
||||||
|
|
||||||
py_name = PyString_FromStringAndSize(name->text, name->size);
|
|
||||||
if (py_name == NULL) {
|
if (py_name == NULL) {
|
||||||
err->type = PGF_EXN_OTHER_ERROR;
|
err->type = PGF_EXN_OTHER_ERROR;
|
||||||
|
err->msg = "unable to create string from category";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PyList_Append((PyObject*) clo->collection, py_name) != 0) {
|
if (PyList_Append((PyObject*) clo->collection, py_name) != 0) {
|
||||||
err->type = PGF_EXN_OTHER_ERROR;
|
err->type = PGF_EXN_OTHER_ERROR;
|
||||||
|
err->msg = "unable append category to list";
|
||||||
Py_DECREF(py_name);
|
Py_DECREF(py_name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1875,7 +1889,7 @@ PGF_getCategories(PGFObject *self, void *closure)
|
|||||||
PgfExn err;
|
PgfExn err;
|
||||||
PyPGFClosure clo = { { pgf_collect_cats }, self, categories };
|
PyPGFClosure clo = { { pgf_collect_cats }, self, categories };
|
||||||
pgf_iter_categories(self->db, self->revision, &clo.fn, &err);
|
pgf_iter_categories(self->db, self->revision, &clo.fn, &err);
|
||||||
if (err.type != PGF_EXN_NONE) {
|
if (handleError(err) != PGF_EXN_NONE) {
|
||||||
Py_DECREF(categories);
|
Py_DECREF(categories);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@@ -1893,8 +1907,7 @@ PGF_getStartCat(PGFObject *self, void *closure)
|
|||||||
PyErr_SetString(PGFError, "start category cannot be found");
|
PyErr_SetString(PGFError, "start category cannot be found");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
else if (err.type != PGF_EXN_NONE) {
|
else if (handleError(err) != PGF_EXN_NONE) {
|
||||||
PyErr_SetString(PGFError, err.msg);
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1907,15 +1920,15 @@ pgf_collect_funs(PgfItor* fn, PgfText* key, void* value, PgfExn *err)
|
|||||||
PgfText* name = key;
|
PgfText* name = key;
|
||||||
PyPGFClosure* clo = (PyPGFClosure*) fn;
|
PyPGFClosure* clo = (PyPGFClosure*) fn;
|
||||||
|
|
||||||
PyObject* py_name = NULL;
|
PyObject* py_name = PyString_FromStringAndSize(name->text, name->size);
|
||||||
|
|
||||||
py_name = PyString_FromStringAndSize(name->text, name->size);
|
|
||||||
if (py_name == NULL) {
|
if (py_name == NULL) {
|
||||||
err->type = PGF_EXN_OTHER_ERROR;
|
err->type = PGF_EXN_OTHER_ERROR;
|
||||||
|
err->msg = "unable to create string from function";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PyList_Append((PyObject*) clo->collection, py_name) != 0) {
|
if (PyList_Append((PyObject*) clo->collection, py_name) != 0) {
|
||||||
err->type = PGF_EXN_OTHER_ERROR;
|
err->type = PGF_EXN_OTHER_ERROR;
|
||||||
|
err->msg = "unable append function to list";
|
||||||
Py_DECREF(py_name);
|
Py_DECREF(py_name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1930,7 +1943,7 @@ PGF_getFunctions(PGFObject *self, void *closure)
|
|||||||
PgfExn err;
|
PgfExn err;
|
||||||
PyPGFClosure clo = { { pgf_collect_funs }, self, functions };
|
PyPGFClosure clo = { { pgf_collect_funs }, self, functions };
|
||||||
pgf_iter_functions(self->db, self->revision, &clo.fn, &err);
|
pgf_iter_functions(self->db, self->revision, &clo.fn, &err);
|
||||||
if (err.type != PGF_EXN_NONE) {
|
if (handleError(err) != PGF_EXN_NONE) {
|
||||||
Py_DECREF(functions);
|
Py_DECREF(functions);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@@ -1959,7 +1972,7 @@ PGF_functionsByCat(PGFObject *self, PyObject *args)
|
|||||||
PyPGFClosure clo = { { pgf_collect_funs }, self, functions };
|
PyPGFClosure clo = { { pgf_collect_funs }, self, functions };
|
||||||
pgf_iter_functions_by_cat(self->db, self->revision, catname, &clo.fn, &err);
|
pgf_iter_functions_by_cat(self->db, self->revision, catname, &clo.fn, &err);
|
||||||
PyMem_Free(catname);
|
PyMem_Free(catname);
|
||||||
if (err.type != PGF_EXN_NONE) {
|
if (handleError(err) != PGF_EXN_NONE) {
|
||||||
Py_DECREF(functions);
|
Py_DECREF(functions);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@@ -1986,8 +1999,7 @@ PGF_functionType(PGFObject *self, PyObject *args)
|
|||||||
PyErr_Format(PyExc_KeyError, "function '%s' is not defined", s);
|
PyErr_Format(PyExc_KeyError, "function '%s' is not defined", s);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
else if (err.type != PGF_EXN_NONE) {
|
else if (handleError(err) != PGF_EXN_NONE) {
|
||||||
PyErr_SetString(PGFError, err.msg);
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2407,14 +2419,7 @@ pgf_readPGF(PyObject *self, PyObject *args)
|
|||||||
// Read the PGF grammar.
|
// Read the PGF grammar.
|
||||||
PgfExn err;
|
PgfExn err;
|
||||||
py_pgf->db = pgf_read_pgf(fpath, &py_pgf->revision, &err);
|
py_pgf->db = pgf_read_pgf(fpath, &py_pgf->revision, &err);
|
||||||
if (err.type == PGF_EXN_SYSTEM_ERROR) {
|
if (handleError(err) != PGF_EXN_NONE) {
|
||||||
errno = err.code;
|
|
||||||
PyErr_SetFromErrnoWithFilename(PyExc_IOError, err.msg);
|
|
||||||
Py_DECREF(py_pgf);
|
|
||||||
return NULL;
|
|
||||||
} else if (err.type == PGF_EXN_PGF_ERROR) {
|
|
||||||
PyErr_SetString(PGFError, err.msg);
|
|
||||||
free((char*) err.msg);
|
|
||||||
Py_DECREF(py_pgf);
|
Py_DECREF(py_pgf);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@@ -2435,14 +2440,7 @@ pgf_bootNGF(PyObject *self, PyObject *args)
|
|||||||
// Read the PGF grammar.
|
// Read the PGF grammar.
|
||||||
PgfExn err;
|
PgfExn err;
|
||||||
py_pgf->db = pgf_boot_ngf(fpath, npath, &py_pgf->revision, &err);
|
py_pgf->db = pgf_boot_ngf(fpath, npath, &py_pgf->revision, &err);
|
||||||
if (err.type == PGF_EXN_SYSTEM_ERROR) {
|
if (handleError(err) != PGF_EXN_NONE) {
|
||||||
errno = err.code;
|
|
||||||
PyErr_SetFromErrnoWithFilename(PyExc_IOError, err.msg);
|
|
||||||
Py_DECREF(py_pgf);
|
|
||||||
return NULL;
|
|
||||||
} else if (err.type == PGF_EXN_PGF_ERROR) {
|
|
||||||
PyErr_SetString(PGFError, err.msg);
|
|
||||||
free((char*) err.msg);
|
|
||||||
Py_DECREF(py_pgf);
|
Py_DECREF(py_pgf);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@@ -2453,7 +2451,7 @@ pgf_bootNGF(PyObject *self, PyObject *args)
|
|||||||
static PGFObject*
|
static PGFObject*
|
||||||
pgf_readNGF(PyObject *self, PyObject *args)
|
pgf_readNGF(PyObject *self, PyObject *args)
|
||||||
{
|
{
|
||||||
const char *fpath;
|
const char *fpath;
|
||||||
if (!PyArg_ParseTuple(args, "s", &fpath))
|
if (!PyArg_ParseTuple(args, "s", &fpath))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
@@ -2462,14 +2460,7 @@ pgf_readNGF(PyObject *self, PyObject *args)
|
|||||||
// Read the NGF grammar.
|
// Read the NGF grammar.
|
||||||
PgfExn err;
|
PgfExn err;
|
||||||
py_pgf->db = pgf_read_ngf(fpath, &py_pgf->revision, &err);
|
py_pgf->db = pgf_read_ngf(fpath, &py_pgf->revision, &err);
|
||||||
if (err.type == PGF_EXN_SYSTEM_ERROR) {
|
if (handleError(err) != PGF_EXN_NONE) {
|
||||||
errno = err.code;
|
|
||||||
PyErr_SetFromErrnoWithFilename(PyExc_IOError, err.msg);
|
|
||||||
Py_DECREF(py_pgf);
|
|
||||||
return NULL;
|
|
||||||
} else if (err.type == PGF_EXN_PGF_ERROR) {
|
|
||||||
PyErr_SetString(PGFError, err.msg);
|
|
||||||
free((char*) err.msg);
|
|
||||||
Py_DECREF(py_pgf);
|
Py_DECREF(py_pgf);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user