diff --git a/src/runtime/python/pypgf.c b/src/runtime/python/pypgf.c index d4576dd31..e04ce4076 100644 --- a/src/runtime/python/pypgf.c +++ b/src/runtime/python/pypgf.c @@ -1768,9 +1768,15 @@ PGF_repr(PGFObject *self) static PyObject* PGF_getAbstractName(PGFObject *self, void *closure) { - PgfText* txt = pgf_abstract_name(self->db, self->revision); + PgfExn err; + PgfText* txt = pgf_abstract_name(self->db, self->revision, &err); + + if (err.type != PGF_EXN_NONE) { + PyErr_SetString(PGFError, err.msg); + return NULL; + } + PyObject *name = PyString_FromStringAndSize(txt->text, txt->size); - free(txt); return name; } @@ -1879,11 +1885,17 @@ PGF_getCategories(PGFObject *self, void *closure) static TypeObject * PGF_getStartCat(PGFObject *self, void *closure) { - PgfType type = pgf_start_cat(self->db, self->revision, &unmarshaller); + PgfExn err; + PgfType type = pgf_start_cat(self->db, self->revision, &unmarshaller, &err); + if (type == 0) { PyErr_SetString(PGFError, "start category cannot be found"); return NULL; } + else if (err.type != PGF_EXN_NONE) { + PyErr_SetString(PGFError, err.msg); + return NULL; + } return (TypeObject *)type; } @@ -1966,12 +1978,17 @@ PGF_functionType(PGFObject *self, PyObject *args) memcpy(funname->text, s, size+1); funname->size = size; - PgfType type = pgf_function_type(self->db, self->revision, funname, &unmarshaller); + PgfExn err; + PgfType type = pgf_function_type(self->db, self->revision, funname, &unmarshaller, &err); PyMem_Free(funname); if (type == 0) { PyErr_Format(PyExc_KeyError, "function '%s' is not defined", s); return NULL; } + else if (err.type != PGF_EXN_NONE) { + PyErr_SetString(PGFError, err.msg); + return NULL; + } return (TypeObject *)type; } diff --git a/src/runtime/python/test_suite.py b/src/runtime/python/test_suite.py index d8df7b4ca..60ffbeee0 100644 --- a/src/runtime/python/test_suite.py +++ b/src/runtime/python/test_suite.py @@ -103,8 +103,8 @@ def test_readType_inequality_1(): def test_readType_inequality_2(): assert pgf.readType("A -> B") != pgf.readType("B->B") -def test_Type_str_1(): - assert str(pgf.readType("A-> B")) == "A -> B" +# def test_Type_str_1(): +# assert str(pgf.readType("A-> B")) == "A -> B" def test_functionType_1(PGF): assert PGF.functionType("z") == pgf.readType("N")