PyObject *dict;
} DictRemoverObject;
+#define _DictRemoverObject_CAST(op) ((DictRemoverObject *)(op))
+
static int
-_DictRemover_traverse(DictRemoverObject *self, visitproc visit, void *arg)
+_DictRemover_traverse(PyObject *myself, visitproc visit, void *arg)
{
+ DictRemoverObject *self = _DictRemoverObject_CAST(myself);
Py_VISIT(Py_TYPE(self));
Py_VISIT(self->key);
Py_VISIT(self->dict);
}
static int
-_DictRemover_clear(DictRemoverObject *self)
+_DictRemover_clear(PyObject *myself)
{
+ DictRemoverObject *self = _DictRemoverObject_CAST(myself);
Py_CLEAR(self->key);
Py_CLEAR(self->dict);
return 0;
_DictRemover_dealloc(PyObject *myself)
{
PyTypeObject *tp = Py_TYPE(myself);
- DictRemoverObject *self = (DictRemoverObject *)myself;
PyObject_GC_UnTrack(myself);
- (void)_DictRemover_clear(self);
+ (void)_DictRemover_clear(myself);
tp->tp_free(myself);
Py_DECREF(tp);
}
static PyObject *
_DictRemover_call(PyObject *myself, PyObject *args, PyObject *kw)
{
- DictRemoverObject *self = (DictRemoverObject *)myself;
+ DictRemoverObject *self = _DictRemoverObject_CAST(myself);
if (self->key && self->dict) {
if (-1 == PyDict_DelItem(self->dict, self->key)) {
PyErr_FormatUnraisable("Exception ignored on calling _ctypes.DictRemover");
PyObject *keep; // If set, a reference to the original CDataObject.
} StructParamObject;
+#define _StructParamObject_CAST(op) ((StructParamObject *)(op))
+
static int
-StructParam_traverse(StructParamObject *self, visitproc visit, void *arg)
+StructParam_traverse(PyObject *self, visitproc visit, void *arg)
{
Py_VISIT(Py_TYPE(self));
return 0;
}
static int
-StructParam_clear(StructParamObject *self)
+StructParam_clear(PyObject *myself)
{
+ StructParamObject *self = _StructParamObject_CAST(myself);
Py_CLEAR(self->keep);
return 0;
}
static void
StructParam_dealloc(PyObject *myself)
{
- StructParamObject *self = (StructParamObject *)myself;
+ StructParamObject *self = _StructParamObject_CAST(myself);
PyTypeObject *tp = Py_TYPE(self);
PyObject_GC_UnTrack(myself);
- (void)StructParam_clear(self);
+ (void)StructParam_clear(myself);
PyMem_Free(self->ptr);
tp->tp_free(myself);
Py_DECREF(tp);
info->paramfunc = StructUnionType_paramfunc;
- if (PyDict_GetItemRef((PyObject *)attrdict, &_Py_ID(_fields_), &fields) < 0) {
+ if (PyDict_GetItemRef(attrdict, &_Py_ID(_fields_), &fields) < 0) {
Py_DECREF(attrdict);
return -1;
}
*/
static int
-CharArray_set_raw(CDataObject *self, PyObject *value, void *Py_UNUSED(ignored))
+CharArray_set_raw(PyObject *op, PyObject *value, void *Py_UNUSED(ignored))
{
char *ptr;
Py_ssize_t size;
Py_buffer view;
+ CDataObject *self = _CDataObject_CAST(op);
if (value == NULL) {
PyErr_SetString(PyExc_AttributeError, "cannot delete attribute");
}
static PyObject *
-CharArray_get_raw(CDataObject *self, void *Py_UNUSED(ignored))
+CharArray_get_raw(PyObject *op, void *Py_UNUSED(ignored))
{
PyObject *res;
+ CDataObject *self = _CDataObject_CAST(op);
LOCK_PTR(self);
res = PyBytes_FromStringAndSize(self->b_ptr, self->b_size);
UNLOCK_PTR(self);
}
static PyObject *
-CharArray_get_value(CDataObject *self, void *Py_UNUSED(ignored))
+CharArray_get_value(PyObject *op, void *Py_UNUSED(ignored))
{
Py_ssize_t i;
PyObject *res;
+ CDataObject *self = _CDataObject_CAST(op);
LOCK_PTR(self);
char *ptr = self->b_ptr;
for (i = 0; i < self->b_size; ++i)
}
static int
-CharArray_set_value(CDataObject *self, PyObject *value, void *Py_UNUSED(ignored))
+CharArray_set_value(PyObject *op, PyObject *value, void *Py_UNUSED(ignored))
{
const char *ptr;
Py_ssize_t size;
+ CDataObject *self = _CDataObject_CAST(op);
if (value == NULL) {
PyErr_SetString(PyExc_TypeError,
}
static PyGetSetDef CharArray_getsets[] = {
- { "raw", (getter)CharArray_get_raw, (setter)CharArray_set_raw,
- "value", NULL },
- { "value", (getter)CharArray_get_value, (setter)CharArray_set_value,
- "string value"},
+ { "raw", CharArray_get_raw, CharArray_set_raw, "value", NULL },
+ { "value", CharArray_get_value, CharArray_set_value, "string value" },
{ NULL, NULL }
};
static PyObject *
-WCharArray_get_value(CDataObject *self, void *Py_UNUSED(ignored))
+WCharArray_get_value(PyObject *op, void *Py_UNUSED(ignored))
{
Py_ssize_t i;
PyObject *res;
+ CDataObject *self = _CDataObject_CAST(op);
wchar_t *ptr = (wchar_t *)self->b_ptr;
LOCK_PTR(self);
for (i = 0; i < self->b_size/(Py_ssize_t)sizeof(wchar_t); ++i)
}
static int
-WCharArray_set_value(CDataObject *self, PyObject *value, void *Py_UNUSED(ignored))
+WCharArray_set_value(PyObject *op, PyObject *value, void *Py_UNUSED(ignored))
{
+ CDataObject *self = _CDataObject_CAST(op);
+
if (value == NULL) {
PyErr_SetString(PyExc_TypeError,
"can't delete attribute");
}
static PyGetSetDef WCharArray_getsets[] = {
- { "value", (getter)WCharArray_get_value, (setter)WCharArray_set_value,
- "string value"},
+ { "value", WCharArray_get_value, WCharArray_set_value, "string value" },
{ NULL, NULL }
};
stginfo->getfunc = NULL;
stginfo->ffi_type_pointer = ffi_type_pointer;
- if (PyDict_GetItemRef((PyObject *)attrdict, &_Py_ID(_flags_), &ob) < 0) {
+ if (PyDict_GetItemRef(attrdict, &_Py_ID(_flags_), &ob) < 0) {
return -1;
}
if (!ob || !PyLong_Check(ob)) {
Py_DECREF(ob);
/* _argtypes_ is optional... */
- if (PyDict_GetItemRef((PyObject *)attrdict, &_Py_ID(_argtypes_), &ob) < 0) {
+ if (PyDict_GetItemRef(attrdict, &_Py_ID(_argtypes_), &ob) < 0) {
return -1;
}
if (ob) {
stginfo->converters = converters;
}
- if (PyDict_GetItemRef((PyObject *)attrdict, &_Py_ID(_restype_), &ob) < 0) {
+ if (PyDict_GetItemRef(attrdict, &_Py_ID(_restype_), &ob) < 0) {
return -1;
}
if (ob) {
}
}
/* XXX later, maybe.
- if (PyDict_GetItemRef((PyObject *)attrdict, &_Py _ID(_errcheck_), &ob) < 0) {
+ if (PyDict_GetItemRef(attrdict, &_Py _ID(_errcheck_), &ob) < 0) {
return -1;
}
if (ob) {
static int
-PyCData_traverse(CDataObject *self, visitproc visit, void *arg)
+PyCData_traverse(PyObject *op, visitproc visit, void *arg)
{
+ CDataObject *self = _CDataObject_CAST(op);
Py_VISIT(self->b_objects);
Py_VISIT((PyObject *)self->b_base);
PyTypeObject *type = Py_TYPE(self);
}
static int
-PyCData_clear(CDataObject *self)
+PyCData_clear(PyObject *op)
{
+ CDataObject *self = _CDataObject_CAST(op);
Py_CLEAR(self->b_objects);
if ((self->b_needsfree)
&& _CDataObject_HasExternalBuffer(self))
{
PyTypeObject *type = Py_TYPE(self);
PyObject_GC_UnTrack(self);
- PyCData_clear((CDataObject *)self);
+ (void)PyCData_clear(self);
type->tp_free(self);
Py_DECREF(type);
}
static int
PyCData_NewGetBuffer(PyObject *myself, Py_buffer *view, int flags)
{
- CDataObject *self = (CDataObject *)myself;
+ CDataObject *self = _CDataObject_CAST(myself);
ctypes_state *st = get_module_state_by_def(Py_TYPE(Py_TYPE(myself)));
StgInfo *info;
PyCData_reduce_impl(PyObject *myself, PyTypeObject *cls)
/*[clinic end generated code: output=1a025ccfdd8c935d input=34097a5226ea63c1]*/
{
- CDataObject *self = (CDataObject *)myself;
+ CDataObject *self = _CDataObject_CAST(myself);
ctypes_state *st = get_module_state_by_class(cls);
StgInfo *info;
Py_ssize_t len;
int res;
PyObject *dict, *mydict;
- CDataObject *self = (CDataObject *)myself;
+ CDataObject *self = _CDataObject_CAST(myself);
if (!PyArg_ParseTuple(args, "O!s#",
&PyDict_Type, &dict, &data, &len))
{
PyCData_get(ctypes_state *st, PyObject *type, GETFUNC getfunc, PyObject *src,
Py_ssize_t index, Py_ssize_t size, char *adr)
{
-#ifdef Py_GIL_DISABLED
- // This isn't used if the GIL is enabled, so it causes a compiler warning.
- CDataObject *cdata = (CDataObject *)src;
-#endif
+ CDataObject *cdata = _CDataObject_CAST(src);
if (getfunc) {
PyObject *res;
LOCK_PTR(cdata);
}
static PyObject *
-PyCFuncPtr_call(PyCFuncPtrObject *self, PyObject *inargs, PyObject *kwds)
+PyCFuncPtr_call(PyObject *op, PyObject *inargs, PyObject *kwds)
{
PyObject *restype;
PyObject *converters;
IUnknown *piunk = NULL;
#endif
void *pProc = NULL;
+ PyCFuncPtrObject *self = _PyCFuncPtrObject_CAST(op);
int inoutmask;
int outmask;
ctypes_state *st = get_module_state_by_def(Py_TYPE(Py_TYPE(self)));
StgInfo *info;
- if (PyStgInfo_FromObject(st, (PyObject *)self, &info) < 0) {
+ if (PyStgInfo_FromObject(st, op, &info) < 0) {
return NULL;
}
assert(info); /* Cannot be NULL for PyCFuncPtrObject instances */
}
static int
-PyCFuncPtr_traverse(PyCFuncPtrObject *self, visitproc visit, void *arg)
+PyCFuncPtr_traverse(PyObject *op, visitproc visit, void *arg)
{
+ PyCFuncPtrObject *self = _PyCFuncPtrObject_CAST(op);
Py_VISIT(self->callable);
Py_VISIT(self->restype);
Py_VISIT(self->checker);
Py_VISIT(self->converters);
Py_VISIT(self->paramflags);
Py_VISIT(self->thunk);
- return PyCData_traverse((CDataObject *)self, visit, arg);
+ return PyCData_traverse(op, visit, arg);
}
static int
-PyCFuncPtr_clear(PyCFuncPtrObject *self)
+PyCFuncPtr_clear(PyObject *op)
{
+ PyCFuncPtrObject *self = _PyCFuncPtrObject_CAST(op);
Py_CLEAR(self->callable);
Py_CLEAR(self->restype);
Py_CLEAR(self->checker);
Py_CLEAR(self->converters);
Py_CLEAR(self->paramflags);
Py_CLEAR(self->thunk);
- return PyCData_clear((CDataObject *)self);
+ return PyCData_clear(op);
}
static void
-PyCFuncPtr_dealloc(PyCFuncPtrObject *self)
+PyCFuncPtr_dealloc(PyObject *self)
{
PyObject_GC_UnTrack(self);
- PyCFuncPtr_clear(self);
+ (void)PyCFuncPtr_clear(self);
PyTypeObject *type = Py_TYPE(self);
- type->tp_free((PyObject *)self);
+ type->tp_free(self);
Py_DECREF(type);
}
static PyObject *
-PyCFuncPtr_repr(PyCFuncPtrObject *self)
+PyCFuncPtr_repr(PyObject *op)
{
+ PyCFuncPtrObject *self = _PyCFuncPtrObject_CAST(op);
#ifdef MS_WIN32
if (self->index)
return PyUnicode_FromFormat("<COM method offset %d: %s at %p>",
}
static int
-PyCFuncPtr_bool(PyCFuncPtrObject *self)
+PyCFuncPtr_bool(PyObject *op)
{
+ PyCFuncPtrObject *self = _PyCFuncPtrObject_CAST(op);
return ((*(void **)self->b_ptr != NULL)
#ifdef MS_WIN32
|| (self->index != 0)
PyCArray_Type
*/
static int
-Array_init(CDataObject *self, PyObject *args, PyObject *kw)
+Array_init(PyObject *self, PyObject *args, PyObject *kw)
{
Py_ssize_t i;
Py_ssize_t n;
for (i = 0; i < n; ++i) {
PyObject *v;
v = PyTuple_GET_ITEM(args, i);
- if (-1 == PySequence_SetItem((PyObject *)self, i, v))
+ if (-1 == PySequence_SetItem(self, i, v))
return -1;
}
return 0;
static PyObject *
Array_item(PyObject *myself, Py_ssize_t index)
{
- CDataObject *self = (CDataObject *)myself;
+ CDataObject *self = _CDataObject_CAST(myself);
Py_ssize_t offset, size;
if (index < 0 || index >= self->b_length) {
ctypes_state *st = get_module_state_by_def(Py_TYPE(Py_TYPE(self)));
StgInfo *stginfo;
- if (PyStgInfo_FromObject(st, (PyObject *)self, &stginfo) < 0) {
+ if (PyStgInfo_FromObject(st, myself, &stginfo) < 0) {
return NULL;
}
size = stginfo->size / stginfo->length;
offset = index * size;
- return PyCData_get(st, stginfo->proto, stginfo->getfunc, (PyObject *)self,
- index, size, self->b_ptr + offset);
+ return PyCData_get(st, stginfo->proto, stginfo->getfunc, myself,
+ index, size, self->b_ptr + offset);
}
static PyObject *
Array_subscript(PyObject *myself, PyObject *item)
{
- CDataObject *self = (CDataObject *)myself;
+ CDataObject *self = _CDataObject_CAST(myself);
if (PyIndex_Check(item)) {
Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError);
ctypes_state *st = get_module_state_by_def(Py_TYPE(Py_TYPE(self)));
StgInfo *stginfo;
- if (PyStgInfo_FromObject(st, (PyObject *)self, &stginfo) < 0) {
+ if (PyStgInfo_FromObject(st, myself, &stginfo) < 0) {
return NULL;
}
assert(stginfo); /* Cannot be NULL for array object instances */
static int
Array_ass_item(PyObject *myself, Py_ssize_t index, PyObject *value)
{
- CDataObject *self = (CDataObject *)myself;
+ CDataObject *self = _CDataObject_CAST(myself);
Py_ssize_t size, offset;
char *ptr;
ctypes_state *st = get_module_state_by_def(Py_TYPE(Py_TYPE(self)));
StgInfo *stginfo;
- if (PyStgInfo_FromObject(st, (PyObject *)self, &stginfo) < 0) {
+ if (PyStgInfo_FromObject(st, myself, &stginfo) < 0) {
return -1;
}
assert(stginfo); /* Cannot be NULL for array object instances */
offset = index * size;
ptr = self->b_ptr + offset;
- return PyCData_set(st, (PyObject *)self, stginfo->proto, stginfo->setfunc, value,
- index, size, ptr);
+ return PyCData_set(st, myself, stginfo->proto, stginfo->setfunc, value,
+ index, size, ptr);
}
static int
Array_ass_subscript(PyObject *myself, PyObject *item, PyObject *value)
{
- CDataObject *self = (CDataObject *)myself;
+ CDataObject *self = _CDataObject_CAST(myself);
if (value == NULL) {
PyErr_SetString(PyExc_TypeError,
static Py_ssize_t
Array_length(PyObject *myself)
{
- CDataObject *self = (CDataObject *)myself;
+ CDataObject *self = _CDataObject_CAST(myself);
return self->b_length;
}
/*[clinic end generated code: output=da39a3ee5e6b4b0d input=016c476c7aa8b8a8]*/
static int
-Simple_set_value(CDataObject *self, PyObject *value, void *Py_UNUSED(ignored))
+Simple_set_value(PyObject *op, PyObject *value, void *Py_UNUSED(ignored))
{
PyObject *result;
+ CDataObject *self = _CDataObject_CAST(op);
if (value == NULL) {
PyErr_SetString(PyExc_TypeError,
ctypes_state *st = get_module_state_by_def(Py_TYPE(Py_TYPE(self)));
StgInfo *info;
- if (PyStgInfo_FromObject(st, (PyObject *)self, &info) < 0) {
+ if (PyStgInfo_FromObject(st, op, &info) < 0) {
return -1;
}
assert(info); /* Cannot be NULL for CDataObject instances */
}
static int
-Simple_init(CDataObject *self, PyObject *args, PyObject *kw)
+Simple_init(PyObject *self, PyObject *args, PyObject *kw)
{
PyObject *value = NULL;
if (!PyArg_UnpackTuple(args, "__init__", 0, 1, &value))
}
static PyObject *
-Simple_get_value(CDataObject *self, void *Py_UNUSED(ignored))
+Simple_get_value(PyObject *op, void *Py_UNUSED(ignored))
{
+ CDataObject *self = _CDataObject_CAST(op);
ctypes_state *st = get_module_state_by_def(Py_TYPE(Py_TYPE(self)));
StgInfo *info;
- if (PyStgInfo_FromObject(st, (PyObject *)self, &info) < 0) {
+ if (PyStgInfo_FromObject(st, op, &info) < 0) {
return NULL;
}
assert(info); /* Cannot be NULL for CDataObject instances */
}
static PyGetSetDef Simple_getsets[] = {
- { "value", (getter)Simple_get_value, (setter)Simple_set_value,
+ { "value", Simple_get_value, Simple_set_value,
"current value", NULL },
{ NULL, NULL }
};
return Py_NewRef(self);
}
/* call stginfo->getfunc */
- return Simple_get_value((CDataObject *)self, NULL);
+ return Simple_get_value(self, NULL);
}
static PyMethodDef Simple_methods[] = {
{ NULL, NULL },
};
-static int Simple_bool(CDataObject *self)
+static int
+Simple_bool(PyObject *op)
{
int cmp;
+ CDataObject *self = _CDataObject_CAST(op);
LOCK_PTR(self);
cmp = memcmp(self->b_ptr, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", self->b_size);
UNLOCK_PTR(self);
/* "%s(%s)" % (self.__class__.__name__, self.value) */
static PyObject *
-Simple_repr(CDataObject *self)
+Simple_repr(PyObject *self)
{
PyObject *val, *result;
ctypes_state *st = get_module_state_by_def(Py_TYPE(Py_TYPE(self)));
static PyObject *
Pointer_item(PyObject *myself, Py_ssize_t index)
{
- CDataObject *self = (CDataObject *)myself;
+ CDataObject *self = _CDataObject_CAST(myself);
Py_ssize_t size;
Py_ssize_t offset;
PyObject *proto;
ctypes_state *st = get_module_state_by_def(Py_TYPE(Py_TYPE(myself)));
StgInfo *stginfo;
- if (PyStgInfo_FromObject(st, (PyObject *)self, &stginfo) < 0) {
+ if (PyStgInfo_FromObject(st, myself, &stginfo) < 0) {
return NULL;
}
assert(stginfo); /* Cannot be NULL for pointer object instances */
size = iteminfo->size;
offset = index * iteminfo->size;
- return PyCData_get(st, proto, stginfo->getfunc, (PyObject *)self,
+ return PyCData_get(st, proto, stginfo->getfunc, myself,
index, size, (char *)((char *)deref + offset));
}
static int
Pointer_ass_item(PyObject *myself, Py_ssize_t index, PyObject *value)
{
- CDataObject *self = (CDataObject *)myself;
+ CDataObject *self = _CDataObject_CAST(myself);
Py_ssize_t size;
Py_ssize_t offset;
PyObject *proto;
ctypes_state *st = get_module_state_by_def(Py_TYPE(Py_TYPE(myself)));
StgInfo *stginfo;
- if (PyStgInfo_FromObject(st, (PyObject *)self, &stginfo) < 0) {
+ if (PyStgInfo_FromObject(st, myself, &stginfo) < 0) {
return -1;
}
assert(stginfo); /* Cannot be NULL for pointer instances */
size = iteminfo->size;
offset = index * iteminfo->size;
- return PyCData_set(st, (PyObject *)self, proto, stginfo->setfunc, value,
+ return PyCData_set(st, myself, proto, stginfo->setfunc, value,
index, size, ((char *)deref + offset));
}
static PyObject *
-Pointer_get_contents(CDataObject *self, void *closure)
+Pointer_get_contents(PyObject *self, void *closure)
{
- void *deref = locked_deref(self);
+ void *deref = locked_deref(_CDataObject_CAST(self));
if (deref == NULL) {
PyErr_SetString(PyExc_ValueError,
"NULL pointer access");
ctypes_state *st = get_module_state_by_def(Py_TYPE(Py_TYPE(self)));
StgInfo *stginfo;
- if (PyStgInfo_FromObject(st, (PyObject *)self, &stginfo) < 0) {
+ if (PyStgInfo_FromObject(st, self, &stginfo) < 0) {
return NULL;
}
assert(stginfo); /* Cannot be NULL for pointer instances */
- return PyCData_FromBaseObj(st, stginfo->proto,
- (PyObject *)self, 0,
- deref);
+ return PyCData_FromBaseObj(st, stginfo->proto, self, 0, deref);
}
static int
-Pointer_set_contents(CDataObject *self, PyObject *value, void *closure)
+Pointer_set_contents(PyObject *op, PyObject *value, void *closure)
{
CDataObject *dst;
PyObject *keep;
+ CDataObject *self = _CDataObject_CAST(op);
if (value == NULL) {
PyErr_SetString(PyExc_TypeError,
}
ctypes_state *st = get_module_state_by_def(Py_TYPE(Py_TYPE(self)));
StgInfo *stginfo;
- if (PyStgInfo_FromObject(st, (PyObject *)self, &stginfo) < 0) {
+ if (PyStgInfo_FromObject(st, op, &stginfo) < 0) {
return -1;
}
assert(stginfo); /* Cannot be NULL for pointer instances */
}
static PyGetSetDef Pointer_getsets[] = {
- { "contents", (getter)Pointer_get_contents,
- (setter)Pointer_set_contents,
+ { "contents", Pointer_get_contents, Pointer_set_contents,
"the object this pointer points to (read-write)", NULL },
{ NULL, NULL }
};
static int
-Pointer_init(CDataObject *self, PyObject *args, PyObject *kw)
+Pointer_init(PyObject *self, PyObject *args, PyObject *kw)
{
PyObject *value = NULL;
-
if (!PyArg_UnpackTuple(args, "POINTER", 0, 1, &value))
return -1;
if (value == NULL)
static PyObject *
Pointer_subscript(PyObject *myself, PyObject *item)
{
- CDataObject *self = (CDataObject *)myself;
+ CDataObject *self = _CDataObject_CAST(myself);
if (PyIndex_Check(item)) {
Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError);
if (i == -1 && PyErr_Occurred())
ctypes_state *st = get_module_state_by_def(Py_TYPE(Py_TYPE(myself)));
StgInfo *stginfo;
- if (PyStgInfo_FromObject(st, (PyObject *)self, &stginfo) < 0) {
+ if (PyStgInfo_FromObject(st, myself, &stginfo) < 0) {
return NULL;
}
assert(stginfo); /* Cannot be NULL for pointer instances */
}
static int
-Pointer_bool(CDataObject *self)
+Pointer_bool(PyObject *self)
{
- return locked_deref(self) != NULL;
+ return locked_deref(_CDataObject_CAST(self)) != NULL;
}
static PyType_Slot pycpointer_slots[] = {
- {Py_tp_doc, PyDoc_STR("XXX to be provided")},
+ {Py_tp_doc, (void *)PyDoc_STR("XXX to be provided")},
{Py_tp_getset, Pointer_getsets},
{Py_tp_init, Pointer_init},
{Py_tp_new, Pointer_new},