[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[pygame] Int function simplified



Hi, I have been looking into parsing numbers with Blender3D's api and thought Id take a look at how PyGame parses numbers.

Even though youd think PyInt_AsLong would only work with PyInt's it actually converts any type that supports the PyNumber protocol into an in. - so theres no advantage in using PyNumber_Int.

the code below is from base.c, a smaller replacement for IntFromObj is below. This avoids creating and removing a PyObject every time.

_________________________________________________
/* internal C API utility functions */
static int
IntFromObj (PyObject* obj, int* val)
{
    PyObject* intobj;

    if (PyNumber_Check (obj))
    {
        if (!(intobj = PyNumber_Int (obj)))
        {
            PyErr_Clear ();
            return 0;
        }
        *val = PyInt_AsLong (intobj);
        Py_DECREF (intobj);
        if (PyErr_Occurred ())
        {
            PyErr_Clear ();
            return 0;
        }
        return 1;
    }
    return 0;
}


_____________________________________________-

/* internal C API utility functions */
static int
IntFromObj (PyObject* obj, int* val)
{
    int tmp_val;
    tmp_val = PyInt_AsLong (obj);
    if (tmp_val == -1 && PyErr_Occurred ())
    {
        PyErr_Clear ();
        return 0;
    }
    *val = tmp_val;
    return 1;
}