|
@@ -391,24 +391,37 @@ PyObject *
|
|
build_term (LSUP_Term *t)
|
|
build_term (LSUP_Term *t)
|
|
{
|
|
{
|
|
log_trace ("Building term: %s", t->data);
|
|
log_trace ("Building term: %s", t->data);
|
|
- char *datatype = (
|
|
+ PyTypeObject *term_obj_type;
|
|
- t->type == LSUP_TERM_LITERAL && t->datatype ?
|
|
+ PyObject *term_args;
|
|
- t->datatype->data : NULL);
|
|
+ switch (t->type) {
|
|
- char *lang = (
|
|
+ case LSUP_TERM_IRIREF:
|
|
- t->type == LSUP_TERM_LT_LITERAL && strlen (t->lang) ?
|
|
+ term_obj_type = &IRIRefType;
|
|
- t->lang : NULL);
|
|
+ term_args = Py_BuildValue ("(s)", t->data);
|
|
- PyObject *term_args = Py_BuildValue (
|
|
+ break;
|
|
- "bszz", t->type, t->data, datatype, lang);
|
|
+ case LSUP_TERM_NS_IRIREF:
|
|
- if (UNLIKELY (!term_args)) {
|
|
+ term_obj_type = &IRIRefType;
|
|
- PyErr_SetString (PyExc_ValueError, "Invalid object args.");
|
|
+ term_args = Py_BuildValue ("sO", t->data, LSUP_iriref_nsm (t));
|
|
- return NULL;
|
|
+ break;
|
|
|
|
+ case LSUP_TERM_BNODE:
|
|
|
|
+ term_obj_type = &BNodeType;
|
|
|
|
+ term_args = Py_BuildValue ("(s)", t->data);
|
|
|
|
+ break;
|
|
|
|
+ case LSUP_TERM_LITERAL:
|
|
|
|
+ term_obj_type = &LiteralType;
|
|
|
|
+ term_args = Py_BuildValue ("sz", t->data, t->datatype->data, NULL);
|
|
|
|
+ break;
|
|
|
|
+ case LSUP_TERM_LT_LITERAL:
|
|
|
|
+ term_obj_type = &LiteralType;
|
|
|
|
+ term_args = Py_BuildValue ("sz", t->data, NULL, t->lang);
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ return NULL;
|
|
}
|
|
}
|
|
- PyObject *t_obj = PyObject_CallObject ((PyObject *)&TermType, term_args);
|
|
+ if (UNLIKELY (!term_args)) return NULL;
|
|
|
|
+ PyObject *t_obj = PyObject_CallObject (
|
|
|
|
+ (PyObject *)term_obj_type, term_args);
|
|
Py_DECREF (term_args);
|
|
Py_DECREF (term_args);
|
|
- if (UNLIKELY (!t_obj)) {
|
|
+ if (UNLIKELY (!t_obj)) return NULL;
|
|
- PyErr_SetString (PyExc_ValueError, "Invalid object.");
|
|
|
|
- return NULL;
|
|
|
|
- }
|
|
|
|
|
|
|
|
return t_obj;
|
|
return t_obj;
|
|
}
|
|
}
|