Lines Matching full:cd
1038 CDataObject *cd = PyObject_New(CDataObject, &CData_Type); in new_simple_cdata() local
1039 if (cd == NULL) in new_simple_cdata()
1042 cd->c_data = data; in new_simple_cdata()
1043 cd->c_type = ct; in new_simple_cdata()
1044 cd->c_weakreflist = NULL; in new_simple_cdata()
1045 return (PyObject *)cd; in new_simple_cdata()
1137 CDataObject *cd = _new_casted_primitive(ct); in convert_to_object() local
1138 if (cd != NULL) in convert_to_object()
1139 write_raw_longdouble_data(cd->c_data, value); in convert_to_object()
1140 return (PyObject *)cd; in convert_to_object()
1449 get_array_length(CDataObject *cd) in get_array_length() argument
1451 if (cd->c_type->ct_length < 0) in get_array_length()
1452 return ((CDataObject_own_length *)cd)->length; in get_array_length()
1454 return cd->c_type->ct_length; in get_array_length()
1544 CDataObject *cd = (CDataObject *)init; in convert_array_from_object() local
1545 if (cd->c_type == ct) in convert_array_from_object()
1547 Py_ssize_t n = get_array_length(cd); in convert_array_from_object()
1548 memcpy(data, cd->c_data, n * ctitem->ct_size); in convert_array_from_object()
1878 static void cdata_dealloc(CDataObject *cd) in cdata_dealloc() argument
1880 if (cd->c_weakreflist != NULL) in cdata_dealloc()
1881 PyObject_ClearWeakRefs((PyObject *) cd); in cdata_dealloc()
1883 Py_DECREF(cd->c_type); in cdata_dealloc()
1885 Py_TYPE(cd)->tp_free((PyObject *)cd); in cdata_dealloc()
1889 static void cdataowning_dealloc(CDataObject *cd) in cdataowning_dealloc() argument
1891 assert(!(cd->c_type->ct_flags & (CT_IS_VOID_PTR | CT_FUNCTIONPTR))); in cdataowning_dealloc()
1893 if (cd->c_type->ct_flags & CT_IS_PTR_TO_OWNED) { in cdataowning_dealloc()
1895 Py_DECREF(((CDataObject_own_structptr *)cd)->structobj); in cdataowning_dealloc()
1898 if (cd->c_type->ct_flags & (CT_PRIMITIVE_ANY | CT_STRUCT | CT_UNION)) { in cdataowning_dealloc()
1899 assert(cd->c_type->ct_size >= 0); in cdataowning_dealloc()
1900 memset(cd->c_data, 0xDD, cd->c_type->ct_size); in cdataowning_dealloc()
1902 else if (cd->c_type->ct_flags & CT_ARRAY) { in cdataowning_dealloc()
1903 Py_ssize_t x = get_array_length(cd); in cdataowning_dealloc()
1905 x *= cd->c_type->ct_itemdescr->ct_size; in cdataowning_dealloc()
1907 memset(cd->c_data, 0xDD, x); in cdataowning_dealloc()
1910 cdata_dealloc(cd); in cdataowning_dealloc()
1913 static void cdataowninggc_dealloc(CDataObject *cd) in cdataowninggc_dealloc() argument
1915 PyObject_GC_UnTrack(cd); in cdataowninggc_dealloc()
1917 if (cd->c_type->ct_flags & CT_IS_VOID_PTR) { /* a handle */ in cdataowninggc_dealloc()
1918 PyObject *x = ((CDataObject_own_structptr *)cd)->structobj; in cdataowninggc_dealloc()
1921 else if (cd->c_type->ct_flags & CT_FUNCTIONPTR) { /* a callback */ in cdataowninggc_dealloc()
1922 ffi_closure *closure = ((CDataObject_closure *)cd)->closure; in cdataowninggc_dealloc()
1935 cdata_dealloc(cd); in cdataowninggc_dealloc()
1938 static void cdatafrombuf_dealloc(CDataObject *cd) in cdatafrombuf_dealloc() argument
1940 Py_buffer *view = ((CDataObject_frombuf *)cd)->bufferview; in cdatafrombuf_dealloc()
1941 cdata_dealloc(cd); in cdatafrombuf_dealloc()
1947 static int cdataowninggc_traverse(CDataObject *cd, visitproc visit, void *arg) in cdataowninggc_traverse() argument
1949 if (cd->c_type->ct_flags & CT_IS_VOID_PTR) { /* a handle */ in cdataowninggc_traverse()
1950 PyObject *x = ((CDataObject_own_structptr *)cd)->structobj; in cdataowninggc_traverse()
1953 else if (cd->c_type->ct_flags & CT_FUNCTIONPTR) { /* a callback */ in cdataowninggc_traverse()
1954 ffi_closure *closure = ((CDataObject_closure *)cd)->closure; in cdataowninggc_traverse()
1961 static int cdatafrombuf_traverse(CDataObject *cd, visitproc visit, void *arg) in cdatafrombuf_traverse() argument
1963 Py_buffer *view = ((CDataObject_frombuf *)cd)->bufferview; in cdatafrombuf_traverse()
1968 static int cdataowninggc_clear(CDataObject *cd) in cdataowninggc_clear() argument
1970 if (cd->c_type->ct_flags & CT_IS_VOID_PTR) { /* a handle */ in cdataowninggc_clear()
1971 CDataObject_own_structptr *cd1 = (CDataObject_own_structptr *)cd; in cdataowninggc_clear()
1977 else if (cd->c_type->ct_flags & CT_FUNCTIONPTR) { /* a callback */ in cdataowninggc_clear()
1978 ffi_closure *closure = ((CDataObject_closure *)cd)->closure; in cdataowninggc_clear()
1986 static int cdatafrombuf_clear(CDataObject *cd) in cdatafrombuf_clear() argument
1988 Py_buffer *view = ((CDataObject_frombuf *)cd)->bufferview; in cdatafrombuf_clear()
2033 static void cdatagcp_finalize(CDataObject_gcp *cd) in cdatagcp_finalize() argument
2035 PyObject *destructor = cd->destructor; in cdatagcp_finalize()
2036 PyObject *origobj = cd->origobj; in cdatagcp_finalize()
2037 cd->destructor = NULL; in cdatagcp_finalize()
2038 cd->origobj = NULL; in cdatagcp_finalize()
2042 static void cdatagcp_dealloc(CDataObject_gcp *cd) in cdatagcp_dealloc() argument
2044 PyObject *destructor = cd->destructor; in cdatagcp_dealloc()
2045 PyObject *origobj = cd->origobj; in cdatagcp_dealloc()
2046 cdata_dealloc((CDataObject *)cd); in cdatagcp_dealloc()
2051 static int cdatagcp_traverse(CDataObject_gcp *cd, visitproc visit, void *arg) in cdatagcp_traverse() argument
2053 Py_VISIT(cd->destructor); in cdatagcp_traverse()
2054 Py_VISIT(cd->origobj); in cdatagcp_traverse()
2058 static PyObject *cdata_float(CDataObject *cd); /*forward*/
2060 static PyObject *convert_cdata_to_enum_string(CDataObject *cd, int both) in convert_cdata_to_enum_string() argument
2063 CTypeDescrObject *ct = cd->c_type; in convert_cdata_to_enum_string()
2066 d_key = convert_to_object(cd->c_data, ct); in convert_cdata_to_enum_string()
2092 static PyObject *cdata_repr(CDataObject *cd) in cdata_repr() argument
2097 if (cd->c_type->ct_flags & CT_PRIMITIVE_ANY) { in cdata_repr()
2098 if (cd->c_type->ct_flags & CT_IS_ENUM) { in cdata_repr()
2099 s = convert_cdata_to_enum_string(cd, 1); in cdata_repr()
2101 else if (cd->c_type->ct_flags & CT_IS_LONGDOUBLE) { in cdata_repr()
2104 /*READ(cd->c_data, sizeof(long double)*/ in cdata_repr()
2105 lvalue = read_raw_longdouble_data(cd->c_data); in cdata_repr()
2110 PyObject *o = convert_to_object(cd->c_data, cd->c_type); in cdata_repr()
2117 else if ((cd->c_type->ct_flags & CT_ARRAY) && cd->c_type->ct_length < 0) { in cdata_repr()
2118 s = PyText_FromFormat("sliced length %zd", get_array_length(cd)); in cdata_repr()
2121 if (cd->c_data != NULL) { in cdata_repr()
2122 s = PyText_FromFormat("%p", cd->c_data); in cdata_repr()
2132 if (cd->c_type->ct_flags & (CT_STRUCT|CT_UNION)) in cdata_repr()
2137 cd->c_type->ct_name, extra, in cdata_repr()
2143 static PyObject *_cdata_repr2(CDataObject *cd, char *text, PyObject *x) in _cdata_repr2() argument
2149 cd->c_type->ct_name, text, PyText_AsUTF8(s)); in _cdata_repr2()
2154 static Py_ssize_t _cdata_var_byte_size(CDataObject *cd) in _cdata_var_byte_size() argument
2156 /* If 'cd' is a 'struct foo' or 'struct foo *' allocated with in _cdata_var_byte_size()
2159 if (!CDataOwn_Check(cd)) in _cdata_var_byte_size()
2162 if (cd->c_type->ct_flags & CT_IS_PTR_TO_OWNED) { in _cdata_var_byte_size()
2163 cd = (CDataObject *)((CDataObject_own_structptr *)cd)->structobj; in _cdata_var_byte_size()
2165 if (cd->c_type->ct_flags & CT_WITH_VAR_ARRAY) { in _cdata_var_byte_size()
2166 return ((CDataObject_own_length *)cd)->length; in _cdata_var_byte_size()
2171 static PyObject *_frombuf_repr(CDataObject *cd, const char *cd_type_name) in _frombuf_repr() argument
2173 Py_buffer *view = ((CDataObject_frombuf *)cd)->bufferview; in _frombuf_repr()
2182 if (cd->c_type->ct_flags & CT_ARRAY) in _frombuf_repr()
2184 Py_ssize_t buflen = get_array_length(cd); in _frombuf_repr()
2200 static PyObject *cdataowning_repr(CDataObject *cd) in cdataowning_repr() argument
2202 Py_ssize_t size = _cdata_var_byte_size(cd); in cdataowning_repr()
2204 if (cd->c_type->ct_flags & CT_POINTER) in cdataowning_repr()
2205 size = cd->c_type->ct_itemdescr->ct_size; in cdataowning_repr()
2206 else if (cd->c_type->ct_flags & CT_ARRAY) in cdataowning_repr()
2207 size = get_array_length(cd) * cd->c_type->ct_itemdescr->ct_size; in cdataowning_repr()
2209 size = cd->c_type->ct_size; in cdataowning_repr()
2212 cd->c_type->ct_name, size); in cdataowning_repr()
2215 static PyObject *cdataowninggc_repr(CDataObject *cd) in cdataowninggc_repr() argument
2217 if (cd->c_type->ct_flags & CT_IS_VOID_PTR) { /* a handle */ in cdataowninggc_repr()
2218 PyObject *x = ((CDataObject_own_structptr *)cd)->structobj; in cdataowninggc_repr()
2219 return _cdata_repr2(cd, "handle to", x); in cdataowninggc_repr()
2221 else if (cd->c_type->ct_flags & CT_FUNCTIONPTR) { /* a callback */ in cdataowninggc_repr()
2222 ffi_closure *closure = ((CDataObject_closure *)cd)->closure; in cdataowninggc_repr()
2225 return cdata_repr(cd); in cdataowninggc_repr()
2227 return _cdata_repr2(cd, "calling", PyTuple_GET_ITEM(args, 1)); in cdataowninggc_repr()
2229 return cdataowning_repr(cd); /* but should be unreachable */ in cdataowninggc_repr()
2232 static PyObject *cdatafrombuf_repr(CDataObject *cd) in cdatafrombuf_repr() argument
2234 return _frombuf_repr(cd, cd->c_type->ct_name); in cdatafrombuf_repr()
2237 static int cdata_nonzero(CDataObject *cd) in cdata_nonzero() argument
2239 if (cd->c_type->ct_flags & CT_PRIMITIVE_ANY) { in cdata_nonzero()
2240 if (cd->c_type->ct_flags & (CT_PRIMITIVE_SIGNED | in cdata_nonzero()
2243 return read_raw_unsigned_data(cd->c_data, cd->c_type->ct_size) != 0; in cdata_nonzero()
2245 if (cd->c_type->ct_flags & CT_PRIMITIVE_FLOAT) { in cdata_nonzero()
2246 if (cd->c_type->ct_flags & CT_IS_LONGDOUBLE) in cdata_nonzero()
2247 return read_raw_longdouble_data(cd->c_data) != 0.0; in cdata_nonzero()
2248 return read_raw_float_data(cd->c_data, cd->c_type->ct_size) != 0.0; in cdata_nonzero()
2250 if (cd->c_type->ct_flags & CT_PRIMITIVE_COMPLEX) { in cdata_nonzero()
2251 Py_complex value = read_raw_complex_data(cd->c_data, in cdata_nonzero()
2252 cd->c_type->ct_size); in cdata_nonzero()
2256 return cd->c_data != NULL; in cdata_nonzero()
2259 static PyObject *cdata_int(CDataObject *cd) in cdata_int() argument
2261 if ((cd->c_type->ct_flags & (CT_PRIMITIVE_SIGNED|CT_PRIMITIVE_FITS_LONG)) in cdata_int()
2266 /*READ(cd->c_data, cd->c_type->ct_size)*/ in cdata_int()
2267 value = (long)read_raw_signed_data(cd->c_data, cd->c_type->ct_size); in cdata_int()
2270 if (cd->c_type->ct_flags & (CT_PRIMITIVE_SIGNED|CT_PRIMITIVE_UNSIGNED)) { in cdata_int()
2271 PyObject *result = convert_to_object(cd->c_data, cd->c_type); in cdata_int()
2276 else if (cd->c_type->ct_flags & CT_PRIMITIVE_CHAR) { in cdata_int()
2277 /*READ(cd->c_data, cd->c_type->ct_size)*/ in cdata_int()
2278 switch (cd->c_type->ct_size) { in cdata_int()
2280 return PyInt_FromLong((unsigned char)cd->c_data[0]); in cdata_int()
2282 return PyInt_FromLong((long)*(cffi_char16_t *)cd->c_data); in cdata_int()
2284 if (cd->c_type->ct_flags & CT_IS_SIGNED_WCHAR) in cdata_int()
2285 return PyInt_FromLong((long)*(int32_t *)cd->c_data); in cdata_int()
2287 return PyInt_FromLong(*(uint32_t *)cd->c_data); in cdata_int()
2289 return PyLong_FromUnsignedLong(*(uint32_t *)cd->c_data); in cdata_int()
2292 else if (cd->c_type->ct_flags & CT_PRIMITIVE_FLOAT) { in cdata_int()
2293 PyObject *o = cdata_float(cd); in cdata_int()
2303 cd->c_type->ct_name); in cdata_int()
2308 static PyObject *cdata_long(CDataObject *cd) in cdata_long() argument
2310 PyObject *res = cdata_int(cd); in cdata_long()
2320 static PyObject *cdata_float(CDataObject *cd) in cdata_float() argument
2322 if (cd->c_type->ct_flags & CT_PRIMITIVE_FLOAT) { in cdata_float()
2324 /*READ(cd->c_data, cd->c_type->ct_size)*/ in cdata_float()
2325 if (!(cd->c_type->ct_flags & CT_IS_LONGDOUBLE)) { in cdata_float()
2326 value = read_raw_float_data(cd->c_data, cd->c_type->ct_size); in cdata_float()
2329 value = (double)read_raw_longdouble_data(cd->c_data); in cdata_float()
2334 cd->c_type->ct_name); in cdata_float()
2438 cdata_length(CDataObject *cd) in cdata_length() argument
2440 if (cd->c_type->ct_flags & CT_ARRAY) { in cdata_length()
2441 return get_array_length(cd); in cdata_length()
2444 cd->c_type->ct_name); in cdata_length()
2449 _cdata_get_indexed_ptr(CDataObject *cd, PyObject *key) in _cdata_get_indexed_ptr() argument
2455 if (cd->c_type->ct_flags & CT_POINTER) { in _cdata_get_indexed_ptr()
2456 if (CDataOwn_Check(cd)) { in _cdata_get_indexed_ptr()
2460 cd->c_type->ct_name); in _cdata_get_indexed_ptr()
2465 if (cd->c_data == NULL) { in _cdata_get_indexed_ptr()
2468 cd->c_type->ct_name); in _cdata_get_indexed_ptr()
2473 else if (cd->c_type->ct_flags & CT_ARRAY) { in _cdata_get_indexed_ptr()
2479 if (i >= get_array_length(cd)) { in _cdata_get_indexed_ptr()
2482 cd->c_type->ct_name, in _cdata_get_indexed_ptr()
2483 i, get_array_length(cd)); in _cdata_get_indexed_ptr()
2489 cd->c_type->ct_name); in _cdata_get_indexed_ptr()
2492 return cd->c_data + i * cd->c_type->ct_itemdescr->ct_size; in _cdata_get_indexed_ptr()
2499 _cdata_getslicearg(CDataObject *cd, PySliceObject *slice, Py_ssize_t bounds[]) in _cdata_getslicearg() argument
2525 ct = cd->c_type; in _cdata_getslicearg()
2532 if (stop > get_array_length(cd)) { in _cdata_getslicearg()
2535 stop, get_array_length(cd)); in _cdata_getslicearg()
2552 cdata_slice(CDataObject *cd, PySliceObject *slice) in cdata_slice() argument
2556 CTypeDescrObject *ct = _cdata_getslicearg(cd, slice, bounds); in cdata_slice()
2567 cdata = cd->c_data + ct->ct_itemdescr->ct_size * bounds[0]; in cdata_slice()
2572 cdata_ass_slice(CDataObject *cd, PySliceObject *slice, PyObject *v) in cdata_ass_slice() argument
2579 CTypeDescrObject *ct = _cdata_getslicearg(cd, slice, bounds); in cdata_ass_slice()
2584 cdata = cd->c_data + itemsize * bounds[0]; in cdata_ass_slice()
2659 cdataowning_subscript(CDataObject *cd, PyObject *key) in cdataowning_subscript() argument
2663 return cdata_slice(cd, (PySliceObject *)key); in cdataowning_subscript()
2665 c = _cdata_get_indexed_ptr(cd, key); in cdataowning_subscript()
2671 if (cd->c_type->ct_flags & CT_IS_PTR_TO_OWNED) { in cdataowning_subscript()
2672 PyObject *res = ((CDataObject_own_structptr *)cd)->structobj; in cdataowning_subscript()
2677 return convert_to_object(c, cd->c_type->ct_itemdescr); in cdataowning_subscript()
2682 cdata_subscript(CDataObject *cd, PyObject *key) in cdata_subscript() argument
2686 return cdata_slice(cd, (PySliceObject *)key); in cdata_subscript()
2688 c = _cdata_get_indexed_ptr(cd, key); in cdata_subscript()
2693 return convert_to_object(c, cd->c_type->ct_itemdescr); in cdata_subscript()
2697 cdata_ass_sub(CDataObject *cd, PyObject *key, PyObject *v) in cdata_ass_sub() argument
2702 return cdata_ass_slice(cd, (PySliceObject *)key, v); in cdata_ass_sub()
2704 c = _cdata_get_indexed_ptr(cd, key); in cdata_ass_sub()
2705 ctitem = cd->c_type->ct_itemdescr; in cdata_ass_sub()
2722 CDataObject *cd; in _cdata_add_or_sub() local
2740 cd = (CDataObject *)v; in _cdata_add_or_sub()
2741 if (cd->c_type->ct_flags & CT_POINTER) in _cdata_add_or_sub()
2742 ctptr = cd->c_type; in _cdata_add_or_sub()
2743 else if (cd->c_type->ct_flags & CT_ARRAY) { in _cdata_add_or_sub()
2744 ctptr = (CTypeDescrObject *)cd->c_type->ct_stuff; in _cdata_add_or_sub()
2748 cd->c_type->ct_name); in _cdata_add_or_sub()
2759 cd->c_type->ct_name); in _cdata_add_or_sub()
2763 return new_simple_cdata(cd->c_data + i * itemsize, ctptr); in _cdata_add_or_sub()
2818 _cdata_attr_errmsg(char *errmsg, CDataObject *cd, PyObject *attr) in _cdata_attr_errmsg() argument
2827 PyErr_Format(PyExc_AttributeError, errmsg, cd->c_type->ct_name, text); in _cdata_attr_errmsg()
2831 cdata_getattro(CDataObject *cd, PyObject *attr) in cdata_getattro() argument
2834 CTypeDescrObject *ct = cd->c_type; in cdata_getattro()
2847 char *data = cd->c_data + cf->cf_offset; in cdata_getattro()
2860 size = _cdata_var_byte_size(cd) - cf->cf_offset; in cdata_getattro()
2877 x = PyObject_GenericGetAttr((PyObject *)cd, attr); in cdata_getattro()
2879 _cdata_attr_errmsg(errmsg, cd, attr); in cdata_getattro()
2884 cdata_setattro(CDataObject *cd, PyObject *attr, PyObject *value) in cdata_setattro() argument
2887 CTypeDescrObject *ct = cd->c_type; in cdata_setattro()
2901 return convert_field_from_object(cd->c_data, cf, value); in cdata_setattro()
2918 x = PyObject_GenericSetAttr((PyObject *)cd, attr, value); in cdata_setattro()
2920 _cdata_attr_errmsg(errmsg, cd, attr); in cdata_setattro()
3022 cdata_call(CDataObject *cd, PyObject *args, PyObject *kwds) in cdata_call() argument
3037 if (!(cd->c_type->ct_flags & CT_FUNCTIONPTR)) { in cdata_call()
3039 cd->c_type->ct_name); in cdata_call()
3042 if (cd->c_data == NULL) { in cdata_call()
3045 cd->c_type->ct_name); in cdata_call()
3053 signature = cd->c_type->ct_stuff; in cdata_call()
3062 cif_descr = (cif_description_t *)cd->c_type->ct_extra; in cdata_call()
3070 cd->c_type->ct_name, nargs_declared, nargs); in cdata_call()
3182 /*READ(cd->c_data, sizeof(void(*)(void)))*/ in cdata_call()
3186 ffi_call(&cif_descr->cif, (void (*)(void))(cd->c_data), in cdata_call()
3230 static PyObject *cdata_dir(PyObject *cd, PyObject *noarg) in cdata_dir() argument
3232 CTypeDescrObject *ct = ((CDataObject *)cd)->c_type; in cdata_dir()
3253 CDataObject *cd = (CDataObject *)cd_; in cdata_complex() local
3255 if (cd->c_type->ct_flags & CT_PRIMITIVE_COMPLEX) { in cdata_complex()
3256 Py_complex value = read_raw_complex_data(cd->c_data, cd->c_type->ct_size); in cdata_complex()
3265 cd->c_type->ct_name); in cdata_complex()
3269 static int explicit_release_case(PyObject *cd) in explicit_release_case() argument
3271 CTypeDescrObject *ct = ((CDataObject *)cd)->c_type; in explicit_release_case()
3272 if (Py_TYPE(cd) == &CDataOwning_Type) { in explicit_release_case()
3276 else if (Py_TYPE(cd) == &CDataFromBuf_Type) { in explicit_release_case()
3279 else if (Py_TYPE(cd) == &CDataGCP_Type) { in explicit_release_case()
3289 static PyObject *cdata_enter(PyObject *cd, PyObject *noarg) in cdata_enter() argument
3291 if (explicit_release_case(cd) < 0) /* only to check the ctype */ in cdata_enter()
3293 Py_INCREF(cd); in cdata_enter()
3294 return cd; in cdata_enter()
3297 static PyObject *cdata_exit(PyObject *cd, PyObject *args) in cdata_exit() argument
3302 switch (explicit_release_case(cd)) in cdata_exit()
3309 ct = ((CDataObject *)cd)->c_type; in cdata_exit()
3311 PyObject *x = ((CDataObject_own_structptr *)cd)->structobj; in cdata_exit()
3321 view = ((CDataObject_frombuf *)cd)->bufferview; in cdata_exit()
3327 cdatagcp_finalize((CDataObject_gcp *)cd); in cdata_exit()
3685 cdata_iter(CDataObject *cd) in cdata_iter() argument
3689 if (!(cd->c_type->ct_flags & CT_ARRAY)) { in cdata_iter()
3691 cd->c_type->ct_name); in cdata_iter()
3699 Py_INCREF(cd); in cdata_iter()
3700 it->di_object = cd; in cdata_iter()
3701 it->di_itemtype = cd->c_type->ct_itemdescr; in cdata_iter()
3702 it->di_next = cd->c_data; in cdata_iter()
3703 it->di_stop = cd->c_data + get_array_length(cd) * it->di_itemtype->ct_size; in cdata_iter()
3715 CDataObject *cd; in allocate_owning_object() local
3717 cd = malloc(size); in allocate_owning_object()
3719 cd = calloc(size, 1); in allocate_owning_object()
3720 if (PyObject_Init((PyObject *)cd, &CDataOwning_Type) == NULL) in allocate_owning_object()
3724 cd->c_type = ct; in allocate_owning_object()
3725 cd->c_weakreflist = NULL; in allocate_owning_object()
3726 return cd; in allocate_owning_object()
3733 CDataObject *cd; in convert_struct_to_owning_object() local
3747 cd = allocate_owning_object(dataoffset + datasize, ct, /*dont_clear=*/1); in convert_struct_to_owning_object()
3748 if (cd == NULL) in convert_struct_to_owning_object()
3750 cd->c_data = ((char *)cd) + dataoffset; in convert_struct_to_owning_object()
3752 memcpy(cd->c_data, data, datasize); in convert_struct_to_owning_object()
3753 return (PyObject *)cd; in convert_struct_to_owning_object()
3760 CDataObject_gcp *cd = PyObject_GC_New(CDataObject_gcp, &CDataGCP_Type); in allocate_gcp_object() local
3761 if (cd == NULL) in allocate_gcp_object()
3767 cd->head.c_data = origobj->c_data; in allocate_gcp_object()
3768 cd->head.c_type = ct; in allocate_gcp_object()
3769 cd->head.c_weakreflist = NULL; in allocate_gcp_object()
3770 cd->origobj = (PyObject *)origobj; in allocate_gcp_object()
3771 cd->destructor = destructor; in allocate_gcp_object()
3773 PyObject_GC_Track(cd); in allocate_gcp_object()
3774 return (CDataObject *)cd; in allocate_gcp_object()
3782 CDataObject *cd; in allocate_with_allocator() local
3785 cd = allocate_owning_object(basesize + datasize, ct, in allocate_with_allocator()
3787 if (cd == NULL) in allocate_with_allocator()
3789 cd->c_data = ((char *)cd) + basesize; in allocate_with_allocator()
3803 cd = (CDataObject *)res; in allocate_with_allocator()
3804 if (!(cd->c_type->ct_flags & (CT_POINTER|CT_ARRAY))) { in allocate_with_allocator()
3807 cd->c_type->ct_name); in allocate_with_allocator()
3811 if (!cd->c_data) { in allocate_with_allocator()
3817 cd = allocate_gcp_object(cd, ct, allocator->ca_free); in allocate_with_allocator()
3820 memset(cd->c_data, 0, datasize); in allocate_with_allocator()
3822 return cd; in allocate_with_allocator()
3829 CDataObject *cd; in direct_newp() local
3901 cd = allocate_owning_object(sizeof(CDataObject_own_structptr), ct, in direct_newp()
3903 if (cd == NULL) { in direct_newp()
3907 /* store the only reference to cds into cd */ in direct_newp()
3908 ((CDataObject_own_structptr *)cd)->structobj = (PyObject *)cds; in direct_newp()
3915 cd->c_data = cds->c_data; in direct_newp()
3918 cd = allocate_with_allocator(dataoffset, datasize, ct, allocator); in direct_newp()
3919 if (cd == NULL) in direct_newp()
3923 ((CDataObject_own_length*)cd)->length = explicitlength; in direct_newp()
3927 if (convert_from_object(cd->c_data, in direct_newp()
3929 Py_DECREF(cd); in direct_newp()
3933 return (PyObject *)cd; in direct_newp()
3967 CDataObject *cd = (CDataObject *)ob; in _my_PyObject_AsBool() local
3968 if (cd->c_type->ct_flags & CT_PRIMITIVE_FLOAT) { in _my_PyObject_AsBool()
3969 /*READ(cd->c_data, cd->c_type->ct_size)*/ in _my_PyObject_AsBool()
3970 if (cd->c_type->ct_flags & CT_IS_LONGDOUBLE) { in _my_PyObject_AsBool()
3972 return read_raw_longdouble_data(cd->c_data) != 0.0; in _my_PyObject_AsBool()
3976 return read_raw_float_data(cd->c_data, in _my_PyObject_AsBool()
3977 cd->c_type->ct_size) != 0.0; in _my_PyObject_AsBool()
4007 CDataObject *cd = (CDataObject *)PyObject_Malloc(dataoffset + ct->ct_size); in _new_casted_primitive() local
4008 if (PyObject_Init((PyObject *)cd, &CData_Type) == NULL) in _new_casted_primitive()
4011 cd->c_type = ct; in _new_casted_primitive()
4012 cd->c_data = ((char*)cd) + dataoffset; in _new_casted_primitive()
4013 cd->c_weakreflist = NULL; in _new_casted_primitive()
4014 return cd; in _new_casted_primitive()
4020 CDataObject *cd; in cast_to_integer_or_char() local
4075 cd = _new_casted_primitive(ct); in cast_to_integer_or_char()
4076 if (cd != NULL) in cast_to_integer_or_char()
4077 write_raw_integer_data(cd->c_data, value, ct->ct_size); in cast_to_integer_or_char()
4078 return cd; in cast_to_integer_or_char()
4112 CDataObject *cd; in do_cast() local
4179 cd = _new_casted_primitive(ct); in do_cast()
4180 if (cd != NULL) in do_cast()
4181 write_raw_longdouble_data(cd->c_data, lvalue); in do_cast()
4182 return (PyObject *)cd; in do_cast()
4190 cd = _new_casted_primitive(ct); in do_cast()
4191 if (cd != NULL) { in do_cast()
4193 write_raw_float_data(cd->c_data, value, ct->ct_size); in do_cast()
4195 write_raw_longdouble_data(cd->c_data, (long double)value); in do_cast()
4197 return (PyObject *)cd; in do_cast()
4232 cd = _new_casted_primitive(ct); in do_cast()
4233 if (cd != NULL) { in do_cast()
4234 write_raw_complex_data(cd->c_data, value, ct->ct_size); in do_cast()
4236 return (PyObject *)cd; in do_cast()
4464 CDataObject *cd; in b_do_dlopen() local
4465 if (!PyArg_ParseTuple(args, "O|i:load_library", &cd, &flags)) in b_do_dlopen()
4468 if ((cd->c_type->ct_flags & CT_IS_VOID_PTR) == 0) { in b_do_dlopen()
4471 cd->c_type->ct_name); in b_do_dlopen()
4474 handle = cd->c_data; in b_do_dlopen()
6343 CDataObject_closure *cd; in b_callback() local
6378 cd = PyObject_GC_New(CDataObject_closure, &CDataOwningGC_Type); in b_callback()
6379 if (cd == NULL) in b_callback()
6382 cd->head.c_type = ct; in b_callback()
6383 cd->head.c_data = (char *)closure_exec; in b_callback()
6384 cd->head.c_weakreflist = NULL; in b_callback()
6386 cd->closure = closure; in b_callback()
6433 PyObject_GC_Track(cd); in b_callback()
6434 return (PyObject *)cd; in b_callback()
6438 if (cd == NULL) { in b_callback()
6448 Py_DECREF(cd); in b_callback()
6570 static Py_ssize_t direct_sizeof_cdata(CDataObject *cd) in direct_sizeof_cdata() argument
6573 if (cd->c_type->ct_flags & CT_ARRAY) in direct_sizeof_cdata()
6574 size = get_array_length(cd) * cd->c_type->ct_itemdescr->ct_size; in direct_sizeof_cdata()
6577 if (cd->c_type->ct_flags & (CT_STRUCT | CT_UNION)) in direct_sizeof_cdata()
6578 size = _cdata_var_byte_size(cd); in direct_sizeof_cdata()
6580 size = cd->c_type->ct_size; in direct_sizeof_cdata()
6702 CDataObject *cd; in b_rawaddressof() local
6708 &CData_Type, &cd, in b_rawaddressof()
6713 if ((cd->c_type->ct_flags & accepted_flags) == 0) { in b_rawaddressof()
6723 return new_simple_cdata(cd->c_data + offset, ct); in b_rawaddressof()
6751 CDataObject *cd; in b_string() local
6756 &CData_Type, &cd, &maxlen)) in b_string()
6759 if (cd->c_type->ct_itemdescr != NULL && in b_string()
6760 cd->c_type->ct_itemdescr->ct_flags & (CT_PRIMITIVE_CHAR | in b_string()
6763 !(cd->c_type->ct_itemdescr->ct_flags & CT_IS_BOOL)) { in b_string()
6765 if (cd->c_data == NULL) { in b_string()
6766 PyObject *s = cdata_repr(cd); in b_string()
6775 if (length < 0 && cd->c_type->ct_flags & CT_ARRAY) { in b_string()
6776 length = get_array_length(cd); in b_string()
6778 if (cd->c_type->ct_itemdescr->ct_size == sizeof(char)) { in b_string()
6779 const char *start = cd->c_data; in b_string()
6794 else if (cd->c_type->ct_itemdescr->ct_flags & CT_PRIMITIVE_CHAR) { in b_string()
6795 switch (cd->c_type->ct_itemdescr->ct_size) { in b_string()
6797 const cffi_char16_t *start = (cffi_char16_t *)cd->c_data; in b_string()
6815 const cffi_char32_t *start = (cffi_char32_t *)cd->c_data; in b_string()
6835 else if (cd->c_type->ct_flags & CT_IS_ENUM) { in b_string()
6836 return convert_cdata_to_enum_string(cd, 0); in b_string()
6838 else if (cd->c_type->ct_flags & CT_IS_BOOL) { in b_string()
6841 else if (cd->c_type->ct_flags & (CT_PRIMITIVE_CHAR | in b_string()
6844 /*READ(cd->c_data, cd->c_type->ct_size)*/ in b_string()
6845 if (cd->c_type->ct_size == sizeof(char)) in b_string()
6846 return PyBytes_FromStringAndSize(cd->c_data, 1); in b_string()
6847 else if (cd->c_type->ct_flags & CT_PRIMITIVE_CHAR) { in b_string()
6848 switch (cd->c_type->ct_size) { in b_string()
6850 return _my_PyUnicode_FromChar16((cffi_char16_t *)cd->c_data, 1); in b_string()
6852 return _my_PyUnicode_FromChar32((cffi_char32_t *)cd->c_data, 1); in b_string()
6857 cd->c_type->ct_name); in b_string()
6863 CDataObject *cd; in b_unpack() local
6872 &CData_Type, &cd, &length)) in b_unpack()
6875 if (!(cd->c_type->ct_flags & (CT_ARRAY|CT_POINTER))) { in b_unpack()
6878 cd->c_type->ct_name); in b_unpack()
6885 if (cd->c_data == NULL) { in b_unpack()
6886 PyObject *s = cdata_repr(cd); in b_unpack()
6897 ctitem = cd->c_type->ct_itemdescr; in b_unpack()
6901 return PyBytes_FromStringAndSize(cd->c_data, length); in b_unpack()
6903 return _my_PyUnicode_FromChar16((cffi_char16_t *)cd->c_data,length); in b_unpack()
6905 return _my_PyUnicode_FromChar32((cffi_char32_t *)cd->c_data,length); in b_unpack()
6919 src = cd->c_data; in b_unpack()
6924 cd->c_type->ct_name); in b_unpack()
7011 CDataObject *cd; in b_buffer_new() local
7016 &CData_Type, &cd, &size)) in b_buffer_new()
7020 size = _cdata_var_byte_size(cd); in b_buffer_new()
7022 if (cd->c_type->ct_flags & CT_POINTER) { in b_buffer_new()
7024 size = cd->c_type->ct_itemdescr->ct_size; in b_buffer_new()
7026 else if (cd->c_type->ct_flags & CT_ARRAY) { in b_buffer_new()
7028 size = get_array_length(cd) * cd->c_type->ct_itemdescr->ct_size; in b_buffer_new()
7033 cd->c_type->ct_name); in b_buffer_new()
7039 cd->c_type->ct_name); in b_buffer_new()
7042 /*WRITE(cd->c_data, size)*/ in b_buffer_new()
7043 return minibuffer_new(cd->c_data, size, (PyObject *)cd); in b_buffer_new()
7073 CDataObject_own_structptr *cd; in newp_handle() local
7074 cd = (CDataObject_own_structptr *)PyObject_GC_New(CDataObject_own_structptr, in newp_handle()
7076 if (cd == NULL) in newp_handle()
7079 cd->head.c_type = ct_voidp; in newp_handle()
7080 cd->head.c_data = (char *)cd; in newp_handle()
7081 cd->head.c_weakreflist = NULL; in newp_handle()
7083 cd->structobj = x; in newp_handle()
7084 PyObject_GC_Track(cd); in newp_handle()
7085 return (PyObject *)cd; in newp_handle()
7194 CDataObject *cd; in direct_from_buffer() local
7266 cd = (CDataObject *)PyObject_GC_New(CDataObject_frombuf, in direct_from_buffer()
7268 if (cd == NULL) in direct_from_buffer()
7272 cd->c_type = ct; in direct_from_buffer()
7273 cd->c_data = view->buf; in direct_from_buffer()
7274 cd->c_weakreflist = NULL; in direct_from_buffer()
7275 ((CDataObject_frombuf *)cd)->length = arraylength; in direct_from_buffer()
7276 ((CDataObject_frombuf *)cd)->bufferview = view; in direct_from_buffer()
7277 PyObject_GC_Track(cd); in direct_from_buffer()
7278 return (PyObject *)cd; in direct_from_buffer()
7361 CDataObject *cd; in b_gcp() local
7383 cd = allocate_gcp_object(origobj, origobj->c_type, destructor); in b_gcp()
7384 return (PyObject *)cd; in b_gcp()