diff options
Diffstat (limited to 'sources/shiboken2/libshiboken/pep384impl.h')
-rw-r--r-- | sources/shiboken2/libshiboken/pep384impl.h | 569 |
1 files changed, 0 insertions, 569 deletions
diff --git a/sources/shiboken2/libshiboken/pep384impl.h b/sources/shiboken2/libshiboken/pep384impl.h deleted file mode 100644 index 2bfe52254..000000000 --- a/sources/shiboken2/libshiboken/pep384impl.h +++ /dev/null @@ -1,569 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt for Python. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef PEP384IMPL_H -#define PEP384IMPL_H - -extern "C" -{ - -/***************************************************************************** - * - * RESOLVED: memoryobject.h - * - */ - -// Extracted into bufferprocs27.h -#ifdef Py_LIMITED_API -#include "bufferprocs_py37.h" -#endif - -/***************************************************************************** - * - * RESOLVED: object.h - * - */ -#ifdef Py_LIMITED_API -// Why the hell is this useful debugging function not allowed? -// BTW: When used, it breaks on Windows, intentionally! -LIBSHIBOKEN_API void _PyObject_Dump(PyObject *); -#endif - -/* - * There are a few structures that are needed, but cannot be used without - * breaking the API. We use some heuristics to get those fields anyway - * and validate that we really found them, see pep384impl.cpp . - */ - -#ifdef Py_LIMITED_API - -/* - * These are the type object fields that we use. - * We will verify that they never change. - * The unused fields are intentionally named as "void *Xnn" because - * the chance is smaller to forget to validate a field. - * When we need more fields, we replace it back and add it to the - * validation. - */ -typedef struct _typeobject { - PyVarObject ob_base; - const char *tp_name; - Py_ssize_t tp_basicsize; - void *X03; // Py_ssize_t tp_itemsize; - destructor tp_dealloc; - void *X05; // Py_ssize_t tp_vectorcall_offset; - void *X06; // getattrfunc tp_getattr; - void *X07; // setattrfunc tp_setattr; - void *X08; // PyAsyncMethods *tp_as_async; - reprfunc tp_repr; - void *X10; // PyNumberMethods *tp_as_number; - void *X11; // PySequenceMethods *tp_as_sequence; - void *X12; // PyMappingMethods *tp_as_mapping; - void *X13; // hashfunc tp_hash; - ternaryfunc tp_call; - reprfunc tp_str; - void *X16; // getattrofunc tp_getattro; - void *X17; // setattrofunc tp_setattro; - void *X18; // PyBufferProcs *tp_as_buffer; - unsigned long tp_flags; - void *X20; // const char *tp_doc; - traverseproc tp_traverse; - inquiry tp_clear; - void *X23; // richcmpfunc tp_richcompare; - Py_ssize_t tp_weaklistoffset; - void *X25; // getiterfunc tp_iter; - iternextfunc tp_iternext; - struct PyMethodDef *tp_methods; - void *X28; // struct PyMemberDef *tp_members; - struct PyGetSetDef *tp_getset; - struct _typeobject *tp_base; - PyObject *tp_dict; - descrgetfunc tp_descr_get; - void *X33; // descrsetfunc tp_descr_set; - Py_ssize_t tp_dictoffset; - initproc tp_init; - allocfunc tp_alloc; - newfunc tp_new; - freefunc tp_free; - inquiry tp_is_gc; /* For PyObject_IS_GC */ - PyObject *tp_bases; - PyObject *tp_mro; /* method resolution order */ - -} PyTypeObject; - -#ifndef PyObject_IS_GC -/* Test if an object has a GC head */ -#define PyObject_IS_GC(o) \ - (PyType_IS_GC(Py_TYPE(o)) \ - && (Py_TYPE(o)->tp_is_gc == NULL || Py_TYPE(o)->tp_is_gc(o))) -#endif - -// This was a macro error in the limited API from the beginning. -// It was fixed in Python master, but did make it only in Python 3.8 . -#define PY_ISSUE33738_SOLVED 0x03080000 -#if PY_VERSION_HEX < PY_ISSUE33738_SOLVED -#undef PyIndex_Check -LIBSHIBOKEN_API int PyIndex_Check(PyObject *obj); -#endif - -#endif // Py_LIMITED_API - -struct SbkObjectTypePrivate; -struct PySideQFlagsTypePrivate; -struct _SbkGenericTypePrivate; - -#define PepHeapType_SIZE \ - (reinterpret_cast<PyTypeObject *>(&PyType_Type)->tp_basicsize) - -#define _genericTypeExtender(etype) \ - (reinterpret_cast<char *>(etype) + PepHeapType_SIZE) - -#define PepType_SOTP(etype) \ - (*reinterpret_cast<SbkObjectTypePrivate **>(_genericTypeExtender(etype))) - -#define PepType_SETP(etype) \ - (reinterpret_cast<SbkEnumTypePrivate *>(_genericTypeExtender(etype))) - -#define PepType_PFTP(etype) \ - (reinterpret_cast<PySideQFlagsTypePrivate *>(_genericTypeExtender(etype))) - -#define PepType_SGTP(etype) \ - (reinterpret_cast<_SbkGenericTypePrivate *>(_genericTypeExtender(etype))) - -// functions used everywhere -LIBSHIBOKEN_API const char *PepType_GetNameStr(PyTypeObject *type); - -/***************************************************************************** - * - * RESOLVED: longobject.h - * - */ -#ifdef Py_LIMITED_API -LIBSHIBOKEN_API int _PepLong_AsInt(PyObject *); -#else -#define _PepLong_AsInt _PyLong_AsInt -#endif - -/***************************************************************************** - * - * RESOLVED: pydebug.h - * - */ -#ifdef Py_LIMITED_API -/* - * We have no direct access to Py_VerboseFlag because debugging is not - * supported. The python developers are partially a bit too rigorous. - * Instead, we compute the value and use a function call macro. - * Was before: extern LIBSHIBOKEN_API int Py_VerboseFlag; - */ -LIBSHIBOKEN_API int Pep_GetFlag(const char *name); -LIBSHIBOKEN_API int Pep_GetVerboseFlag(void); -#define Py_VerboseFlag Pep_GetVerboseFlag() -#endif - -/***************************************************************************** - * - * RESOLVED: unicodeobject.h - * - */ - -/////////////////////////////////////////////////////////////////////// -// -// PYSIDE-813: About The Length Of Unicode Objects -// ----------------------------------------------- -// -// In Python 2 and before Python 3.3, the macro PyUnicode_GET_SIZE -// worked fine and really like a macro. -// -// Meanwhile, the unicode objects have changed their layout very much, -// and the former cheap macro call has become a real function call -// that converts objects and needs PyMemory. -// -// That is not only inefficient, but also requires the GIL! -// This problem was visible by debug Python and qdatastream_test.py . -// It was found while fixing the refcount problem of PYSIDE-813 which -// needed a debug Python. -// - -// PyUnicode_GetSize is deprecated in favor of PyUnicode_GetLength. -#if PY_VERSION_HEX < 0x03000000 -#define PepUnicode_GetLength(op) PyUnicode_GetSize((PyObject *)(op)) -#else -#define PepUnicode_GetLength(op) PyUnicode_GetLength((PyObject *)(op)) -#endif - -#ifdef Py_LIMITED_API - -LIBSHIBOKEN_API char *_PepUnicode_AsString(PyObject *); - -#else -#define _PepUnicode_AsString PyUnicode_AsUTF8 -#endif - -/***************************************************************************** - * - * RESOLVED: bytesobject.h - * - */ -#ifdef Py_LIMITED_API -#define PyBytes_AS_STRING(op) PyBytes_AsString(op) -#define PyBytes_GET_SIZE(op) PyBytes_Size(op) -#endif - -/***************************************************************************** - * - * RESOLVED: floatobject.h - * - */ -#ifdef Py_LIMITED_API -#define PyFloat_AS_DOUBLE(op) PyFloat_AsDouble(op) -#endif - -/***************************************************************************** - * - * RESOLVED: tupleobject.h - * - */ -#ifdef Py_LIMITED_API -#define PyTuple_GET_ITEM(op, i) PyTuple_GetItem((PyObject *)op, i) -#define PyTuple_SET_ITEM(op, i, v) PyTuple_SetItem(op, i, v) -#define PyTuple_GET_SIZE(op) PyTuple_Size((PyObject *)op) -#endif - -/***************************************************************************** - * - * RESOLVED: listobject.h - * - */ -#ifdef Py_LIMITED_API -#define PyList_GET_ITEM(op, i) PyList_GetItem(op, i) -#define PyList_SET_ITEM(op, i, v) PyList_SetItem(op, i, v) -#define PyList_GET_SIZE(op) PyList_Size(op) -#endif - -/***************************************************************************** - * - * RESOLVED: dictobject.h - * - * PYSIDE-803, PYSIDE-813: We need PyDict_GetItemWithError in order to - * avoid the GIL. - */ -#if PY_VERSION_HEX < 0x03000000 -LIBSHIBOKEN_API PyObject *PyDict_GetItemWithError(PyObject *mp, PyObject *key); -#endif - -/***************************************************************************** - * - * RESOLVED: methodobject.h - * - */ - -#ifdef Py_LIMITED_API - -typedef struct _pycfunc PyCFunctionObject; -#define PyCFunction_GET_FUNCTION(func) PyCFunction_GetFunction((PyObject *)func) -#define PyCFunction_GET_SELF(func) PyCFunction_GetSelf((PyObject *)func) -#define PyCFunction_GET_FLAGS(func) PyCFunction_GetFlags((PyObject *)func) -#define PepCFunction_GET_NAMESTR(func) \ - _PepUnicode_AsString(PyObject_GetAttrString((PyObject *)func, "__name__")) -#else -#define PepCFunction_GET_NAMESTR(func) ((func)->m_ml->ml_name) -#endif - -/***************************************************************************** - * - * RESOLVED: pythonrun.h - * - */ -#ifdef Py_LIMITED_API -LIBSHIBOKEN_API PyObject *PyRun_String(const char *, int, PyObject *, PyObject *); -#endif - -/***************************************************************************** - * - * RESOLVED: abstract.h - * - */ -#ifdef Py_LIMITED_API - -// This definition breaks the limited API a little, because it re-enables the -// buffer functions. -// But this is no problem as we check it's validity for every version. - -#define PYTHON_BUFFER_VERSION_COMPATIBLE (PY_VERSION_HEX >= 0x03030000 && \ - PY_VERSION_HEX < 0x0308FFFF) -#if !PYTHON_BUFFER_VERSION_COMPATIBLE -# error Please check the buffer compatibility for this python version! -#endif - -typedef struct { - getbufferproc bf_getbuffer; - releasebufferproc bf_releasebuffer; -} PyBufferProcs; - -typedef struct _Pepbuffertype { - PyVarObject ob_base; - void *skip[17]; - PyBufferProcs *tp_as_buffer; -} PepBufferType; - -#define PepType_AS_BUFFER(type) \ - reinterpret_cast<PepBufferType *>(type)->tp_as_buffer - -#define PyObject_CheckBuffer(obj) \ - ((PepType_AS_BUFFER(Py_TYPE(obj)) != NULL) && \ - (PepType_AS_BUFFER(Py_TYPE(obj))->bf_getbuffer != NULL)) - -LIBSHIBOKEN_API int PyObject_GetBuffer(PyObject *ob, Pep_buffer *view, int flags); -LIBSHIBOKEN_API void PyBuffer_Release(Pep_buffer *view); - -#else - -#define Pep_buffer Py_buffer -#define PepType_AS_BUFFER(type) ((type)->tp_as_buffer) - -#endif /* Py_LIMITED_API */ - -/***************************************************************************** - * - * RESOLVED: funcobject.h - * - */ -#ifdef Py_LIMITED_API -typedef struct _func PyFunctionObject; - -extern LIBSHIBOKEN_API PyTypeObject *PepFunction_TypePtr; -LIBSHIBOKEN_API PyObject *PepFunction_Get(PyObject *, const char *); - -#define PyFunction_Check(op) (Py_TYPE(op) == PepFunction_TypePtr) -#define PyFunction_GET_CODE(func) PyFunction_GetCode(func) - -#define PyFunction_GetCode(func) PepFunction_Get((PyObject *)func, "__code__") -#define PepFunction_GetName(func) PepFunction_Get((PyObject *)func, "__name__") -#else -#define PepFunction_TypePtr (&PyFunction_Type) -#define PepFunction_GetName(func) (((PyFunctionObject *)func)->func_name) -#endif - -/***************************************************************************** - * - * RESOLVED: classobject.h - * - */ -#ifdef Py_LIMITED_API - -typedef struct _meth PyMethodObject; - -extern LIBSHIBOKEN_API PyTypeObject *PepMethod_TypePtr; - -LIBSHIBOKEN_API PyObject *PyMethod_New(PyObject *, PyObject *); -LIBSHIBOKEN_API PyObject *PyMethod_Function(PyObject *); -LIBSHIBOKEN_API PyObject *PyMethod_Self(PyObject *); - -#define PyMethod_Check(op) ((op)->ob_type == PepMethod_TypePtr) - -#define PyMethod_GET_SELF(op) PyMethod_Self(op) -#define PyMethod_GET_FUNCTION(op) PyMethod_Function(op) -#endif - -/***************************************************************************** - * - * RESOLVED: code.h - * - */ -#ifdef Py_LIMITED_API -/* Bytecode object */ - -// we have to grab the code object from python -typedef struct _code PyCodeObject; - -LIBSHIBOKEN_API int PepCode_Get(PyCodeObject *co, const char *name); - -#define PepCode_GET_FLAGS(o) PepCode_Get(o, "co_flags") -#define PepCode_GET_ARGCOUNT(o) PepCode_Get(o, "co_argcount") - -/* Masks for co_flags above */ -#define CO_OPTIMIZED 0x0001 -#define CO_NEWLOCALS 0x0002 -#define CO_VARARGS 0x0004 -#define CO_VARKEYWORDS 0x0008 -#define CO_NESTED 0x0010 -#define CO_GENERATOR 0x0020 -#else -#define PepCode_GET_FLAGS(o) ((o)->co_flags) -#define PepCode_GET_ARGCOUNT(o) ((o)->co_argcount) -#endif - -/***************************************************************************** - * - * RESOLVED: datetime.h - * - */ -#ifdef Py_LIMITED_API - -LIBSHIBOKEN_API int PyDateTime_Get(PyObject *ob, const char *name); - -#define PyDateTime_GetYear(o) PyDateTime_Get(o, "year") -#define PyDateTime_GetMonth(o) PyDateTime_Get(o, "month") -#define PyDateTime_GetDay(o) PyDateTime_Get(o, "day") -#define PyDateTime_GetHour(o) PyDateTime_Get(o, "hour") -#define PyDateTime_GetMinute(o) PyDateTime_Get(o, "minute") -#define PyDateTime_GetSecond(o) PyDateTime_Get(o, "second") -#define PyDateTime_GetMicrosecond(o) PyDateTime_Get(o, "microsecond") -#define PyDateTime_GetFold(o) PyDateTime_Get(o, "fold") - -#define PyDateTime_GET_YEAR(o) PyDateTime_GetYear(o) -#define PyDateTime_GET_MONTH(o) PyDateTime_GetMonth(o) -#define PyDateTime_GET_DAY(o) PyDateTime_GetDay(o) - -#define PyDateTime_DATE_GET_HOUR(o) PyDateTime_GetHour(o) -#define PyDateTime_DATE_GET_MINUTE(o) PyDateTime_GetMinute(o) -#define PyDateTime_DATE_GET_SECOND(o) PyDateTime_GetSecond(o) -#define PyDateTime_DATE_GET_MICROSECOND(o) PyDateTime_GetMicrosecond(o) -#define PyDateTime_DATE_GET_FOLD(o) PyDateTime_GetFold(o) - -#define PyDateTime_TIME_GET_HOUR(o) PyDateTime_GetHour(o) -#define PyDateTime_TIME_GET_MINUTE(o) PyDateTime_GetMinute(o) -#define PyDateTime_TIME_GET_SECOND(o) PyDateTime_GetSecond(o) -#define PyDateTime_TIME_GET_MICROSECOND(o) PyDateTime_GetMicrosecond(o) -#define PyDateTime_TIME_GET_FOLD(o) PyDateTime_GetFold(o) - -/* Define structure slightly similar to C API. */ -typedef struct { - PyObject *module; - /* type objects */ - PyTypeObject *DateType; - PyTypeObject *DateTimeType; - PyTypeObject *TimeType; - PyTypeObject *DeltaType; - PyTypeObject *TZInfoType; -} datetime_struc; - -LIBSHIBOKEN_API datetime_struc *init_DateTime(void); - -#define PyDateTime_IMPORT PyDateTimeAPI = init_DateTime() - -extern LIBSHIBOKEN_API datetime_struc *PyDateTimeAPI; - -#define PyDate_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->DateType) -#define PyDateTime_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->DateTimeType) -#define PyTime_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->TimeType) - -LIBSHIBOKEN_API PyObject *PyDate_FromDate(int year, int month, int day); -LIBSHIBOKEN_API PyObject *PyDateTime_FromDateAndTime( - int year, int month, int day, int hour, int min, int sec, int usec); -LIBSHIBOKEN_API PyObject *PyTime_FromTime( - int hour, int minute, int second, int usecond); - -#endif /* Py_LIMITED_API */ - -/***************************************************************************** - * - * Extra support for name mangling - * - */ - -// PYSIDE-772: This function supports the fix, but is not meant as public. -LIBSHIBOKEN_API PyObject *_Pep_PrivateMangle(PyObject *self, PyObject *name); - -/***************************************************************************** - * - * Extra support for signature.cpp - * - */ - -#ifdef Py_LIMITED_API -extern LIBSHIBOKEN_API PyTypeObject *PepStaticMethod_TypePtr; -LIBSHIBOKEN_API PyObject *PyStaticMethod_New(PyObject *callable); -#else -#define PepStaticMethod_TypePtr &PyStaticMethod_Type -#endif -// Although not PEP specific, we resolve this similar issue, here: -#if PY_VERSION_HEX < 0x03000000 -extern LIBSHIBOKEN_API PyTypeObject *PepMethodDescr_TypePtr; -#else -#define PepMethodDescr_TypePtr &PyMethodDescr_Type -#endif - -/***************************************************************************** - * - * Newly introduced convenience functions - * - * This is not defined if Py_LIMITED_API is defined. - */ -#if PY_VERSION_HEX < 0x03070000 || defined(Py_LIMITED_API) -LIBSHIBOKEN_API PyObject *PyImport_GetModule(PyObject *name); -#endif // PY_VERSION_HEX < 0x03070000 || defined(Py_LIMITED_API) - -/***************************************************************************** - * - * Python 2 incompatibilities - * - * This is incompatibly implemented as macro in Python 2. - */ -#if PY_VERSION_HEX < 0x03000000 -extern LIBSHIBOKEN_API PyObject *PepMapping_Items(PyObject *o); -#else -#define PepMapping_Items PyMapping_Items -#endif - -/***************************************************************************** - * - * Runtime support for Python 3.8 incompatibilities - * - */ - -#ifndef Py_TPFLAGS_METHOD_DESCRIPTOR -/* Objects behave like an unbound method */ -#define Py_TPFLAGS_METHOD_DESCRIPTOR (1UL << 17) -#endif - -extern LIBSHIBOKEN_API int PepRuntime_38_flag; - -/***************************************************************************** - * - * Module Initialization - * - */ - -LIBSHIBOKEN_API void Pep384_Init(void); - -} // extern "C" - -#endif // PEP384IMPL_H |