/* ------------------------------------------------------------------------- */
#include "Python.h"
#include "structmember.h"
#ifndef PyVarObject_HEAD_INIT
#define PyVarObject_HEAD_INIT(type, size) PyObject_HEAD_INIT(type) size,
#endif
/* ------------------------------------------------------------------------- */
typedef struct {
PyObject_HEAD
PyObject *dict;
PyObject *wrapped;
} WraptObjectProxyObject;
PyTypeObject WraptObjectProxy_Type;
PyTypeObject WraptCallableObjectProxy_Type;
typedef struct {
WraptObjectProxyObject object_proxy;
PyObject *instance;
PyObject *wrapper;
PyObject *enabled;
PyObject *binding;
PyObject *parent;
} WraptFunctionWrapperObject;
PyTypeObject WraptFunctionWrapperBase_Type;
PyTypeObject WraptBoundFunctionWrapper_Type;
PyTypeObject WraptFunctionWrapper_Type;
/* ------------------------------------------------------------------------- */
static PyObject *WraptObjectProxy_new(PyTypeObject *type,
PyObject *args, PyObject *kwds)
{
WraptObjectProxyObject *self;
self = (WraptObjectProxyObject *)type->tp_alloc(type, 0);
if (!self)
return NULL;
self->dict = PyDict_New();
self->wrapped = NULL;
return (PyObject *)self;
}
/* ------------------------------------------------------------------------- */
static int WraptObjectProxy_raw_init(WraptObjectProxyObject *self,
PyObject *wrapped)
{
static PyObject *module_str = NULL;
static PyObject *doc_str = NULL;
PyObject *object = NULL;
Py_INCREF(wrapped);
Py_XDECREF(self->wrapped);
self->wrapped = wrapped;
if (!module_str) {
#if PY_MAJOR_VERSION >= 3
module_str = PyUnicode_InternFromString("__module__");
#else
module_str = PyString_InternFromString("__module__");
#endif
}
if (!doc_str) {
#if PY_MAJOR_VERSION >= 3
doc_str = PyUnicode_InternFromString("__doc__");
#else
doc_str = PyString_InternFromString("__doc__");
#endif
}
object = PyObject_GetAttr(wrapped, module_str);
if (object) {
if (PyDict_SetItem(self->dict, module_str, object) == -1) {
Py_DECREF(object);
return -1;
}
Py_DECREF(object);
}
else
PyErr_Clear();
object = PyObject_GetAttr(wrapped, doc_str);
if (object) {
if (PyDict_SetItem(self->dict, doc_str, object) == -1) {
Py_DECREF(object);
return -1;
}
Py_DECREF(object);
}
else
PyErr_Clear();
return 0;
}
/* ------------------------------------------------------------------------- */
static int WraptObjectProxy_init(WraptObjectProxyObject *self,
PyObject *args, PyObject *kwds)
{
PyObject *wrapped = NULL;
static char *kwlist[] = { "wrapped", NULL };
if (!PyArg_ParseTupleAndKeywords(args, kwds, "O:ObjectProxy",
kwlist, &wrapped)) {
return -1;
}
return WraptObjectProxy_raw_init(self, wrapped);
}
/* ------------------------------------------------------------------------- */
static int WraptObjectProxy_traverse(WraptObjectProxyObject *self,
visitproc visit, void *arg)
{
Py_VISIT(self->dict);
Py_VISIT(self->wrapped);
return 0;
}
/* ------------------------------------------------------------------------- */
static int WraptObjectProxy_clear(WraptObjectProxyObject *self)
{
Py_CLEAR(self->dict);
Py_CLEAR(self->wrapped);
return 0;
}
/* ------------------------------------------------------------------------- */
static void WraptObjectProxy_dealloc(WraptObjectProxyObject *self)
{
PyObject_GC_UnTrack(self);
WraptObjectProxy_clear(self);
Py_TYPE(self)->tp_free(self);
}
/* ------------------------------------------------------------------------- */
static PyObject *WraptObjectProxy_repr(WraptObjectProxyObject *self)
{
if (!self->wrapped) {
PyErr_SetString(PyExc_ValueError, "wrapper has not been initialized");
return NULL;
}
#if PY_MAJOR_VERSION >= 3
return PyUnicode_FromFormat("<%s at %p for %s at %p>",
Py_TYPE(self)->tp_name, self,
Py_TYPE(self->wrapped)->tp_name, self->wrapped);
#else
return PyString_FromFormat("<%s at %p for %s at %p>",
Py_TYPE(self)->tp_name, self,
Py_TYPE(self->wrapped)->tp_name, self->wrapped);
#endif
}
/* ------------------------------------------------------------------------- */
static long WraptObjectProxy_hash(WraptObjectProxyObject *self)
{
if (!self->wrapped) {
PyErr_SetString(PyExc_ValueError, "wrapper has not been initialized");
return -1;
}
return PyObject_Hash(self->wrapped);
}
/* ------------------------------------------------------------------------- */
static PyObject *WraptObjectProxy_str(WraptObjectProxyObject *self)
{
if (!self->wrapped) {
PyErr_SetString(PyExc_ValueError, "wrapper has not been initialized");
return NULL;
}
return PyObject_Str(self->wrapped);
}
/* ------------------------------------------------------------------------- */
static PyObject *WraptObjectProxy_add(PyObject *o1, PyObject *o2)
{
if (!((WraptObjectProxyObject *)o1)->wrapped) {
PyErr_SetString(PyExc_ValueError, "wrapper has not been initialized");
return NULL;
}
if (!((WraptObjectProxyObject *)o2)->wrapped) {
PyErr_SetString(PyExc_ValueError, "wrapper has not been initialized");
return NULL;
}
if (PyObject_IsInstance(o1, (PyObject *)&WraptObjectProxy_Type))
o1 = ((WraptObjectProxyObject *)o1)->wrapped;
if (PyObject_IsInstance(o2, (PyObject *)&WraptObjectProxy_Type))
o2 = ((WraptObjectProxyObject *)o2)->wrapped;
return PyNumber_Add(o1, o2);
}
/* ------------------------------------------------------------------------- */
static PyObject *WraptObjectProxy_subtract(PyObject *o1, PyObject *o2)
{
if (!((WraptObjectProxyObject *)o1)->wrapped) {
PyErr_SetString(PyExc_ValueError, "wrapper has not been initialized");
return NULL;
}
if (!((WraptObjectProxyObject *)o2)->wrapped) {
PyErr_SetString(PyExc_ValueError, "wrapper has not been initialized");
return NULL;
}
if (PyObject_IsInstance(o1, (PyObject *)&WraptObjectProxy_Type))
o1 = ((WraptObjectProxyObject *)o1)->wrapped;
if (PyObject_IsInstance(o2, (PyObject *)&WraptObjectProxy_Type))
o2 = ((WraptObjectProxyObject *)o2)->wrapped;
return PyNumber_Subtract(o1, o2);
}
/* ------------------------------------------------------------------------- */
static PyObject *WraptObjectProxy_multiply(PyObject *o1, PyObject *o2)
{
if (!((WraptObjectProxyObject *)o1)->wrapped) {
PyErr_SetString(PyExc_ValueError, "wrapper has not been initialized");
return NULL;
}
if (!((WraptObjectProxyObject *)o2)->wrapped) {
PyErr_SetString(PyExc_ValueError, "wrapper has not been initialized");
return NULL;
}
if (PyObject_IsInstance(o1, (PyObject *)&WraptObjectProxy_Type))
o1 = ((WraptObjectProxyObject *)o1)->wrapped;
if (PyObject_IsInstance(o2, (PyObject *)&WraptObjectProxy_Type))
o2 = ((WraptObjectProxyObject *)o2)->wrapped;
return PyNumber_Multiply(o1, o2);
}
/* ------------------------------------------------------------------------- */
#if PY_MAJOR_VERSION < 3
static PyObject *WraptObjectProxy_divide(PyObject *o1, PyObject *o2)
{
if (!((WraptObjectProxyObject *)o1)->wrapped) {
PyErr_SetString(PyExc_ValueError, "wrapper has not been initialized");
return NULL;
}
if (!((WraptObjectProxyObject *)o2)->wrapped) {
PyErr_SetString(PyExc_ValueError, "wrapper has not been initialized");
return NULL;
}
if (PyObject_IsInstance(o1, (PyObject *)&WraptObjectProxy_Type))
o1 = ((WraptObjectProxyObject *)o1)->wrapped;
if (PyObject_IsInstance(o2, (PyObject *)&WraptObjectProxy_Type))
o2 = ((WraptObjectProxyObject *)o2)->wrapped;
return PyNumber_Divide(o1, o2);
}
#endif
/* ------------------------------------------------------------------------- */
static PyObject *WraptObjectProxy_remainder(PyObject *o1, PyObject *o2)
{
if (!((WraptObjectProxyObject *)o1)->wrapped) {
PyErr_SetString(PyExc_ValueError, "wrapper has not been initialized");
return NULL;
}
if (!((WraptObjectProxyObject *)o2)->wrapped) {
PyErr_SetString(PyExc_ValueError, "wrapper has not been initialized");
return NULL;
}
if (PyObject_IsInstance(o1, (PyObject *)&WraptObjectProxy_Type))
o1 = ((WraptObjectProxyObject *)o1)->wrapped;
if (PyObject_IsInstance(o2, (PyObject *)&WraptObjectProxy_Type))
o2 = ((WraptObjectProxyObject *)o2)->wrapped;
return PyNumber_Remainder(o1, o2);
}
/* ------------------------------------------------------------------------- */
static PyObject *WraptObjectProxy_divmod(PyObject *o1, PyObject *o2)
{
if (!((WraptObjectProxyObject *)o1)->wrapped) {
PyErr_SetString(PyExc_ValueError, "wrapper has not been initialized");
return NULL;
}
if (!((WraptObjectProxyObject *)o2)->wrapped) {
PyErr_SetString(PyExc_ValueError, "wrapper has not been initialized");
return NULL;
}
if (PyObject_IsInstance(o1, (PyObject *)&WraptObjectProxy_Type))
o1 = ((WraptObjectProxyObject *)o1)->wrapped;
if (PyObject_IsInstance(o2, (PyObject *)&WraptObjectProxy_Type))
o2 = ((WraptObjectProxyObject *)o2)->wrapped;
return PyNumber_Divmod(o1, o2);
}
Loading ...