static PyObject * DBusPythonLong_tp_new(PyTypeObject *cls, PyObject *args, PyObject *kwargs) { PyObject *self; long variantness = 0; static char *argnames[] = {"variant_level", NULL}; if (PyTuple_Size(args) > 1) { PyErr_SetString(PyExc_TypeError, "__new__ takes at most one positional parameter"); return NULL; } if (!PyArg_ParseTupleAndKeywords(dbus_py_empty_tuple, kwargs, "|l:__new__", argnames, &variantness)) return NULL; if (variantness < 0) { PyErr_SetString(PyExc_ValueError, "variant_level must be non-negative"); return NULL; } self = (PyLong_Type.tp_new)(cls, args, NULL); if (self) { if (!dbus_py_variant_level_set(self, variantness)) { Py_CLEAR(self); return NULL; } } return self; }
/* To be invoked by destructors. Clear the variant level without touching the * exception state */ void dbus_py_variant_level_clear(PyObject *self) { PyObject *et, *ev, *etb; /* avoid clobbering any pending exception */ PyErr_Fetch(&et, &ev, &etb); if (!dbus_py_variant_level_set(self, 0)) { /* should never happen */ PyErr_WriteUnraisable(self); } PyErr_Restore(et, ev, etb); }
static PyObject * Struct_tp_new (PyTypeObject *cls, PyObject *args, PyObject *kwargs) { PyObject *signature = NULL; long variantness = 0; PyObject *self, *key; static char *argnames[] = {"signature", "variant_level", NULL}; if (PyTuple_Size(args) != 1) { PyErr_SetString(PyExc_TypeError, "__new__ takes exactly one positional parameter"); return NULL; } if (!PyArg_ParseTupleAndKeywords(dbus_py_empty_tuple, kwargs, "|Ol:__new__", argnames, &signature, &variantness)) { return NULL; } if (variantness < 0) { PyErr_SetString(PyExc_ValueError, "variant_level must be non-negative"); return NULL; } self = (PyTuple_Type.tp_new)(cls, args, NULL); if (!self) return NULL; if (PyTuple_Size(self) < 1) { PyErr_SetString(PyExc_ValueError, "D-Bus structs may not be empty"); Py_CLEAR(self); return NULL; } if (!dbus_py_variant_level_set(self, variantness)) { Py_CLEAR(self); return NULL; } /* convert signature from a borrowed ref of unknown type to an owned ref of type Signature (or None) */ if (!signature) signature = Py_None; if (signature == Py_None || PyObject_IsInstance(signature, (PyObject *)&DBusPySignature_Type)) { Py_INCREF(signature); } else { signature = PyObject_CallFunction((PyObject *)&DBusPySignature_Type, "(O)", signature); if (!signature) { Py_CLEAR(self); return NULL; } } key = PyLong_FromVoidPtr(self); if (!key) { Py_CLEAR(self); Py_CLEAR(signature); return NULL; } if (PyDict_SetItem(struct_signatures, key, signature) < 0) { Py_CLEAR(key); Py_CLEAR(self); Py_CLEAR(signature); return NULL; } Py_CLEAR(key); Py_CLEAR(signature); return self; }