1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309
use libc::{c_void, c_char, c_int}; use pyport::Py_ssize_t; use core::ptr; use object::*; #[inline] pub unsafe fn PyObject_DelAttrString(o: *mut PyObject, attr_name: *const c_char) -> c_int { PyObject_SetAttrString(o, attr_name, ptr::null_mut()) } #[inline] pub unsafe fn PyObject_DelAttr(o: *mut PyObject, attr_name: *mut PyObject) -> c_int { PyObject_SetAttr(o, attr_name, ptr::null_mut()) } #[cfg_attr(windows, link(name="pythonXY"))] extern "C" { pub fn PyObject_Cmp(o1: *mut PyObject, o2: *mut PyObject, result: *mut c_int) -> c_int; pub fn PyObject_Call(callable_object: *mut PyObject, args: *mut PyObject, kw: *mut PyObject) -> *mut PyObject; pub fn PyObject_CallObject(callable_object: *mut PyObject, args: *mut PyObject) -> *mut PyObject; pub fn PyObject_CallFunction(callable_object: *mut PyObject, format: *mut c_char, ...) -> *mut PyObject; pub fn PyObject_CallMethod(o: *mut PyObject, m: *mut c_char, format: *mut c_char, ...) -> *mut PyObject; fn _PyObject_CallFunction_SizeT(callable: *mut PyObject, format: *mut c_char, ...) -> *mut PyObject; fn _PyObject_CallMethod_SizeT(o: *mut PyObject, name: *mut c_char, format: *mut c_char, ...) -> *mut PyObject; pub fn PyObject_CallFunctionObjArgs(callable: *mut PyObject, ...) -> *mut PyObject; pub fn PyObject_CallMethodObjArgs(o: *mut PyObject, m: *mut PyObject, ...) -> *mut PyObject; pub fn PyObject_Type(o: *mut PyObject) -> *mut PyObject; pub fn PyObject_Size(o: *mut PyObject) -> Py_ssize_t; pub fn _PyObject_LengthHint(o: *mut PyObject, arg1: Py_ssize_t) -> Py_ssize_t; pub fn PyObject_GetItem(o: *mut PyObject, key: *mut PyObject) -> *mut PyObject; pub fn PyObject_SetItem(o: *mut PyObject, key: *mut PyObject, v: *mut PyObject) -> c_int; pub fn PyObject_DelItemString(o: *mut PyObject, key: *mut c_char) -> c_int; pub fn PyObject_DelItem(o: *mut PyObject, key: *mut PyObject) -> c_int; pub fn PyObject_AsCharBuffer(obj: *mut PyObject, buffer: *mut *const c_char, buffer_len: *mut Py_ssize_t) -> c_int; pub fn PyObject_CheckReadBuffer(obj: *mut PyObject) -> c_int; pub fn PyObject_AsReadBuffer(obj: *mut PyObject, buffer: *mut *const c_void, buffer_len: *mut Py_ssize_t) -> c_int; pub fn PyObject_AsWriteBuffer(obj: *mut PyObject, buffer: *mut *mut c_void, buffer_len: *mut Py_ssize_t) -> c_int; pub fn PyObject_GetBuffer(obj: *mut PyObject, view: *mut Py_buffer, flags: c_int) -> c_int; pub fn PyBuffer_GetPointer(view: *mut Py_buffer, indices: *mut Py_ssize_t) -> *mut c_void; pub fn PyBuffer_ToContiguous(buf: *mut c_void, view: *mut Py_buffer, len: Py_ssize_t, fort: c_char) -> c_int; pub fn PyBuffer_FromContiguous(view: *mut Py_buffer, buf: *mut c_void, len: Py_ssize_t, fort: c_char) -> c_int; pub fn PyObject_CopyData(dest: *mut PyObject, src: *mut PyObject) -> c_int; pub fn PyBuffer_IsContiguous(view: *mut Py_buffer, fort: c_char) -> c_int; pub fn PyBuffer_FillContiguousStrides(ndims: c_int, shape: *mut Py_ssize_t, strides: *mut Py_ssize_t, itemsize: c_int, fort: c_char); pub fn PyBuffer_FillInfo(view: *mut Py_buffer, o: *mut PyObject, buf: *mut c_void, len: Py_ssize_t, readonly: c_int, flags: c_int) -> c_int; pub fn PyBuffer_Release(view: *mut Py_buffer); pub fn PyObject_Format(obj: *mut PyObject, format_spec: *mut PyObject) -> *mut PyObject; pub fn PyObject_GetIter(arg1: *mut PyObject) -> *mut PyObject; pub fn PyIter_Next(arg1: *mut PyObject) -> *mut PyObject; fn _PyObject_NextNotImplemented(arg1: *mut PyObject) -> *mut PyObject; pub fn PyNumber_Check(o: *mut PyObject) -> c_int; pub fn PyNumber_Add(o1: *mut PyObject, o2: *mut PyObject) -> *mut PyObject; pub fn PyNumber_Subtract(o1: *mut PyObject, o2: *mut PyObject) -> *mut PyObject; pub fn PyNumber_Multiply(o1: *mut PyObject, o2: *mut PyObject) -> *mut PyObject; pub fn PyNumber_Divide(o1: *mut PyObject, o2: *mut PyObject) -> *mut PyObject; pub fn PyNumber_FloorDivide(o1: *mut PyObject, o2: *mut PyObject) -> *mut PyObject; pub fn PyNumber_TrueDivide(o1: *mut PyObject, o2: *mut PyObject) -> *mut PyObject; pub fn PyNumber_Remainder(o1: *mut PyObject, o2: *mut PyObject) -> *mut PyObject; pub fn PyNumber_Divmod(o1: *mut PyObject, o2: *mut PyObject) -> *mut PyObject; pub fn PyNumber_Power(o1: *mut PyObject, o2: *mut PyObject, o3: *mut PyObject) -> *mut PyObject; pub fn PyNumber_Negative(o: *mut PyObject) -> *mut PyObject; pub fn PyNumber_Positive(o: *mut PyObject) -> *mut PyObject; pub fn PyNumber_Absolute(o: *mut PyObject) -> *mut PyObject; pub fn PyNumber_Invert(o: *mut PyObject) -> *mut PyObject; pub fn PyNumber_Lshift(o1: *mut PyObject, o2: *mut PyObject) -> *mut PyObject; pub fn PyNumber_Rshift(o1: *mut PyObject, o2: *mut PyObject) -> *mut PyObject; pub fn PyNumber_And(o1: *mut PyObject, o2: *mut PyObject) -> *mut PyObject; pub fn PyNumber_Xor(o1: *mut PyObject, o2: *mut PyObject) -> *mut PyObject; pub fn PyNumber_Or(o1: *mut PyObject, o2: *mut PyObject) -> *mut PyObject; pub fn PyNumber_Index(o: *mut PyObject) -> *mut PyObject; pub fn PyNumber_AsSsize_t(o: *mut PyObject, exc: *mut PyObject) -> Py_ssize_t; fn _PyNumber_ConvertIntegralToInt(integral: *mut PyObject, error_format: *const c_char) -> *mut PyObject; pub fn PyNumber_Int(o: *mut PyObject) -> *mut PyObject; pub fn PyNumber_Long(o: *mut PyObject) -> *mut PyObject; pub fn PyNumber_Float(o: *mut PyObject) -> *mut PyObject; pub fn PyNumber_InPlaceAdd(o1: *mut PyObject, o2: *mut PyObject) -> *mut PyObject; pub fn PyNumber_InPlaceSubtract(o1: *mut PyObject, o2: *mut PyObject) -> *mut PyObject; pub fn PyNumber_InPlaceMultiply(o1: *mut PyObject, o2: *mut PyObject) -> *mut PyObject; pub fn PyNumber_InPlaceDivide(o1: *mut PyObject, o2: *mut PyObject) -> *mut PyObject; pub fn PyNumber_InPlaceFloorDivide(o1: *mut PyObject, o2: *mut PyObject) -> *mut PyObject; pub fn PyNumber_InPlaceTrueDivide(o1: *mut PyObject, o2: *mut PyObject) -> *mut PyObject; pub fn PyNumber_InPlaceRemainder(o1: *mut PyObject, o2: *mut PyObject) -> *mut PyObject; pub fn PyNumber_InPlacePower(o1: *mut PyObject, o2: *mut PyObject, o3: *mut PyObject) -> *mut PyObject; pub fn PyNumber_InPlaceLshift(o1: *mut PyObject, o2: *mut PyObject) -> *mut PyObject; pub fn PyNumber_InPlaceRshift(o1: *mut PyObject, o2: *mut PyObject) -> *mut PyObject; pub fn PyNumber_InPlaceAnd(o1: *mut PyObject, o2: *mut PyObject) -> *mut PyObject; pub fn PyNumber_InPlaceXor(o1: *mut PyObject, o2: *mut PyObject) -> *mut PyObject; pub fn PyNumber_InPlaceOr(o1: *mut PyObject, o2: *mut PyObject) -> *mut PyObject; pub fn PyNumber_ToBase(n: *mut PyObject, base: c_int) -> *mut PyObject; pub fn PySequence_Check(o: *mut PyObject) -> c_int; pub fn PySequence_Size(o: *mut PyObject) -> Py_ssize_t; pub fn PySequence_Length(o: *mut PyObject) -> Py_ssize_t; pub fn PySequence_Concat(o1: *mut PyObject, o2: *mut PyObject) -> *mut PyObject; pub fn PySequence_Repeat(o: *mut PyObject, count: Py_ssize_t) -> *mut PyObject; pub fn PySequence_GetItem(o: *mut PyObject, i: Py_ssize_t) -> *mut PyObject; pub fn PySequence_GetSlice(o: *mut PyObject, i1: Py_ssize_t, i2: Py_ssize_t) -> *mut PyObject; pub fn PySequence_SetItem(o: *mut PyObject, i: Py_ssize_t, v: *mut PyObject) -> c_int; pub fn PySequence_DelItem(o: *mut PyObject, i: Py_ssize_t) -> c_int; pub fn PySequence_SetSlice(o: *mut PyObject, i1: Py_ssize_t, i2: Py_ssize_t, v: *mut PyObject) -> c_int; pub fn PySequence_DelSlice(o: *mut PyObject, i1: Py_ssize_t, i2: Py_ssize_t) -> c_int; pub fn PySequence_Tuple(o: *mut PyObject) -> *mut PyObject; pub fn PySequence_List(o: *mut PyObject) -> *mut PyObject; pub fn PySequence_Fast(o: *mut PyObject, m: *const c_char) -> *mut PyObject; pub fn PySequence_Count(o: *mut PyObject, value: *mut PyObject) -> Py_ssize_t; pub fn PySequence_Contains(seq: *mut PyObject, ob: *mut PyObject) -> c_int; pub fn _PySequence_IterSearch(seq: *mut PyObject, obj: *mut PyObject, operation: c_int) -> Py_ssize_t; pub fn PySequence_In(o: *mut PyObject, value: *mut PyObject) -> c_int; pub fn PySequence_Index(o: *mut PyObject, value: *mut PyObject) -> Py_ssize_t; pub fn PySequence_InPlaceConcat(o1: *mut PyObject, o2: *mut PyObject) -> *mut PyObject; pub fn PySequence_InPlaceRepeat(o: *mut PyObject, count: Py_ssize_t) -> *mut PyObject; pub fn PyMapping_Check(o: *mut PyObject) -> c_int; pub fn PyMapping_Size(o: *mut PyObject) -> Py_ssize_t; pub fn PyMapping_Length(o: *mut PyObject) -> Py_ssize_t; pub fn PyMapping_HasKeyString(o: *mut PyObject, key: *mut c_char) -> c_int; pub fn PyMapping_HasKey(o: *mut PyObject, key: *mut PyObject) -> c_int; pub fn PyMapping_GetItemString(o: *mut PyObject, key: *mut c_char) -> *mut PyObject; pub fn PyMapping_SetItemString(o: *mut PyObject, key: *mut c_char, value: *mut PyObject) -> c_int; pub fn PyObject_IsInstance(object: *mut PyObject, typeorclass: *mut PyObject) -> c_int; pub fn PyObject_IsSubclass(object: *mut PyObject, typeorclass: *mut PyObject) -> c_int; } #[inline] pub unsafe fn PyObject_CheckBuffer(obj: *mut PyObject) -> c_int { let t = (*obj).ob_type; let b = (*t).tp_as_buffer; (!b.is_null() && (PyType_HasFeature(t, Py_TPFLAGS_HAVE_NEWBUFFER) != 0) && ((*b).bf_getbuffer.is_some())) as c_int } #[inline] pub unsafe fn PyIter_Check(obj: *mut PyObject) -> c_int { let t = (*obj).ob_type; (PyType_HasFeature(t, Py_TPFLAGS_HAVE_ITER) != 0 && match (*t).tp_iternext { None => false, Some(f) => f as *const c_void != _PyObject_NextNotImplemented as *const c_void, }) as c_int } #[inline] pub unsafe fn PyIndex_Check(obj: *mut PyObject) -> c_int { let t = (*obj).ob_type; let n = (*t).tp_as_number; (!n.is_null() && PyType_HasFeature(t, Py_TPFLAGS_HAVE_INDEX) != 0 && (*n).nb_index.is_some()) as c_int } #[inline] pub unsafe fn PySequence_Fast_GET_SIZE(o : *mut PyObject) -> Py_ssize_t { if ::listobject::PyList_Check(o) != 0 { ::listobject::PyList_GET_SIZE(o) } else { ::tupleobject::PyTuple_GET_SIZE(o) } } #[inline] pub unsafe fn PySequence_Fast_GET_ITEM(o : *mut PyObject, i : Py_ssize_t) -> *mut PyObject { if ::listobject::PyList_Check(o) != 0 { ::listobject::PyList_GET_ITEM(o, i) } else { ::tupleobject::PyTuple_GET_ITEM(o, i) } } #[inline] pub unsafe fn PySequence_Fast_ITEMS(o : *mut PyObject) -> *mut *mut PyObject { if ::listobject::PyList_Check(o) != 0 { (*(o as *mut ::listobject::PyListObject)).ob_item } else { (*(o as *mut ::tupleobject::PyTupleObject)).ob_item.as_mut_ptr() } } #[inline] pub unsafe fn PySequence_ITEM(o : *mut PyObject, i : Py_ssize_t) -> *mut PyObject { (*(*Py_TYPE(o)).tp_as_sequence).sq_item.unwrap()(o, i) } pub const PY_ITERSEARCH_COUNT : c_int = 1; pub const PY_ITERSEARCH_INDEX : c_int = 2; pub const PY_ITERSEARCH_CONTAINS : c_int = 3; #[inline] pub unsafe fn PyMapping_DelItemString(o : *mut PyObject, key : *mut c_char) -> c_int { PyObject_DelItemString(o, key) } #[inline] pub unsafe fn PyMapping_DelItem(o : *mut PyObject, key : *mut PyObject) -> c_int { PyObject_DelItem(o, key) } #[inline] pub unsafe fn PyMapping_Keys(o : *mut PyObject) -> *mut PyObject { PyObject_CallMethod(o, "keys\0".as_ptr() as *mut _, ptr::null_mut()) } #[inline] pub unsafe fn PyMapping_Values(o : *mut PyObject) -> *mut PyObject { PyObject_CallMethod(o, "values\0".as_ptr() as *mut _, ptr::null_mut()) } #[inline] pub unsafe fn PyMapping_Items(o : *mut PyObject) -> *mut PyObject { PyObject_CallMethod(o, "items\0".as_ptr() as *mut _, ptr::null_mut()) }