1
0
forked from GitHub/gf-core

Handle unmarshalling of large ints in Python bindings

This commit is contained in:
John J. Camilleri
2021-09-09 09:34:05 +02:00
parent 9739344ca6
commit 1d0c4e7c39
5 changed files with 26 additions and 12 deletions

View File

@@ -80,12 +80,22 @@ PgfExpr eimplarg(PgfUnmarshaller *this, PgfExpr expr)
PgfLiteral lint(PgfUnmarshaller *this, size_t size, uintmax_t *v)
{
intmax_t *v0 = (intmax_t *)v;
if (size > 1) {
PyErr_SetString(PyExc_NotImplementedError, "multi-part integers not implemented"); // TODO
Py_RETURN_NOTIMPLEMENTED;
if (size == 0) {
return (PgfLiteral) 0;
} else if (size > 1) {
// TODO: string concatenation works but probably not optimal
PyObject *sb = PyString_FromFormat("%ld", *v0);
for (size_t n = 1; n < size; n++) {
uintmax_t *vn = v + n;
PyObject *t = PyString_FromFormat("%lu", *vn);
sb = PyString_Concat(sb, t);
}
PyObject *i = PyLong_FromUnicodeObject(sb, 10);
return (PgfLiteral) i;
} else {
PyObject *i = PyLong_FromLong(*v0);
return (PgfLiteral) i;
}
PyObject *i = PyLong_FromLong(*v0);
return (PgfLiteral) i;
}
PgfLiteral lflt(PgfUnmarshaller *this, double v)