view configmix/_py_helper.h @ 559:bb160a1e67d7

A simple helper include file with some conveniente functions. Also some "backports" from later Python versions.
author Franz Glasner <fzglas.hg@dom66.de>
date Thu, 06 Jan 2022 18:50:09 +0100
parents
children 81238ea2dbe3
line wrap: on
line source

/* -*- coding: utf-8 -*- */
/*
 * Some Python helper for C.
 *
 * Also contains some interesting backports from later Python versions.
 *
 * :Copyright: (c) 2021, Franz Glasner. All rights reserved.
 * :License:   BSD-3-Clause. See LICENSE.txt for details.
 */

#if !defined(_PY_HELPER_H_d9df407295df4884a88e56699f6c6d8d)
#define _PY_HELPER_H_d9df407295df4884a88e56699f6c6d8d

#if PY_VERSION_HEX < 0x030A0000

static inline
PyObject *
Py_NewRef(PyObject *obj)
{
    Py_INCREF(obj);
    return obj;
}


static inline
PyObject *
Py_XNewRef(PyObject *obj)
{
    Py_XINCREF(obj);
    return obj;
}

#endif /* PY_VERSION_HEX < 0x030A0000 */


static inline
void
py_clear_ref(PyObject **obj)
{
    PyObject *tmp;

    if ((tmp = *obj) != NULL) {
        *obj = NULL;
        Py_DECREF(tmp);
    }
}


/*
 * NOTE: This implementation is valid for CPython only!
 */
static inline
int
py_object_is(PyObject *obj1, PyObject *obj2)
{
    return (obj1 == obj2);
}


/*
 * NOTE: This implementation is valid for CPython only!
 */
static inline
int
py_object_isnot(PyObject *obj1, PyObject *obj2)
{
    return (obj1 != obj2);
}

#endif