Initial import to Tizen
[profile/ivi/python-twisted.git] / twisted / python / _epoll.c
1 /* Generated by Cython 0.15.1 on Fri Feb 17 23:33:28 2012 */
2
3 #define PY_SSIZE_T_CLEAN
4 #include "Python.h"
5 #ifndef Py_PYTHON_H
6     #error Python headers needed to compile C extensions, please install development version of Python.
7 #else
8
9 #include <stddef.h> /* For offsetof */
10 #ifndef offsetof
11 #define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
12 #endif
13
14 #if !defined(WIN32) && !defined(MS_WINDOWS)
15   #ifndef __stdcall
16     #define __stdcall
17   #endif
18   #ifndef __cdecl
19     #define __cdecl
20   #endif
21   #ifndef __fastcall
22     #define __fastcall
23   #endif
24 #endif
25
26 #ifndef DL_IMPORT
27   #define DL_IMPORT(t) t
28 #endif
29 #ifndef DL_EXPORT
30   #define DL_EXPORT(t) t
31 #endif
32
33 #ifndef PY_LONG_LONG
34   #define PY_LONG_LONG LONG_LONG
35 #endif
36
37 #if PY_VERSION_HEX < 0x02040000
38   #define METH_COEXIST 0
39   #define PyDict_CheckExact(op) (Py_TYPE(op) == &PyDict_Type)
40   #define PyDict_Contains(d,o)   PySequence_Contains(d,o)
41 #endif
42
43 #if PY_VERSION_HEX < 0x02050000
44   typedef int Py_ssize_t;
45   #define PY_SSIZE_T_MAX INT_MAX
46   #define PY_SSIZE_T_MIN INT_MIN
47   #define PY_FORMAT_SIZE_T ""
48   #define PyInt_FromSsize_t(z) PyInt_FromLong(z)
49   #define PyInt_AsSsize_t(o)   __Pyx_PyInt_AsInt(o)
50   #define PyNumber_Index(o)    PyNumber_Int(o)
51   #define PyIndex_Check(o)     PyNumber_Check(o)
52   #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message)
53 #endif
54
55 #if PY_VERSION_HEX < 0x02060000
56   #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt)
57   #define Py_TYPE(ob)   (((PyObject*)(ob))->ob_type)
58   #define Py_SIZE(ob)   (((PyVarObject*)(ob))->ob_size)
59   #define PyVarObject_HEAD_INIT(type, size) \
60           PyObject_HEAD_INIT(type) size,
61   #define PyType_Modified(t)
62
63   typedef struct {
64      void *buf;
65      PyObject *obj;
66      Py_ssize_t len;
67      Py_ssize_t itemsize;
68      int readonly;
69      int ndim;
70      char *format;
71      Py_ssize_t *shape;
72      Py_ssize_t *strides;
73      Py_ssize_t *suboffsets;
74      void *internal;
75   } Py_buffer;
76
77   #define PyBUF_SIMPLE 0
78   #define PyBUF_WRITABLE 0x0001
79   #define PyBUF_FORMAT 0x0004
80   #define PyBUF_ND 0x0008
81   #define PyBUF_STRIDES (0x0010 | PyBUF_ND)
82   #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES)
83   #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES)
84   #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES)
85   #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES)
86
87 #endif
88
89 #if PY_MAJOR_VERSION < 3
90   #define __Pyx_BUILTIN_MODULE_NAME "__builtin__"
91 #else
92   #define __Pyx_BUILTIN_MODULE_NAME "builtins"
93 #endif
94
95 #if PY_MAJOR_VERSION >= 3
96   #define Py_TPFLAGS_CHECKTYPES 0
97   #define Py_TPFLAGS_HAVE_INDEX 0
98 #endif
99
100 #if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3)
101   #define Py_TPFLAGS_HAVE_NEWBUFFER 0
102 #endif
103
104 #if PY_MAJOR_VERSION >= 3
105   #define PyBaseString_Type            PyUnicode_Type
106   #define PyStringObject               PyUnicodeObject
107   #define PyString_Type                PyUnicode_Type
108   #define PyString_Check               PyUnicode_Check
109   #define PyString_CheckExact          PyUnicode_CheckExact
110 #endif
111
112 #if PY_VERSION_HEX < 0x02060000
113   #define PyBytesObject                PyStringObject
114   #define PyBytes_Type                 PyString_Type
115   #define PyBytes_Check                PyString_Check
116   #define PyBytes_CheckExact           PyString_CheckExact
117   #define PyBytes_FromString           PyString_FromString
118   #define PyBytes_FromStringAndSize    PyString_FromStringAndSize
119   #define PyBytes_FromFormat           PyString_FromFormat
120   #define PyBytes_DecodeEscape         PyString_DecodeEscape
121   #define PyBytes_AsString             PyString_AsString
122   #define PyBytes_AsStringAndSize      PyString_AsStringAndSize
123   #define PyBytes_Size                 PyString_Size
124   #define PyBytes_AS_STRING            PyString_AS_STRING
125   #define PyBytes_GET_SIZE             PyString_GET_SIZE
126   #define PyBytes_Repr                 PyString_Repr
127   #define PyBytes_Concat               PyString_Concat
128   #define PyBytes_ConcatAndDel         PyString_ConcatAndDel
129 #endif
130
131 #if PY_VERSION_HEX < 0x02060000
132   #define PySet_Check(obj)             PyObject_TypeCheck(obj, &PySet_Type)
133   #define PyFrozenSet_Check(obj)       PyObject_TypeCheck(obj, &PyFrozenSet_Type)
134 #endif
135 #ifndef PySet_CheckExact
136   #define PySet_CheckExact(obj)        (Py_TYPE(obj) == &PySet_Type)
137 #endif
138
139 #define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type)
140
141 #if PY_MAJOR_VERSION >= 3
142   #define PyIntObject                  PyLongObject
143   #define PyInt_Type                   PyLong_Type
144   #define PyInt_Check(op)              PyLong_Check(op)
145   #define PyInt_CheckExact(op)         PyLong_CheckExact(op)
146   #define PyInt_FromString             PyLong_FromString
147   #define PyInt_FromUnicode            PyLong_FromUnicode
148   #define PyInt_FromLong               PyLong_FromLong
149   #define PyInt_FromSize_t             PyLong_FromSize_t
150   #define PyInt_FromSsize_t            PyLong_FromSsize_t
151   #define PyInt_AsLong                 PyLong_AsLong
152   #define PyInt_AS_LONG                PyLong_AS_LONG
153   #define PyInt_AsSsize_t              PyLong_AsSsize_t
154   #define PyInt_AsUnsignedLongMask     PyLong_AsUnsignedLongMask
155   #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask
156 #endif
157
158 #if PY_MAJOR_VERSION >= 3
159   #define PyBoolObject                 PyLongObject
160 #endif
161
162 #if PY_VERSION_HEX < 0x03020000
163   typedef long Py_hash_t;
164   #define __Pyx_PyInt_FromHash_t PyInt_FromLong
165   #define __Pyx_PyInt_AsHash_t   PyInt_AsLong
166 #else
167   #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t
168   #define __Pyx_PyInt_AsHash_t   PyInt_AsSsize_t
169 #endif
170
171
172 #if PY_MAJOR_VERSION >= 3
173   #define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)
174   #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceTrueDivide(x,y)
175 #else
176   #define __Pyx_PyNumber_Divide(x,y)         PyNumber_Divide(x,y)
177   #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceDivide(x,y)
178 #endif
179
180 #if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300)
181   #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b)
182   #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value)
183   #define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b)
184 #else
185   #define __Pyx_PySequence_GetSlice(obj, a, b) (unlikely(!(obj)) ? \
186         (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), (PyObject*)0) : \
187         (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_GetSlice(obj, a, b)) : \
188             (PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", (obj)->ob_type->tp_name), (PyObject*)0)))
189   #define __Pyx_PySequence_SetSlice(obj, a, b, value) (unlikely(!(obj)) ? \
190         (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \
191         (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_SetSlice(obj, a, b, value)) : \
192             (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice assignment", (obj)->ob_type->tp_name), -1)))
193   #define __Pyx_PySequence_DelSlice(obj, a, b) (unlikely(!(obj)) ? \
194         (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \
195         (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \
196             (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1)))
197 #endif
198
199 #if PY_MAJOR_VERSION >= 3
200   #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func))
201 #endif
202
203 #if PY_VERSION_HEX < 0x02050000
204   #define __Pyx_GetAttrString(o,n)   PyObject_GetAttrString((o),((char *)(n)))
205   #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a))
206   #define __Pyx_DelAttrString(o,n)   PyObject_DelAttrString((o),((char *)(n)))
207 #else
208   #define __Pyx_GetAttrString(o,n)   PyObject_GetAttrString((o),(n))
209   #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a))
210   #define __Pyx_DelAttrString(o,n)   PyObject_DelAttrString((o),(n))
211 #endif
212
213 #if PY_VERSION_HEX < 0x02050000
214   #define __Pyx_NAMESTR(n) ((char *)(n))
215   #define __Pyx_DOCSTR(n)  ((char *)(n))
216 #else
217   #define __Pyx_NAMESTR(n) (n)
218   #define __Pyx_DOCSTR(n)  (n)
219 #endif
220
221 #ifndef __PYX_EXTERN_C
222   #ifdef __cplusplus
223     #define __PYX_EXTERN_C extern "C"
224   #else
225     #define __PYX_EXTERN_C extern
226   #endif
227 #endif
228
229 #if defined(WIN32) || defined(MS_WINDOWS)
230 #define _USE_MATH_DEFINES
231 #endif
232 #include <math.h>
233 #define __PYX_HAVE__twisted__python___epoll
234 #define __PYX_HAVE_API__twisted__python___epoll
235 #include "stdio.h"
236 #include "errno.h"
237 #include "string.h"
238 #include "stdint.h"
239 #include "sys/epoll.h"
240 #ifdef _OPENMP
241 #include <omp.h>
242 #endif /* _OPENMP */
243
244 #ifdef PYREX_WITHOUT_ASSERTIONS
245 #define CYTHON_WITHOUT_ASSERTIONS
246 #endif
247
248
249 /* inline attribute */
250 #ifndef CYTHON_INLINE
251   #if defined(__GNUC__)
252     #define CYTHON_INLINE __inline__
253   #elif defined(_MSC_VER)
254     #define CYTHON_INLINE __inline
255   #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
256     #define CYTHON_INLINE inline
257   #else
258     #define CYTHON_INLINE
259   #endif
260 #endif
261
262 /* unused attribute */
263 #ifndef CYTHON_UNUSED
264 # if defined(__GNUC__)
265 #   if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
266 #     define CYTHON_UNUSED __attribute__ ((__unused__))
267 #   else
268 #     define CYTHON_UNUSED
269 #   endif
270 # elif defined(__ICC) || defined(__INTEL_COMPILER)
271 #   define CYTHON_UNUSED __attribute__ ((__unused__))
272 # else
273 #   define CYTHON_UNUSED
274 # endif
275 #endif
276
277 typedef struct {PyObject **p; char *s; const long n; const char* encoding; const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/
278
279
280 /* Type Conversion Predeclarations */
281
282 #define __Pyx_PyBytes_FromUString(s) PyBytes_FromString((char*)s)
283 #define __Pyx_PyBytes_AsUString(s)   ((unsigned char*) PyBytes_AsString(s))
284
285 #define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None)
286 #define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False))
287 static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*);
288 static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x);
289
290 static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
291 static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
292 static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject*);
293
294 #define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
295
296
297 #ifdef __GNUC__
298   /* Test for GCC > 2.95 */
299   #if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))
300     #define likely(x)   __builtin_expect(!!(x), 1)
301     #define unlikely(x) __builtin_expect(!!(x), 0)
302   #else /* __GNUC__ > 2 ... */
303     #define likely(x)   (x)
304     #define unlikely(x) (x)
305   #endif /* __GNUC__ > 2 ... */
306 #else /* __GNUC__ */
307   #define likely(x)   (x)
308   #define unlikely(x) (x)
309 #endif /* __GNUC__ */
310     
311 static PyObject *__pyx_m;
312 static PyObject *__pyx_b;
313 static PyObject *__pyx_empty_tuple;
314 static PyObject *__pyx_empty_bytes;
315 static int __pyx_lineno;
316 static int __pyx_clineno = 0;
317 static const char * __pyx_cfilenm= __FILE__;
318 static const char *__pyx_filename;
319
320
321 static const char *__pyx_f[] = {
322   "_epoll.pyx",
323 };
324
325 /*--- Type declarations ---*/
326 struct __pyx_obj_7twisted_6python_6_epoll_epoll;
327
328 /* "twisted/python/_epoll.pyx":106
329  *         free(events)
330  * 
331  * cdef class epoll:             # <<<<<<<<<<<<<<
332  *     """
333  *     Represent a set of file descriptors being monitored for events.
334  */
335 struct __pyx_obj_7twisted_6python_6_epoll_epoll {
336   PyObject_HEAD
337   int fd;
338   int initialized;
339 };
340
341
342 #ifndef CYTHON_REFNANNY
343   #define CYTHON_REFNANNY 0
344 #endif
345
346 #if CYTHON_REFNANNY
347   typedef struct {
348     void (*INCREF)(void*, PyObject*, int);
349     void (*DECREF)(void*, PyObject*, int);
350     void (*GOTREF)(void*, PyObject*, int);
351     void (*GIVEREF)(void*, PyObject*, int);
352     void* (*SetupContext)(const char*, int, const char*);
353     void (*FinishContext)(void**);
354   } __Pyx_RefNannyAPIStruct;
355   static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL;
356   static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/
357   #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL;
358   #define __Pyx_RefNannySetupContext(name)           __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__)
359   #define __Pyx_RefNannyFinishContext()           __Pyx_RefNanny->FinishContext(&__pyx_refnanny)
360   #define __Pyx_INCREF(r)  __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
361   #define __Pyx_DECREF(r)  __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
362   #define __Pyx_GOTREF(r)  __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
363   #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
364   #define __Pyx_XINCREF(r)  do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0)
365   #define __Pyx_XDECREF(r)  do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0)
366   #define __Pyx_XGOTREF(r)  do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0)
367   #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0)
368 #else
369   #define __Pyx_RefNannyDeclarations
370   #define __Pyx_RefNannySetupContext(name)
371   #define __Pyx_RefNannyFinishContext()
372   #define __Pyx_INCREF(r) Py_INCREF(r)
373   #define __Pyx_DECREF(r) Py_DECREF(r)
374   #define __Pyx_GOTREF(r)
375   #define __Pyx_GIVEREF(r)
376   #define __Pyx_XINCREF(r) Py_XINCREF(r)
377   #define __Pyx_XDECREF(r) Py_XDECREF(r)
378   #define __Pyx_XGOTREF(r)
379   #define __Pyx_XGIVEREF(r)
380 #endif /* CYTHON_REFNANNY */
381
382 static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/
383
384 static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
385 static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/
386
387 static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); /*proto*/
388
389 static void __Pyx_RaiseDoubleKeywordsError(
390     const char* func_name, PyObject* kw_name); /*proto*/
391
392 static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],     PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,     const char* function_name); /*proto*/
393
394 static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact,
395     Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/
396
397 static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject *);
398
399 static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject *);
400
401 static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject *);
402
403 static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject *);
404
405 static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject *);
406
407 static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject *);
408
409 static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject *);
410
411 static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject *);
412
413 static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject *);
414
415 static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject *);
416
417 static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject *);
418
419 static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject *);
420
421 static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject *);
422
423 static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject *);
424
425 static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject *);
426
427 static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject *);
428
429 static int __Pyx_check_binary_version(void);
430
431 static void __Pyx_AddTraceback(const char *funcname, int __pyx_clineno,
432                                int __pyx_lineno, const char *__pyx_filename); /*proto*/
433
434 static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/
435
436 /* Module declarations from 'twisted.python._epoll' */
437 static PyTypeObject *__pyx_ptype_7twisted_6python_6_epoll_epoll = 0;
438 static PyObject *__pyx_f_7twisted_6python_6_epoll_call_epoll_wait(int, unsigned int, int); /*proto*/
439 #define __Pyx_MODULE_NAME "twisted.python._epoll"
440 int __pyx_module_is_main_twisted__python___epoll = 0;
441
442 /* Implementation of 'twisted.python._epoll' */
443 static PyObject *__pyx_builtin_IOError;
444 static char __pyx_k_1[] = "\nInterface to epoll I/O event notification facility.\n";
445 static char __pyx_k__ET[] = "ET";
446 static char __pyx_k__IN[] = "IN";
447 static char __pyx_k__fd[] = "fd";
448 static char __pyx_k__op[] = "op";
449 static char __pyx_k__ERR[] = "ERR";
450 static char __pyx_k__HUP[] = "HUP";
451 static char __pyx_k__MSG[] = "MSG";
452 static char __pyx_k__OUT[] = "OUT";
453 static char __pyx_k__PRI[] = "PRI";
454 static char __pyx_k__size[] = "size";
455 static char __pyx_k__RDBAND[] = "RDBAND";
456 static char __pyx_k__RDNORM[] = "RDNORM";
457 static char __pyx_k__WRBAND[] = "WRBAND";
458 static char __pyx_k__WRNORM[] = "WRNORM";
459 static char __pyx_k__events[] = "events";
460 static char __pyx_k__CTL_ADD[] = "CTL_ADD";
461 static char __pyx_k__CTL_DEL[] = "CTL_DEL";
462 static char __pyx_k__CTL_MOD[] = "CTL_MOD";
463 static char __pyx_k__EPOLLET[] = "EPOLLET";
464 static char __pyx_k__EPOLLIN[] = "EPOLLIN";
465 static char __pyx_k__IOError[] = "IOError";
466 static char __pyx_k__timeout[] = "timeout";
467 static char __pyx_k__EPOLLERR[] = "EPOLLERR";
468 static char __pyx_k__EPOLLHUP[] = "EPOLLHUP";
469 static char __pyx_k__EPOLLMSG[] = "EPOLLMSG";
470 static char __pyx_k__EPOLLOUT[] = "EPOLLOUT";
471 static char __pyx_k__EPOLLPRI[] = "EPOLLPRI";
472 static char __pyx_k____main__[] = "__main__";
473 static char __pyx_k____test__[] = "__test__";
474 static char __pyx_k__maxevents[] = "maxevents";
475 static char __pyx_k__EPOLLRDBAND[] = "EPOLLRDBAND";
476 static char __pyx_k__EPOLLRDNORM[] = "EPOLLRDNORM";
477 static char __pyx_k__EPOLLWRBAND[] = "EPOLLWRBAND";
478 static char __pyx_k__EPOLLWRNORM[] = "EPOLLWRNORM";
479 static PyObject *__pyx_n_s__CTL_ADD;
480 static PyObject *__pyx_n_s__CTL_DEL;
481 static PyObject *__pyx_n_s__CTL_MOD;
482 static PyObject *__pyx_n_s__EPOLLERR;
483 static PyObject *__pyx_n_s__EPOLLET;
484 static PyObject *__pyx_n_s__EPOLLHUP;
485 static PyObject *__pyx_n_s__EPOLLIN;
486 static PyObject *__pyx_n_s__EPOLLMSG;
487 static PyObject *__pyx_n_s__EPOLLOUT;
488 static PyObject *__pyx_n_s__EPOLLPRI;
489 static PyObject *__pyx_n_s__EPOLLRDBAND;
490 static PyObject *__pyx_n_s__EPOLLRDNORM;
491 static PyObject *__pyx_n_s__EPOLLWRBAND;
492 static PyObject *__pyx_n_s__EPOLLWRNORM;
493 static PyObject *__pyx_n_s__ERR;
494 static PyObject *__pyx_n_s__ET;
495 static PyObject *__pyx_n_s__HUP;
496 static PyObject *__pyx_n_s__IN;
497 static PyObject *__pyx_n_s__IOError;
498 static PyObject *__pyx_n_s__MSG;
499 static PyObject *__pyx_n_s__OUT;
500 static PyObject *__pyx_n_s__PRI;
501 static PyObject *__pyx_n_s__RDBAND;
502 static PyObject *__pyx_n_s__RDNORM;
503 static PyObject *__pyx_n_s__WRBAND;
504 static PyObject *__pyx_n_s__WRNORM;
505 static PyObject *__pyx_n_s____main__;
506 static PyObject *__pyx_n_s____test__;
507 static PyObject *__pyx_n_s__events;
508 static PyObject *__pyx_n_s__fd;
509 static PyObject *__pyx_n_s__maxevents;
510 static PyObject *__pyx_n_s__op;
511 static PyObject *__pyx_n_s__size;
512 static PyObject *__pyx_n_s__timeout;
513
514 /* "twisted/python/_epoll.pyx":68
515  *     cdef extern void PyEval_RestoreThread(PyThreadState*)
516  * 
517  * cdef call_epoll_wait(int fd, unsigned int maxevents, int timeout_msec):             # <<<<<<<<<<<<<<
518  *     """
519  *     Wait for an I/O event, wrap epoll_wait(2).
520  */
521
522 static PyObject *__pyx_f_7twisted_6python_6_epoll_call_epoll_wait(int __pyx_v_fd, unsigned int __pyx_v_maxevents, int __pyx_v_timeout_msec) {
523   struct epoll_event *__pyx_v_events;
524   int __pyx_v_result;
525   int __pyx_v_nbytes;
526   PyThreadState *__pyx_v__save;
527   PyObject *__pyx_v_results = NULL;
528   long __pyx_v_i;
529   PyObject *__pyx_r = NULL;
530   __Pyx_RefNannyDeclarations
531   int __pyx_t_1;
532   PyObject *__pyx_t_2 = NULL;
533   PyObject *__pyx_t_3 = NULL;
534   PyObject *__pyx_t_4 = NULL;
535   int __pyx_t_5;
536   int __pyx_t_6;
537   int __pyx_lineno = 0;
538   const char *__pyx_filename = NULL;
539   int __pyx_clineno = 0;
540   __Pyx_RefNannySetupContext("call_epoll_wait");
541
542   /* "twisted/python/_epoll.pyx":89
543  *     cdef PyThreadState *_save
544  * 
545  *     nbytes = sizeof(epoll_event) * maxevents             # <<<<<<<<<<<<<<
546  *     events = <epoll_event*>malloc(nbytes)
547  *     memset(events, 0, nbytes)
548  */
549   __pyx_v_nbytes = ((sizeof(struct epoll_event)) * __pyx_v_maxevents);
550
551   /* "twisted/python/_epoll.pyx":90
552  * 
553  *     nbytes = sizeof(epoll_event) * maxevents
554  *     events = <epoll_event*>malloc(nbytes)             # <<<<<<<<<<<<<<
555  *     memset(events, 0, nbytes)
556  *     try:
557  */
558   __pyx_v_events = ((struct epoll_event *)malloc(__pyx_v_nbytes));
559
560   /* "twisted/python/_epoll.pyx":91
561  *     nbytes = sizeof(epoll_event) * maxevents
562  *     events = <epoll_event*>malloc(nbytes)
563  *     memset(events, 0, nbytes)             # <<<<<<<<<<<<<<
564  *     try:
565  *         _save = PyEval_SaveThread()
566  */
567   memset(__pyx_v_events, 0, __pyx_v_nbytes);
568
569   /* "twisted/python/_epoll.pyx":92
570  *     events = <epoll_event*>malloc(nbytes)
571  *     memset(events, 0, nbytes)
572  *     try:             # <<<<<<<<<<<<<<
573  *         _save = PyEval_SaveThread()
574  *         result = epoll_wait(fd, events, maxevents, timeout_msec)
575  */
576   /*try:*/ {
577
578     /* "twisted/python/_epoll.pyx":93
579  *     memset(events, 0, nbytes)
580  *     try:
581  *         _save = PyEval_SaveThread()             # <<<<<<<<<<<<<<
582  *         result = epoll_wait(fd, events, maxevents, timeout_msec)
583  *         PyEval_RestoreThread(_save)
584  */
585     __pyx_v__save = PyEval_SaveThread();
586
587     /* "twisted/python/_epoll.pyx":94
588  *     try:
589  *         _save = PyEval_SaveThread()
590  *         result = epoll_wait(fd, events, maxevents, timeout_msec)             # <<<<<<<<<<<<<<
591  *         PyEval_RestoreThread(_save)
592  * 
593  */
594     __pyx_v_result = epoll_wait(__pyx_v_fd, __pyx_v_events, __pyx_v_maxevents, __pyx_v_timeout_msec);
595
596     /* "twisted/python/_epoll.pyx":95
597  *         _save = PyEval_SaveThread()
598  *         result = epoll_wait(fd, events, maxevents, timeout_msec)
599  *         PyEval_RestoreThread(_save)             # <<<<<<<<<<<<<<
600  * 
601  *         if result == -1:
602  */
603     PyEval_RestoreThread(__pyx_v__save);
604
605     /* "twisted/python/_epoll.pyx":97
606  *         PyEval_RestoreThread(_save)
607  * 
608  *         if result == -1:             # <<<<<<<<<<<<<<
609  *             raise IOError(errno, strerror(errno))
610  *         results = []
611  */
612     __pyx_t_1 = (__pyx_v_result == -1);
613     if (__pyx_t_1) {
614
615       /* "twisted/python/_epoll.pyx":98
616  * 
617  *         if result == -1:
618  *             raise IOError(errno, strerror(errno))             # <<<<<<<<<<<<<<
619  *         results = []
620  *         for i from 0 <= i < result:
621  */
622       __pyx_t_2 = PyInt_FromLong(errno); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L4;}
623       __Pyx_GOTREF(__pyx_t_2);
624       __pyx_t_3 = PyBytes_FromString(strerror(errno)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L4;}
625       __Pyx_GOTREF(((PyObject *)__pyx_t_3));
626       __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L4;}
627       __Pyx_GOTREF(((PyObject *)__pyx_t_4));
628       PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
629       __Pyx_GIVEREF(__pyx_t_2);
630       PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_t_3));
631       __Pyx_GIVEREF(((PyObject *)__pyx_t_3));
632       __pyx_t_2 = 0;
633       __pyx_t_3 = 0;
634       __pyx_t_3 = PyObject_Call(__pyx_builtin_IOError, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L4;}
635       __Pyx_GOTREF(__pyx_t_3);
636       __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
637       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
638       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
639       {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L4;}
640       goto __pyx_L6;
641     }
642     __pyx_L6:;
643
644     /* "twisted/python/_epoll.pyx":99
645  *         if result == -1:
646  *             raise IOError(errno, strerror(errno))
647  *         results = []             # <<<<<<<<<<<<<<
648  *         for i from 0 <= i < result:
649  *             results.append((events[i].data.fd, <int>events[i].events))
650  */
651     __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L4;}
652     __Pyx_GOTREF(((PyObject *)__pyx_t_3));
653     __pyx_v_results = __pyx_t_3;
654     __pyx_t_3 = 0;
655
656     /* "twisted/python/_epoll.pyx":100
657  *             raise IOError(errno, strerror(errno))
658  *         results = []
659  *         for i from 0 <= i < result:             # <<<<<<<<<<<<<<
660  *             results.append((events[i].data.fd, <int>events[i].events))
661  *         return results
662  */
663     __pyx_t_5 = __pyx_v_result;
664     for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_5; __pyx_v_i++) {
665
666       /* "twisted/python/_epoll.pyx":101
667  *         results = []
668  *         for i from 0 <= i < result:
669  *             results.append((events[i].data.fd, <int>events[i].events))             # <<<<<<<<<<<<<<
670  *         return results
671  *     finally:
672  */
673       if (unlikely(((PyObject *)__pyx_v_results) == Py_None)) {
674         PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L4;} 
675       }
676       __pyx_t_3 = PyInt_FromLong((__pyx_v_events[__pyx_v_i]).data.fd); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L4;}
677       __Pyx_GOTREF(__pyx_t_3);
678       __pyx_t_4 = PyInt_FromLong(((int)(__pyx_v_events[__pyx_v_i]).events)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L4;}
679       __Pyx_GOTREF(__pyx_t_4);
680       __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L4;}
681       __Pyx_GOTREF(((PyObject *)__pyx_t_2));
682       PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
683       __Pyx_GIVEREF(__pyx_t_3);
684       PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_4);
685       __Pyx_GIVEREF(__pyx_t_4);
686       __pyx_t_3 = 0;
687       __pyx_t_4 = 0;
688       __pyx_t_6 = PyList_Append(__pyx_v_results, ((PyObject *)__pyx_t_2)); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L4;}
689       __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
690     }
691
692     /* "twisted/python/_epoll.pyx":102
693  *         for i from 0 <= i < result:
694  *             results.append((events[i].data.fd, <int>events[i].events))
695  *         return results             # <<<<<<<<<<<<<<
696  *     finally:
697  *         free(events)
698  */
699     __Pyx_XDECREF(__pyx_r);
700     __Pyx_INCREF(((PyObject *)__pyx_v_results));
701     __pyx_r = ((PyObject *)__pyx_v_results);
702     goto __pyx_L3;
703   }
704
705   /* "twisted/python/_epoll.pyx":104
706  *         return results
707  *     finally:
708  *         free(events)             # <<<<<<<<<<<<<<
709  * 
710  * cdef class epoll:
711  */
712   /*finally:*/ {
713     int __pyx_why;
714     PyObject *__pyx_exc_type, *__pyx_exc_value, *__pyx_exc_tb;
715     int __pyx_exc_lineno;
716     __pyx_exc_type = 0; __pyx_exc_value = 0; __pyx_exc_tb = 0; __pyx_exc_lineno = 0;
717     __pyx_why = 0; goto __pyx_L5;
718     __pyx_L3: __pyx_exc_type = 0; __pyx_exc_value = 0; __pyx_exc_tb = 0; __pyx_exc_lineno = 0;
719     __pyx_why = 3; goto __pyx_L5;
720     __pyx_L4: {
721       __pyx_why = 4;
722       __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
723       __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
724       __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
725       __Pyx_ErrFetch(&__pyx_exc_type, &__pyx_exc_value, &__pyx_exc_tb);
726       __pyx_exc_lineno = __pyx_lineno;
727       goto __pyx_L5;
728     }
729     __pyx_L5:;
730     free(__pyx_v_events);
731     switch (__pyx_why) {
732       case 3: goto __pyx_L0;
733       case 4: {
734         __Pyx_ErrRestore(__pyx_exc_type, __pyx_exc_value, __pyx_exc_tb);
735         __pyx_lineno = __pyx_exc_lineno;
736         __pyx_exc_type = 0;
737         __pyx_exc_value = 0;
738         __pyx_exc_tb = 0;
739         goto __pyx_L1_error;
740       }
741     }
742   }
743
744   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
745   goto __pyx_L0;
746   __pyx_L1_error:;
747   __Pyx_XDECREF(__pyx_t_2);
748   __Pyx_XDECREF(__pyx_t_3);
749   __Pyx_XDECREF(__pyx_t_4);
750   __Pyx_AddTraceback("twisted.python._epoll.call_epoll_wait", __pyx_clineno, __pyx_lineno, __pyx_filename);
751   __pyx_r = 0;
752   __pyx_L0:;
753   __Pyx_XDECREF(__pyx_v_results);
754   __Pyx_XGIVEREF(__pyx_r);
755   __Pyx_RefNannyFinishContext();
756   return __pyx_r;
757 }
758
759 /* "twisted/python/_epoll.pyx":114
760  *     cdef int initialized
761  * 
762  *     def __init__(self, int size=1023):             # <<<<<<<<<<<<<<
763  *         """
764  *         The constructor arguments are compatible with select.poll.__init__.
765  */
766
767 static int __pyx_pf_7twisted_6python_6_epoll_5epoll___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
768 static char __pyx_doc_7twisted_6python_6_epoll_5epoll___init__[] = "\n        The constructor arguments are compatible with select.poll.__init__.\n        ";
769 struct wrapperbase __pyx_wrapperbase_7twisted_6python_6_epoll_5epoll___init__;
770 static int __pyx_pf_7twisted_6python_6_epoll_5epoll___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
771   int __pyx_v_size;
772   int __pyx_r;
773   __Pyx_RefNannyDeclarations
774   int __pyx_t_1;
775   PyObject *__pyx_t_2 = NULL;
776   PyObject *__pyx_t_3 = NULL;
777   PyObject *__pyx_t_4 = NULL;
778   int __pyx_lineno = 0;
779   const char *__pyx_filename = NULL;
780   int __pyx_clineno = 0;
781   static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__size,0};
782   __Pyx_RefNannySetupContext("__init__");
783   {
784     PyObject* values[1] = {0};
785     if (unlikely(__pyx_kwds)) {
786       Py_ssize_t kw_args;
787       switch (PyTuple_GET_SIZE(__pyx_args)) {
788         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
789         case  0: break;
790         default: goto __pyx_L5_argtuple_error;
791       }
792       kw_args = PyDict_Size(__pyx_kwds);
793       switch (PyTuple_GET_SIZE(__pyx_args)) {
794         case  0:
795         if (kw_args > 0) {
796           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__size);
797           if (value) { values[0] = value; kw_args--; }
798         }
799       }
800       if (unlikely(kw_args > 0)) {
801         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
802       }
803     } else {
804       switch (PyTuple_GET_SIZE(__pyx_args)) {
805         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
806         case  0: break;
807         default: goto __pyx_L5_argtuple_error;
808       }
809     }
810     if (values[0]) {
811       __pyx_v_size = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_size == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
812     } else {
813       __pyx_v_size = ((int)1023);
814     }
815   }
816   goto __pyx_L4_argument_unpacking_done;
817   __pyx_L5_argtuple_error:;
818   __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
819   __pyx_L3_error:;
820   __Pyx_AddTraceback("twisted.python._epoll.epoll.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
821   __Pyx_RefNannyFinishContext();
822   return -1;
823   __pyx_L4_argument_unpacking_done:;
824
825   /* "twisted/python/_epoll.pyx":118
826  *         The constructor arguments are compatible with select.poll.__init__.
827  *         """
828  *         self.fd = epoll_create(size)             # <<<<<<<<<<<<<<
829  *         if self.fd == -1:
830  *             raise IOError(errno, strerror(errno))
831  */
832   ((struct __pyx_obj_7twisted_6python_6_epoll_epoll *)__pyx_v_self)->fd = epoll_create(__pyx_v_size);
833
834   /* "twisted/python/_epoll.pyx":119
835  *         """
836  *         self.fd = epoll_create(size)
837  *         if self.fd == -1:             # <<<<<<<<<<<<<<
838  *             raise IOError(errno, strerror(errno))
839  *         self.initialized = 1
840  */
841   __pyx_t_1 = (((struct __pyx_obj_7twisted_6python_6_epoll_epoll *)__pyx_v_self)->fd == -1);
842   if (__pyx_t_1) {
843
844     /* "twisted/python/_epoll.pyx":120
845  *         self.fd = epoll_create(size)
846  *         if self.fd == -1:
847  *             raise IOError(errno, strerror(errno))             # <<<<<<<<<<<<<<
848  *         self.initialized = 1
849  * 
850  */
851     __pyx_t_2 = PyInt_FromLong(errno); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
852     __Pyx_GOTREF(__pyx_t_2);
853     __pyx_t_3 = PyBytes_FromString(strerror(errno)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
854     __Pyx_GOTREF(((PyObject *)__pyx_t_3));
855     __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
856     __Pyx_GOTREF(((PyObject *)__pyx_t_4));
857     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
858     __Pyx_GIVEREF(__pyx_t_2);
859     PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_t_3));
860     __Pyx_GIVEREF(((PyObject *)__pyx_t_3));
861     __pyx_t_2 = 0;
862     __pyx_t_3 = 0;
863     __pyx_t_3 = PyObject_Call(__pyx_builtin_IOError, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
864     __Pyx_GOTREF(__pyx_t_3);
865     __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
866     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
867     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
868     {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
869     goto __pyx_L6;
870   }
871   __pyx_L6:;
872
873   /* "twisted/python/_epoll.pyx":121
874  *         if self.fd == -1:
875  *             raise IOError(errno, strerror(errno))
876  *         self.initialized = 1             # <<<<<<<<<<<<<<
877  * 
878  *     def __dealloc__(self):
879  */
880   ((struct __pyx_obj_7twisted_6python_6_epoll_epoll *)__pyx_v_self)->initialized = 1;
881
882   __pyx_r = 0;
883   goto __pyx_L0;
884   __pyx_L1_error:;
885   __Pyx_XDECREF(__pyx_t_2);
886   __Pyx_XDECREF(__pyx_t_3);
887   __Pyx_XDECREF(__pyx_t_4);
888   __Pyx_AddTraceback("twisted.python._epoll.epoll.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
889   __pyx_r = -1;
890   __pyx_L0:;
891   __Pyx_RefNannyFinishContext();
892   return __pyx_r;
893 }
894
895 /* "twisted/python/_epoll.pyx":123
896  *         self.initialized = 1
897  * 
898  *     def __dealloc__(self):             # <<<<<<<<<<<<<<
899  *         if self.initialized:
900  *             close(self.fd)
901  */
902
903 static void __pyx_pf_7twisted_6python_6_epoll_5epoll_1__dealloc__(PyObject *__pyx_v_self); /*proto*/
904 static void __pyx_pf_7twisted_6python_6_epoll_5epoll_1__dealloc__(PyObject *__pyx_v_self) {
905   __Pyx_RefNannyDeclarations
906   __Pyx_RefNannySetupContext("__dealloc__");
907
908   /* "twisted/python/_epoll.pyx":124
909  * 
910  *     def __dealloc__(self):
911  *         if self.initialized:             # <<<<<<<<<<<<<<
912  *             close(self.fd)
913  *             self.initialized = 0
914  */
915   if (((struct __pyx_obj_7twisted_6python_6_epoll_epoll *)__pyx_v_self)->initialized) {
916
917     /* "twisted/python/_epoll.pyx":125
918  *     def __dealloc__(self):
919  *         if self.initialized:
920  *             close(self.fd)             # <<<<<<<<<<<<<<
921  *             self.initialized = 0
922  * 
923  */
924     close(((struct __pyx_obj_7twisted_6python_6_epoll_epoll *)__pyx_v_self)->fd);
925
926     /* "twisted/python/_epoll.pyx":126
927  *         if self.initialized:
928  *             close(self.fd)
929  *             self.initialized = 0             # <<<<<<<<<<<<<<
930  * 
931  *     def close(self):
932  */
933     ((struct __pyx_obj_7twisted_6python_6_epoll_epoll *)__pyx_v_self)->initialized = 0;
934     goto __pyx_L5;
935   }
936   __pyx_L5:;
937
938   __Pyx_RefNannyFinishContext();
939 }
940
941 /* "twisted/python/_epoll.pyx":128
942  *             self.initialized = 0
943  * 
944  *     def close(self):             # <<<<<<<<<<<<<<
945  *         """
946  *         Close the epoll file descriptor.
947  */
948
949 static PyObject *__pyx_pf_7twisted_6python_6_epoll_5epoll_2close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
950 static char __pyx_doc_7twisted_6python_6_epoll_5epoll_2close[] = "\n        Close the epoll file descriptor.\n        ";
951 static PyObject *__pyx_pf_7twisted_6python_6_epoll_5epoll_2close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
952   PyObject *__pyx_r = NULL;
953   __Pyx_RefNannyDeclarations
954   int __pyx_t_1;
955   PyObject *__pyx_t_2 = NULL;
956   PyObject *__pyx_t_3 = NULL;
957   PyObject *__pyx_t_4 = NULL;
958   int __pyx_lineno = 0;
959   const char *__pyx_filename = NULL;
960   int __pyx_clineno = 0;
961   __Pyx_RefNannySetupContext("close");
962
963   /* "twisted/python/_epoll.pyx":132
964  *         Close the epoll file descriptor.
965  *         """
966  *         if self.initialized:             # <<<<<<<<<<<<<<
967  *             if close(self.fd) == -1:
968  *                 raise IOError(errno, strerror(errno))
969  */
970   if (((struct __pyx_obj_7twisted_6python_6_epoll_epoll *)__pyx_v_self)->initialized) {
971
972     /* "twisted/python/_epoll.pyx":133
973  *         """
974  *         if self.initialized:
975  *             if close(self.fd) == -1:             # <<<<<<<<<<<<<<
976  *                 raise IOError(errno, strerror(errno))
977  *             self.initialized = 0
978  */
979     __pyx_t_1 = (close(((struct __pyx_obj_7twisted_6python_6_epoll_epoll *)__pyx_v_self)->fd) == -1);
980     if (__pyx_t_1) {
981
982       /* "twisted/python/_epoll.pyx":134
983  *         if self.initialized:
984  *             if close(self.fd) == -1:
985  *                 raise IOError(errno, strerror(errno))             # <<<<<<<<<<<<<<
986  *             self.initialized = 0
987  * 
988  */
989       __pyx_t_2 = PyInt_FromLong(errno); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
990       __Pyx_GOTREF(__pyx_t_2);
991       __pyx_t_3 = PyBytes_FromString(strerror(errno)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
992       __Pyx_GOTREF(((PyObject *)__pyx_t_3));
993       __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
994       __Pyx_GOTREF(((PyObject *)__pyx_t_4));
995       PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
996       __Pyx_GIVEREF(__pyx_t_2);
997       PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_t_3));
998       __Pyx_GIVEREF(((PyObject *)__pyx_t_3));
999       __pyx_t_2 = 0;
1000       __pyx_t_3 = 0;
1001       __pyx_t_3 = PyObject_Call(__pyx_builtin_IOError, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1002       __Pyx_GOTREF(__pyx_t_3);
1003       __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
1004       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
1005       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
1006       {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1007       goto __pyx_L6;
1008     }
1009     __pyx_L6:;
1010
1011     /* "twisted/python/_epoll.pyx":135
1012  *             if close(self.fd) == -1:
1013  *                 raise IOError(errno, strerror(errno))
1014  *             self.initialized = 0             # <<<<<<<<<<<<<<
1015  * 
1016  *     def fileno(self):
1017  */
1018     ((struct __pyx_obj_7twisted_6python_6_epoll_epoll *)__pyx_v_self)->initialized = 0;
1019     goto __pyx_L5;
1020   }
1021   __pyx_L5:;
1022
1023   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
1024   goto __pyx_L0;
1025   __pyx_L1_error:;
1026   __Pyx_XDECREF(__pyx_t_2);
1027   __Pyx_XDECREF(__pyx_t_3);
1028   __Pyx_XDECREF(__pyx_t_4);
1029   __Pyx_AddTraceback("twisted.python._epoll.epoll.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
1030   __pyx_r = NULL;
1031   __pyx_L0:;
1032   __Pyx_XGIVEREF(__pyx_r);
1033   __Pyx_RefNannyFinishContext();
1034   return __pyx_r;
1035 }
1036
1037 /* "twisted/python/_epoll.pyx":137
1038  *             self.initialized = 0
1039  * 
1040  *     def fileno(self):             # <<<<<<<<<<<<<<
1041  *         """
1042  *         Return the epoll file descriptor number.
1043  */
1044
1045 static PyObject *__pyx_pf_7twisted_6python_6_epoll_5epoll_3fileno(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
1046 static char __pyx_doc_7twisted_6python_6_epoll_5epoll_3fileno[] = "\n        Return the epoll file descriptor number.\n        ";
1047 static PyObject *__pyx_pf_7twisted_6python_6_epoll_5epoll_3fileno(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
1048   PyObject *__pyx_r = NULL;
1049   __Pyx_RefNannyDeclarations
1050   PyObject *__pyx_t_1 = NULL;
1051   int __pyx_lineno = 0;
1052   const char *__pyx_filename = NULL;
1053   int __pyx_clineno = 0;
1054   __Pyx_RefNannySetupContext("fileno");
1055
1056   /* "twisted/python/_epoll.pyx":141
1057  *         Return the epoll file descriptor number.
1058  *         """
1059  *         return self.fd             # <<<<<<<<<<<<<<
1060  * 
1061  *     def register(self, int fd, int events):
1062  */
1063   __Pyx_XDECREF(__pyx_r);
1064   __pyx_t_1 = PyInt_FromLong(((struct __pyx_obj_7twisted_6python_6_epoll_epoll *)__pyx_v_self)->fd); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1065   __Pyx_GOTREF(__pyx_t_1);
1066   __pyx_r = __pyx_t_1;
1067   __pyx_t_1 = 0;
1068   goto __pyx_L0;
1069
1070   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
1071   goto __pyx_L0;
1072   __pyx_L1_error:;
1073   __Pyx_XDECREF(__pyx_t_1);
1074   __Pyx_AddTraceback("twisted.python._epoll.epoll.fileno", __pyx_clineno, __pyx_lineno, __pyx_filename);
1075   __pyx_r = NULL;
1076   __pyx_L0:;
1077   __Pyx_XGIVEREF(__pyx_r);
1078   __Pyx_RefNannyFinishContext();
1079   return __pyx_r;
1080 }
1081
1082 /* "twisted/python/_epoll.pyx":143
1083  *         return self.fd
1084  * 
1085  *     def register(self, int fd, int events):             # <<<<<<<<<<<<<<
1086  *         """
1087  *         Add (register) a file descriptor to be monitored by self.
1088  */
1089
1090 static PyObject *__pyx_pf_7twisted_6python_6_epoll_5epoll_4register(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
1091 static char __pyx_doc_7twisted_6python_6_epoll_5epoll_4register[] = "\n        Add (register) a file descriptor to be monitored by self.\n\n        This method is compatible with select.epoll.register in Python 2.6.\n\n        Wrap epoll_ctl(2).\n\n        @type fd: C{int}\n        @param fd: File descriptor to modify\n\n        @type events: C{int}\n        @param events: A bit set of IN, OUT, PRI, ERR, HUP, and ET.\n\n        @raise IOError: Raised if the underlying epoll_ctl() call fails.\n        ";
1092 static PyObject *__pyx_pf_7twisted_6python_6_epoll_5epoll_4register(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
1093   int __pyx_v_fd;
1094   int __pyx_v_events;
1095   int __pyx_v_result;
1096   struct epoll_event __pyx_v_evt;
1097   PyObject *__pyx_r = NULL;
1098   __Pyx_RefNannyDeclarations
1099   PyObject *__pyx_t_1 = NULL;
1100   int __pyx_t_2;
1101   int __pyx_t_3;
1102   PyObject *__pyx_t_4 = NULL;
1103   PyObject *__pyx_t_5 = NULL;
1104   int __pyx_lineno = 0;
1105   const char *__pyx_filename = NULL;
1106   int __pyx_clineno = 0;
1107   static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__fd,&__pyx_n_s__events,0};
1108   __Pyx_RefNannySetupContext("register");
1109   {
1110     PyObject* values[2] = {0,0};
1111     if (unlikely(__pyx_kwds)) {
1112       Py_ssize_t kw_args;
1113       switch (PyTuple_GET_SIZE(__pyx_args)) {
1114         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
1115         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
1116         case  0: break;
1117         default: goto __pyx_L5_argtuple_error;
1118       }
1119       kw_args = PyDict_Size(__pyx_kwds);
1120       switch (PyTuple_GET_SIZE(__pyx_args)) {
1121         case  0:
1122         values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fd);
1123         if (likely(values[0])) kw_args--;
1124         else goto __pyx_L5_argtuple_error;
1125         case  1:
1126         values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__events);
1127         if (likely(values[1])) kw_args--;
1128         else {
1129           __Pyx_RaiseArgtupleInvalid("register", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
1130         }
1131       }
1132       if (unlikely(kw_args > 0)) {
1133         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "register") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
1134       }
1135     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
1136       goto __pyx_L5_argtuple_error;
1137     } else {
1138       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
1139       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
1140     }
1141     __pyx_v_fd = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_fd == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
1142     __pyx_v_events = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_events == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
1143   }
1144   goto __pyx_L4_argument_unpacking_done;
1145   __pyx_L5_argtuple_error:;
1146   __Pyx_RaiseArgtupleInvalid("register", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
1147   __pyx_L3_error:;
1148   __Pyx_AddTraceback("twisted.python._epoll.epoll.register", __pyx_clineno, __pyx_lineno, __pyx_filename);
1149   __Pyx_RefNannyFinishContext();
1150   return NULL;
1151   __pyx_L4_argument_unpacking_done:;
1152
1153   /* "twisted/python/_epoll.pyx":161
1154  *         cdef int result
1155  *         cdef epoll_event evt
1156  *         evt.events = events             # <<<<<<<<<<<<<<
1157  *         evt.data.fd = fd
1158  *         result = epoll_ctl(self.fd, CTL_ADD, fd, &evt)
1159  */
1160   __pyx_v_evt.events = __pyx_v_events;
1161
1162   /* "twisted/python/_epoll.pyx":162
1163  *         cdef epoll_event evt
1164  *         evt.events = events
1165  *         evt.data.fd = fd             # <<<<<<<<<<<<<<
1166  *         result = epoll_ctl(self.fd, CTL_ADD, fd, &evt)
1167  *         if result == -1:
1168  */
1169   __pyx_v_evt.data.fd = __pyx_v_fd;
1170
1171   /* "twisted/python/_epoll.pyx":163
1172  *         evt.events = events
1173  *         evt.data.fd = fd
1174  *         result = epoll_ctl(self.fd, CTL_ADD, fd, &evt)             # <<<<<<<<<<<<<<
1175  *         if result == -1:
1176  *             raise IOError(errno, strerror(errno))
1177  */
1178   __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__CTL_ADD); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1179   __Pyx_GOTREF(__pyx_t_1);
1180   __pyx_t_2 = __Pyx_PyInt_AsInt(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1181   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
1182   __pyx_v_result = epoll_ctl(((struct __pyx_obj_7twisted_6python_6_epoll_epoll *)__pyx_v_self)->fd, __pyx_t_2, __pyx_v_fd, (&__pyx_v_evt));
1183
1184   /* "twisted/python/_epoll.pyx":164
1185  *         evt.data.fd = fd
1186  *         result = epoll_ctl(self.fd, CTL_ADD, fd, &evt)
1187  *         if result == -1:             # <<<<<<<<<<<<<<
1188  *             raise IOError(errno, strerror(errno))
1189  * 
1190  */
1191   __pyx_t_3 = (__pyx_v_result == -1);
1192   if (__pyx_t_3) {
1193
1194     /* "twisted/python/_epoll.pyx":165
1195  *         result = epoll_ctl(self.fd, CTL_ADD, fd, &evt)
1196  *         if result == -1:
1197  *             raise IOError(errno, strerror(errno))             # <<<<<<<<<<<<<<
1198  * 
1199  *     def unregister(self, int fd):
1200  */
1201     __pyx_t_1 = PyInt_FromLong(errno); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1202     __Pyx_GOTREF(__pyx_t_1);
1203     __pyx_t_4 = PyBytes_FromString(strerror(errno)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1204     __Pyx_GOTREF(((PyObject *)__pyx_t_4));
1205     __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1206     __Pyx_GOTREF(((PyObject *)__pyx_t_5));
1207     PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
1208     __Pyx_GIVEREF(__pyx_t_1);
1209     PyTuple_SET_ITEM(__pyx_t_5, 1, ((PyObject *)__pyx_t_4));
1210     __Pyx_GIVEREF(((PyObject *)__pyx_t_4));
1211     __pyx_t_1 = 0;
1212     __pyx_t_4 = 0;
1213     __pyx_t_4 = PyObject_Call(__pyx_builtin_IOError, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1214     __Pyx_GOTREF(__pyx_t_4);
1215     __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
1216     __Pyx_Raise(__pyx_t_4, 0, 0, 0);
1217     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
1218     {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1219     goto __pyx_L6;
1220   }
1221   __pyx_L6:;
1222
1223   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
1224   goto __pyx_L0;
1225   __pyx_L1_error:;
1226   __Pyx_XDECREF(__pyx_t_1);
1227   __Pyx_XDECREF(__pyx_t_4);
1228   __Pyx_XDECREF(__pyx_t_5);
1229   __Pyx_AddTraceback("twisted.python._epoll.epoll.register", __pyx_clineno, __pyx_lineno, __pyx_filename);
1230   __pyx_r = NULL;
1231   __pyx_L0:;
1232   __Pyx_XGIVEREF(__pyx_r);
1233   __Pyx_RefNannyFinishContext();
1234   return __pyx_r;
1235 }
1236
1237 /* "twisted/python/_epoll.pyx":167
1238  *             raise IOError(errno, strerror(errno))
1239  * 
1240  *     def unregister(self, int fd):             # <<<<<<<<<<<<<<
1241  *         """
1242  *         Remove (unregister) a file descriptor monitored by self.
1243  */
1244
1245 static PyObject *__pyx_pf_7twisted_6python_6_epoll_5epoll_5unregister(PyObject *__pyx_v_self, PyObject *__pyx_arg_fd); /*proto*/
1246 static char __pyx_doc_7twisted_6python_6_epoll_5epoll_5unregister[] = "\n        Remove (unregister) a file descriptor monitored by self.\n\n        This method is compatible with select.epoll.unregister in Python 2.6.\n\n        Wrap epoll_ctl(2).\n\n        @type fd: C{int}\n        @param fd: File descriptor to modify\n\n        @raise IOError: Raised if the underlying epoll_ctl() call fails.\n        ";
1247 static PyObject *__pyx_pf_7twisted_6python_6_epoll_5epoll_5unregister(PyObject *__pyx_v_self, PyObject *__pyx_arg_fd) {
1248   int __pyx_v_fd;
1249   int __pyx_v_result;
1250   struct epoll_event __pyx_v_evt;
1251   PyObject *__pyx_r = NULL;
1252   __Pyx_RefNannyDeclarations
1253   PyObject *__pyx_t_1 = NULL;
1254   int __pyx_t_2;
1255   int __pyx_t_3;
1256   PyObject *__pyx_t_4 = NULL;
1257   PyObject *__pyx_t_5 = NULL;
1258   int __pyx_lineno = 0;
1259   const char *__pyx_filename = NULL;
1260   int __pyx_clineno = 0;
1261   __Pyx_RefNannySetupContext("unregister");
1262   assert(__pyx_arg_fd); {
1263     __pyx_v_fd = __Pyx_PyInt_AsInt(__pyx_arg_fd); if (unlikely((__pyx_v_fd == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
1264   }
1265   goto __pyx_L4_argument_unpacking_done;
1266   __pyx_L3_error:;
1267   __Pyx_AddTraceback("twisted.python._epoll.epoll.unregister", __pyx_clineno, __pyx_lineno, __pyx_filename);
1268   __Pyx_RefNannyFinishContext();
1269   return NULL;
1270   __pyx_L4_argument_unpacking_done:;
1271
1272   /* "twisted/python/_epoll.pyx":183
1273  *         cdef epoll_event evt
1274  *         # We don't have to fill evt.events for CTL_DEL.
1275  *         evt.data.fd = fd             # <<<<<<<<<<<<<<
1276  *         result = epoll_ctl(self.fd, CTL_DEL, fd, &evt)
1277  *         if result == -1:
1278  */
1279   __pyx_v_evt.data.fd = __pyx_v_fd;
1280
1281   /* "twisted/python/_epoll.pyx":184
1282  *         # We don't have to fill evt.events for CTL_DEL.
1283  *         evt.data.fd = fd
1284  *         result = epoll_ctl(self.fd, CTL_DEL, fd, &evt)             # <<<<<<<<<<<<<<
1285  *         if result == -1:
1286  *             raise IOError(errno, strerror(errno))
1287  */
1288   __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__CTL_DEL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1289   __Pyx_GOTREF(__pyx_t_1);
1290   __pyx_t_2 = __Pyx_PyInt_AsInt(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1291   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
1292   __pyx_v_result = epoll_ctl(((struct __pyx_obj_7twisted_6python_6_epoll_epoll *)__pyx_v_self)->fd, __pyx_t_2, __pyx_v_fd, (&__pyx_v_evt));
1293
1294   /* "twisted/python/_epoll.pyx":185
1295  *         evt.data.fd = fd
1296  *         result = epoll_ctl(self.fd, CTL_DEL, fd, &evt)
1297  *         if result == -1:             # <<<<<<<<<<<<<<
1298  *             raise IOError(errno, strerror(errno))
1299  * 
1300  */
1301   __pyx_t_3 = (__pyx_v_result == -1);
1302   if (__pyx_t_3) {
1303
1304     /* "twisted/python/_epoll.pyx":186
1305  *         result = epoll_ctl(self.fd, CTL_DEL, fd, &evt)
1306  *         if result == -1:
1307  *             raise IOError(errno, strerror(errno))             # <<<<<<<<<<<<<<
1308  * 
1309  *     def modify(self, int fd, int events):
1310  */
1311     __pyx_t_1 = PyInt_FromLong(errno); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1312     __Pyx_GOTREF(__pyx_t_1);
1313     __pyx_t_4 = PyBytes_FromString(strerror(errno)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1314     __Pyx_GOTREF(((PyObject *)__pyx_t_4));
1315     __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1316     __Pyx_GOTREF(((PyObject *)__pyx_t_5));
1317     PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
1318     __Pyx_GIVEREF(__pyx_t_1);
1319     PyTuple_SET_ITEM(__pyx_t_5, 1, ((PyObject *)__pyx_t_4));
1320     __Pyx_GIVEREF(((PyObject *)__pyx_t_4));
1321     __pyx_t_1 = 0;
1322     __pyx_t_4 = 0;
1323     __pyx_t_4 = PyObject_Call(__pyx_builtin_IOError, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1324     __Pyx_GOTREF(__pyx_t_4);
1325     __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
1326     __Pyx_Raise(__pyx_t_4, 0, 0, 0);
1327     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
1328     {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1329     goto __pyx_L5;
1330   }
1331   __pyx_L5:;
1332
1333   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
1334   goto __pyx_L0;
1335   __pyx_L1_error:;
1336   __Pyx_XDECREF(__pyx_t_1);
1337   __Pyx_XDECREF(__pyx_t_4);
1338   __Pyx_XDECREF(__pyx_t_5);
1339   __Pyx_AddTraceback("twisted.python._epoll.epoll.unregister", __pyx_clineno, __pyx_lineno, __pyx_filename);
1340   __pyx_r = NULL;
1341   __pyx_L0:;
1342   __Pyx_XGIVEREF(__pyx_r);
1343   __Pyx_RefNannyFinishContext();
1344   return __pyx_r;
1345 }
1346
1347 /* "twisted/python/_epoll.pyx":188
1348  *             raise IOError(errno, strerror(errno))
1349  * 
1350  *     def modify(self, int fd, int events):             # <<<<<<<<<<<<<<
1351  *         """
1352  *         Modify the modified state of a file descriptor monitored by self.
1353  */
1354
1355 static PyObject *__pyx_pf_7twisted_6python_6_epoll_5epoll_6modify(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
1356 static char __pyx_doc_7twisted_6python_6_epoll_5epoll_6modify[] = "\n        Modify the modified state of a file descriptor monitored by self.\n\n        This method is compatible with select.epoll.modify in Python 2.6.\n\n        Wrap epoll_ctl(2).\n\n        @type fd: C{int}\n        @param fd: File descriptor to modify\n\n        @type events: C{int}\n        @param events: A bit set of IN, OUT, PRI, ERR, HUP, and ET.\n\n        @raise IOError: Raised if the underlying epoll_ctl() call fails.\n        ";
1357 static PyObject *__pyx_pf_7twisted_6python_6_epoll_5epoll_6modify(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
1358   int __pyx_v_fd;
1359   int __pyx_v_events;
1360   int __pyx_v_result;
1361   struct epoll_event __pyx_v_evt;
1362   PyObject *__pyx_r = NULL;
1363   __Pyx_RefNannyDeclarations
1364   PyObject *__pyx_t_1 = NULL;
1365   int __pyx_t_2;
1366   int __pyx_t_3;
1367   PyObject *__pyx_t_4 = NULL;
1368   PyObject *__pyx_t_5 = NULL;
1369   int __pyx_lineno = 0;
1370   const char *__pyx_filename = NULL;
1371   int __pyx_clineno = 0;
1372   static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__fd,&__pyx_n_s__events,0};
1373   __Pyx_RefNannySetupContext("modify");
1374   {
1375     PyObject* values[2] = {0,0};
1376     if (unlikely(__pyx_kwds)) {
1377       Py_ssize_t kw_args;
1378       switch (PyTuple_GET_SIZE(__pyx_args)) {
1379         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
1380         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
1381         case  0: break;
1382         default: goto __pyx_L5_argtuple_error;
1383       }
1384       kw_args = PyDict_Size(__pyx_kwds);
1385       switch (PyTuple_GET_SIZE(__pyx_args)) {
1386         case  0:
1387         values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fd);
1388         if (likely(values[0])) kw_args--;
1389         else goto __pyx_L5_argtuple_error;
1390         case  1:
1391         values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__events);
1392         if (likely(values[1])) kw_args--;
1393         else {
1394           __Pyx_RaiseArgtupleInvalid("modify", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
1395         }
1396       }
1397       if (unlikely(kw_args > 0)) {
1398         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "modify") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
1399       }
1400     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
1401       goto __pyx_L5_argtuple_error;
1402     } else {
1403       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
1404       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
1405     }
1406     __pyx_v_fd = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_fd == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
1407     __pyx_v_events = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_events == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
1408   }
1409   goto __pyx_L4_argument_unpacking_done;
1410   __pyx_L5_argtuple_error:;
1411   __Pyx_RaiseArgtupleInvalid("modify", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
1412   __pyx_L3_error:;
1413   __Pyx_AddTraceback("twisted.python._epoll.epoll.modify", __pyx_clineno, __pyx_lineno, __pyx_filename);
1414   __Pyx_RefNannyFinishContext();
1415   return NULL;
1416   __pyx_L4_argument_unpacking_done:;
1417
1418   /* "twisted/python/_epoll.pyx":206
1419  *         cdef int result
1420  *         cdef epoll_event evt
1421  *         evt.events = events             # <<<<<<<<<<<<<<
1422  *         evt.data.fd = fd
1423  *         result = epoll_ctl(self.fd, CTL_MOD, fd, &evt)
1424  */
1425   __pyx_v_evt.events = __pyx_v_events;
1426
1427   /* "twisted/python/_epoll.pyx":207
1428  *         cdef epoll_event evt
1429  *         evt.events = events
1430  *         evt.data.fd = fd             # <<<<<<<<<<<<<<
1431  *         result = epoll_ctl(self.fd, CTL_MOD, fd, &evt)
1432  *         if result == -1:
1433  */
1434   __pyx_v_evt.data.fd = __pyx_v_fd;
1435
1436   /* "twisted/python/_epoll.pyx":208
1437  *         evt.events = events
1438  *         evt.data.fd = fd
1439  *         result = epoll_ctl(self.fd, CTL_MOD, fd, &evt)             # <<<<<<<<<<<<<<
1440  *         if result == -1:
1441  *             raise IOError(errno, strerror(errno))
1442  */
1443   __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__CTL_MOD); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1444   __Pyx_GOTREF(__pyx_t_1);
1445   __pyx_t_2 = __Pyx_PyInt_AsInt(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1446   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
1447   __pyx_v_result = epoll_ctl(((struct __pyx_obj_7twisted_6python_6_epoll_epoll *)__pyx_v_self)->fd, __pyx_t_2, __pyx_v_fd, (&__pyx_v_evt));
1448
1449   /* "twisted/python/_epoll.pyx":209
1450  *         evt.data.fd = fd
1451  *         result = epoll_ctl(self.fd, CTL_MOD, fd, &evt)
1452  *         if result == -1:             # <<<<<<<<<<<<<<
1453  *             raise IOError(errno, strerror(errno))
1454  * 
1455  */
1456   __pyx_t_3 = (__pyx_v_result == -1);
1457   if (__pyx_t_3) {
1458
1459     /* "twisted/python/_epoll.pyx":210
1460  *         result = epoll_ctl(self.fd, CTL_MOD, fd, &evt)
1461  *         if result == -1:
1462  *             raise IOError(errno, strerror(errno))             # <<<<<<<<<<<<<<
1463  * 
1464  *     def _control(self, int op, int fd, int events):
1465  */
1466     __pyx_t_1 = PyInt_FromLong(errno); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1467     __Pyx_GOTREF(__pyx_t_1);
1468     __pyx_t_4 = PyBytes_FromString(strerror(errno)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1469     __Pyx_GOTREF(((PyObject *)__pyx_t_4));
1470     __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1471     __Pyx_GOTREF(((PyObject *)__pyx_t_5));
1472     PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
1473     __Pyx_GIVEREF(__pyx_t_1);
1474     PyTuple_SET_ITEM(__pyx_t_5, 1, ((PyObject *)__pyx_t_4));
1475     __Pyx_GIVEREF(((PyObject *)__pyx_t_4));
1476     __pyx_t_1 = 0;
1477     __pyx_t_4 = 0;
1478     __pyx_t_4 = PyObject_Call(__pyx_builtin_IOError, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1479     __Pyx_GOTREF(__pyx_t_4);
1480     __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
1481     __Pyx_Raise(__pyx_t_4, 0, 0, 0);
1482     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
1483     {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1484     goto __pyx_L6;
1485   }
1486   __pyx_L6:;
1487
1488   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
1489   goto __pyx_L0;
1490   __pyx_L1_error:;
1491   __Pyx_XDECREF(__pyx_t_1);
1492   __Pyx_XDECREF(__pyx_t_4);
1493   __Pyx_XDECREF(__pyx_t_5);
1494   __Pyx_AddTraceback("twisted.python._epoll.epoll.modify", __pyx_clineno, __pyx_lineno, __pyx_filename);
1495   __pyx_r = NULL;
1496   __pyx_L0:;
1497   __Pyx_XGIVEREF(__pyx_r);
1498   __Pyx_RefNannyFinishContext();
1499   return __pyx_r;
1500 }
1501
1502 /* "twisted/python/_epoll.pyx":212
1503  *             raise IOError(errno, strerror(errno))
1504  * 
1505  *     def _control(self, int op, int fd, int events):             # <<<<<<<<<<<<<<
1506  *         """
1507  *         Modify the monitored state of a particular file descriptor.
1508  */
1509
1510 static PyObject *__pyx_pf_7twisted_6python_6_epoll_5epoll_7_control(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
1511 static char __pyx_doc_7twisted_6python_6_epoll_5epoll_7_control[] = "\n        Modify the monitored state of a particular file descriptor.\n        \n        Wrap epoll_ctl(2).\n\n        @type op: C{int}\n        @param op: One of CTL_ADD, CTL_DEL, or CTL_MOD\n\n        @type fd: C{int}\n        @param fd: File descriptor to modify\n\n        @type events: C{int}\n        @param events: A bit set of IN, OUT, PRI, ERR, HUP, and ET.\n\n        @raise IOError: Raised if the underlying epoll_ctl() call fails.\n        ";
1512 static PyObject *__pyx_pf_7twisted_6python_6_epoll_5epoll_7_control(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
1513   int __pyx_v_op;
1514   int __pyx_v_fd;
1515   int __pyx_v_events;
1516   int __pyx_v_result;
1517   struct epoll_event __pyx_v_evt;
1518   PyObject *__pyx_r = NULL;
1519   __Pyx_RefNannyDeclarations
1520   int __pyx_t_1;
1521   PyObject *__pyx_t_2 = NULL;
1522   PyObject *__pyx_t_3 = NULL;
1523   PyObject *__pyx_t_4 = NULL;
1524   int __pyx_lineno = 0;
1525   const char *__pyx_filename = NULL;
1526   int __pyx_clineno = 0;
1527   static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__op,&__pyx_n_s__fd,&__pyx_n_s__events,0};
1528   __Pyx_RefNannySetupContext("_control");
1529   {
1530     PyObject* values[3] = {0,0,0};
1531     if (unlikely(__pyx_kwds)) {
1532       Py_ssize_t kw_args;
1533       switch (PyTuple_GET_SIZE(__pyx_args)) {
1534         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
1535         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
1536         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
1537         case  0: break;
1538         default: goto __pyx_L5_argtuple_error;
1539       }
1540       kw_args = PyDict_Size(__pyx_kwds);
1541       switch (PyTuple_GET_SIZE(__pyx_args)) {
1542         case  0:
1543         values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__op);
1544         if (likely(values[0])) kw_args--;
1545         else goto __pyx_L5_argtuple_error;
1546         case  1:
1547         values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fd);
1548         if (likely(values[1])) kw_args--;
1549         else {
1550           __Pyx_RaiseArgtupleInvalid("_control", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
1551         }
1552         case  2:
1553         values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__events);
1554         if (likely(values[2])) kw_args--;
1555         else {
1556           __Pyx_RaiseArgtupleInvalid("_control", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
1557         }
1558       }
1559       if (unlikely(kw_args > 0)) {
1560         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_control") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
1561       }
1562     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
1563       goto __pyx_L5_argtuple_error;
1564     } else {
1565       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
1566       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
1567       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
1568     }
1569     __pyx_v_op = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_op == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
1570     __pyx_v_fd = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_fd == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
1571     __pyx_v_events = __Pyx_PyInt_AsInt(values[2]); if (unlikely((__pyx_v_events == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
1572   }
1573   goto __pyx_L4_argument_unpacking_done;
1574   __pyx_L5_argtuple_error:;
1575   __Pyx_RaiseArgtupleInvalid("_control", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
1576   __pyx_L3_error:;
1577   __Pyx_AddTraceback("twisted.python._epoll.epoll._control", __pyx_clineno, __pyx_lineno, __pyx_filename);
1578   __Pyx_RefNannyFinishContext();
1579   return NULL;
1580   __pyx_L4_argument_unpacking_done:;
1581
1582   /* "twisted/python/_epoll.pyx":231
1583  *         cdef int result
1584  *         cdef epoll_event evt
1585  *         evt.events = events             # <<<<<<<<<<<<<<
1586  *         evt.data.fd = fd
1587  *         result = epoll_ctl(self.fd, op, fd, &evt)
1588  */
1589   __pyx_v_evt.events = __pyx_v_events;
1590
1591   /* "twisted/python/_epoll.pyx":232
1592  *         cdef epoll_event evt
1593  *         evt.events = events
1594  *         evt.data.fd = fd             # <<<<<<<<<<<<<<
1595  *         result = epoll_ctl(self.fd, op, fd, &evt)
1596  *         if result == -1:
1597  */
1598   __pyx_v_evt.data.fd = __pyx_v_fd;
1599
1600   /* "twisted/python/_epoll.pyx":233
1601  *         evt.events = events
1602  *         evt.data.fd = fd
1603  *         result = epoll_ctl(self.fd, op, fd, &evt)             # <<<<<<<<<<<<<<
1604  *         if result == -1:
1605  *             raise IOError(errno, strerror(errno))
1606  */
1607   __pyx_v_result = epoll_ctl(((struct __pyx_obj_7twisted_6python_6_epoll_epoll *)__pyx_v_self)->fd, __pyx_v_op, __pyx_v_fd, (&__pyx_v_evt));
1608
1609   /* "twisted/python/_epoll.pyx":234
1610  *         evt.data.fd = fd
1611  *         result = epoll_ctl(self.fd, op, fd, &evt)
1612  *         if result == -1:             # <<<<<<<<<<<<<<
1613  *             raise IOError(errno, strerror(errno))
1614  * 
1615  */
1616   __pyx_t_1 = (__pyx_v_result == -1);
1617   if (__pyx_t_1) {
1618
1619     /* "twisted/python/_epoll.pyx":235
1620  *         result = epoll_ctl(self.fd, op, fd, &evt)
1621  *         if result == -1:
1622  *             raise IOError(errno, strerror(errno))             # <<<<<<<<<<<<<<
1623  * 
1624  *     def wait(self, unsigned int maxevents, int timeout):
1625  */
1626     __pyx_t_2 = PyInt_FromLong(errno); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1627     __Pyx_GOTREF(__pyx_t_2);
1628     __pyx_t_3 = PyBytes_FromString(strerror(errno)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1629     __Pyx_GOTREF(((PyObject *)__pyx_t_3));
1630     __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1631     __Pyx_GOTREF(((PyObject *)__pyx_t_4));
1632     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
1633     __Pyx_GIVEREF(__pyx_t_2);
1634     PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_t_3));
1635     __Pyx_GIVEREF(((PyObject *)__pyx_t_3));
1636     __pyx_t_2 = 0;
1637     __pyx_t_3 = 0;
1638     __pyx_t_3 = PyObject_Call(__pyx_builtin_IOError, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1639     __Pyx_GOTREF(__pyx_t_3);
1640     __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
1641     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
1642     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
1643     {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1644     goto __pyx_L6;
1645   }
1646   __pyx_L6:;
1647
1648   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
1649   goto __pyx_L0;
1650   __pyx_L1_error:;
1651   __Pyx_XDECREF(__pyx_t_2);
1652   __Pyx_XDECREF(__pyx_t_3);
1653   __Pyx_XDECREF(__pyx_t_4);
1654   __Pyx_AddTraceback("twisted.python._epoll.epoll._control", __pyx_clineno, __pyx_lineno, __pyx_filename);
1655   __pyx_r = NULL;
1656   __pyx_L0:;
1657   __Pyx_XGIVEREF(__pyx_r);
1658   __Pyx_RefNannyFinishContext();
1659   return __pyx_r;
1660 }
1661
1662 /* "twisted/python/_epoll.pyx":237
1663  *             raise IOError(errno, strerror(errno))
1664  * 
1665  *     def wait(self, unsigned int maxevents, int timeout):             # <<<<<<<<<<<<<<
1666  *         """
1667  *         Wait for an I/O event, wrap epoll_wait(2).
1668  */
1669
1670 static PyObject *__pyx_pf_7twisted_6python_6_epoll_5epoll_8wait(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
1671 static char __pyx_doc_7twisted_6python_6_epoll_5epoll_8wait[] = "\n        Wait for an I/O event, wrap epoll_wait(2).\n\n        @type maxevents: C{int}\n        @param maxevents: Maximum number of events returned.\n\n        @type timeout: C{int}\n        @param timeout: Maximum time in milliseconds waiting for events. 0\n            makes it return immediately whereas -1 makes it wait indefinitely.\n        \n        @raise IOError: Raised if the underlying epoll_wait() call fails.\n        ";
1672 static PyObject *__pyx_pf_7twisted_6python_6_epoll_5epoll_8wait(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
1673   unsigned int __pyx_v_maxevents;
1674   int __pyx_v_timeout;
1675   PyObject *__pyx_r = NULL;
1676   __Pyx_RefNannyDeclarations
1677   PyObject *__pyx_t_1 = NULL;
1678   int __pyx_lineno = 0;
1679   const char *__pyx_filename = NULL;
1680   int __pyx_clineno = 0;
1681   static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__maxevents,&__pyx_n_s__timeout,0};
1682   __Pyx_RefNannySetupContext("wait");
1683   {
1684     PyObject* values[2] = {0,0};
1685     if (unlikely(__pyx_kwds)) {
1686       Py_ssize_t kw_args;
1687       switch (PyTuple_GET_SIZE(__pyx_args)) {
1688         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
1689         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
1690         case  0: break;
1691         default: goto __pyx_L5_argtuple_error;
1692       }
1693       kw_args = PyDict_Size(__pyx_kwds);
1694       switch (PyTuple_GET_SIZE(__pyx_args)) {
1695         case  0:
1696         values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__maxevents);
1697         if (likely(values[0])) kw_args--;
1698         else goto __pyx_L5_argtuple_error;
1699         case  1:
1700         values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__timeout);
1701         if (likely(values[1])) kw_args--;
1702         else {
1703           __Pyx_RaiseArgtupleInvalid("wait", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
1704         }
1705       }
1706       if (unlikely(kw_args > 0)) {
1707         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "wait") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
1708       }
1709     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
1710       goto __pyx_L5_argtuple_error;
1711     } else {
1712       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
1713       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
1714     }
1715     __pyx_v_maxevents = __Pyx_PyInt_AsUnsignedInt(values[0]); if (unlikely((__pyx_v_maxevents == (unsigned int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
1716     __pyx_v_timeout = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_timeout == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
1717   }
1718   goto __pyx_L4_argument_unpacking_done;
1719   __pyx_L5_argtuple_error:;
1720   __Pyx_RaiseArgtupleInvalid("wait", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
1721   __pyx_L3_error:;
1722   __Pyx_AddTraceback("twisted.python._epoll.epoll.wait", __pyx_clineno, __pyx_lineno, __pyx_filename);
1723   __Pyx_RefNannyFinishContext();
1724   return NULL;
1725   __pyx_L4_argument_unpacking_done:;
1726
1727   /* "twisted/python/_epoll.pyx":250
1728  *         @raise IOError: Raised if the underlying epoll_wait() call fails.
1729  *         """
1730  *         return call_epoll_wait(self.fd, maxevents, timeout)             # <<<<<<<<<<<<<<
1731  * 
1732  *     def poll(self, float timeout=-1, unsigned int maxevents=1024):
1733  */
1734   __Pyx_XDECREF(__pyx_r);
1735   __pyx_t_1 = __pyx_f_7twisted_6python_6_epoll_call_epoll_wait(((struct __pyx_obj_7twisted_6python_6_epoll_epoll *)__pyx_v_self)->fd, __pyx_v_maxevents, __pyx_v_timeout); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1736   __Pyx_GOTREF(__pyx_t_1);
1737   __pyx_r = __pyx_t_1;
1738   __pyx_t_1 = 0;
1739   goto __pyx_L0;
1740
1741   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
1742   goto __pyx_L0;
1743   __pyx_L1_error:;
1744   __Pyx_XDECREF(__pyx_t_1);
1745   __Pyx_AddTraceback("twisted.python._epoll.epoll.wait", __pyx_clineno, __pyx_lineno, __pyx_filename);
1746   __pyx_r = NULL;
1747   __pyx_L0:;
1748   __Pyx_XGIVEREF(__pyx_r);
1749   __Pyx_RefNannyFinishContext();
1750   return __pyx_r;
1751 }
1752
1753 /* "twisted/python/_epoll.pyx":252
1754  *         return call_epoll_wait(self.fd, maxevents, timeout)
1755  * 
1756  *     def poll(self, float timeout=-1, unsigned int maxevents=1024):             # <<<<<<<<<<<<<<
1757  *         """
1758  *         Wait for an I/O event, wrap epoll_wait(2).
1759  */
1760
1761 static PyObject *__pyx_pf_7twisted_6python_6_epoll_5epoll_9poll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
1762 static char __pyx_doc_7twisted_6python_6_epoll_5epoll_9poll[] = "\n        Wait for an I/O event, wrap epoll_wait(2).\n\n        This method is compatible with select.epoll.poll in Python 2.6.\n\n        @type maxevents: C{int}\n        @param maxevents: Maximum number of events returned.\n\n        @type timeout: C{int}\n        @param timeout: Maximum time waiting for events. 0 makes it return\n            immediately whereas -1 makes it wait indefinitely.\n        \n        @raise IOError: Raised if the underlying epoll_wait() call fails.\n        ";
1763 static PyObject *__pyx_pf_7twisted_6python_6_epoll_5epoll_9poll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
1764   float __pyx_v_timeout;
1765   unsigned int __pyx_v_maxevents;
1766   PyObject *__pyx_r = NULL;
1767   __Pyx_RefNannyDeclarations
1768   PyObject *__pyx_t_1 = NULL;
1769   int __pyx_lineno = 0;
1770   const char *__pyx_filename = NULL;
1771   int __pyx_clineno = 0;
1772   static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__timeout,&__pyx_n_s__maxevents,0};
1773   __Pyx_RefNannySetupContext("poll");
1774   {
1775     PyObject* values[2] = {0,0};
1776     if (unlikely(__pyx_kwds)) {
1777       Py_ssize_t kw_args;
1778       switch (PyTuple_GET_SIZE(__pyx_args)) {
1779         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
1780         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
1781         case  0: break;
1782         default: goto __pyx_L5_argtuple_error;
1783       }
1784       kw_args = PyDict_Size(__pyx_kwds);
1785       switch (PyTuple_GET_SIZE(__pyx_args)) {
1786         case  0:
1787         if (kw_args > 0) {
1788           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__timeout);
1789           if (value) { values[0] = value; kw_args--; }
1790         }
1791         case  1:
1792         if (kw_args > 0) {
1793           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__maxevents);
1794           if (value) { values[1] = value; kw_args--; }
1795         }
1796       }
1797       if (unlikely(kw_args > 0)) {
1798         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "poll") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
1799       }
1800     } else {
1801       switch (PyTuple_GET_SIZE(__pyx_args)) {
1802         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
1803         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
1804         case  0: break;
1805         default: goto __pyx_L5_argtuple_error;
1806       }
1807     }
1808     if (values[0]) {
1809       __pyx_v_timeout = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_timeout == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
1810     } else {
1811       __pyx_v_timeout = ((float)-1.0);
1812     }
1813     if (values[1]) {
1814       __pyx_v_maxevents = __Pyx_PyInt_AsUnsignedInt(values[1]); if (unlikely((__pyx_v_maxevents == (unsigned int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
1815     } else {
1816       __pyx_v_maxevents = ((unsigned int)1024);
1817     }
1818   }
1819   goto __pyx_L4_argument_unpacking_done;
1820   __pyx_L5_argtuple_error:;
1821   __Pyx_RaiseArgtupleInvalid("poll", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
1822   __pyx_L3_error:;
1823   __Pyx_AddTraceback("twisted.python._epoll.epoll.poll", __pyx_clineno, __pyx_lineno, __pyx_filename);
1824   __Pyx_RefNannyFinishContext();
1825   return NULL;
1826   __pyx_L4_argument_unpacking_done:;
1827
1828   /* "twisted/python/_epoll.pyx":267
1829  *         @raise IOError: Raised if the underlying epoll_wait() call fails.
1830  *         """
1831  *         return call_epoll_wait(self.fd, maxevents, <int>(timeout * 1000.0))             # <<<<<<<<<<<<<<
1832  * 
1833  * 
1834  */
1835   __Pyx_XDECREF(__pyx_r);
1836   __pyx_t_1 = __pyx_f_7twisted_6python_6_epoll_call_epoll_wait(((struct __pyx_obj_7twisted_6python_6_epoll_epoll *)__pyx_v_self)->fd, __pyx_v_maxevents, ((int)(__pyx_v_timeout * 1000.0))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1837   __Pyx_GOTREF(__pyx_t_1);
1838   __pyx_r = __pyx_t_1;
1839   __pyx_t_1 = 0;
1840   goto __pyx_L0;
1841
1842   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
1843   goto __pyx_L0;
1844   __pyx_L1_error:;
1845   __Pyx_XDECREF(__pyx_t_1);
1846   __Pyx_AddTraceback("twisted.python._epoll.epoll.poll", __pyx_clineno, __pyx_lineno, __pyx_filename);
1847   __pyx_r = NULL;
1848   __pyx_L0:;
1849   __Pyx_XGIVEREF(__pyx_r);
1850   __Pyx_RefNannyFinishContext();
1851   return __pyx_r;
1852 }
1853
1854 static PyObject *__pyx_tp_new_7twisted_6python_6_epoll_epoll(PyTypeObject *t, PyObject *a, PyObject *k) {
1855   PyObject *o = (*t->tp_alloc)(t, 0);
1856   if (!o) return 0;
1857   return o;
1858 }
1859
1860 static void __pyx_tp_dealloc_7twisted_6python_6_epoll_epoll(PyObject *o) {
1861   {
1862     PyObject *etype, *eval, *etb;
1863     PyErr_Fetch(&etype, &eval, &etb);
1864     ++Py_REFCNT(o);
1865     __pyx_pf_7twisted_6python_6_epoll_5epoll_1__dealloc__(o);
1866     if (PyErr_Occurred()) PyErr_WriteUnraisable(o);
1867     --Py_REFCNT(o);
1868     PyErr_Restore(etype, eval, etb);
1869   }
1870   (*Py_TYPE(o)->tp_free)(o);
1871 }
1872
1873 static PyMethodDef __pyx_methods_7twisted_6python_6_epoll_epoll[] = {
1874   {__Pyx_NAMESTR("close"), (PyCFunction)__pyx_pf_7twisted_6python_6_epoll_5epoll_2close, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7twisted_6python_6_epoll_5epoll_2close)},
1875   {__Pyx_NAMESTR("fileno"), (PyCFunction)__pyx_pf_7twisted_6python_6_epoll_5epoll_3fileno, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7twisted_6python_6_epoll_5epoll_3fileno)},
1876   {__Pyx_NAMESTR("register"), (PyCFunction)__pyx_pf_7twisted_6python_6_epoll_5epoll_4register, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7twisted_6python_6_epoll_5epoll_4register)},
1877   {__Pyx_NAMESTR("unregister"), (PyCFunction)__pyx_pf_7twisted_6python_6_epoll_5epoll_5unregister, METH_O, __Pyx_DOCSTR(__pyx_doc_7twisted_6python_6_epoll_5epoll_5unregister)},
1878   {__Pyx_NAMESTR("modify"), (PyCFunction)__pyx_pf_7twisted_6python_6_epoll_5epoll_6modify, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7twisted_6python_6_epoll_5epoll_6modify)},
1879   {__Pyx_NAMESTR("_control"), (PyCFunction)__pyx_pf_7twisted_6python_6_epoll_5epoll_7_control, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7twisted_6python_6_epoll_5epoll_7_control)},
1880   {__Pyx_NAMESTR("wait"), (PyCFunction)__pyx_pf_7twisted_6python_6_epoll_5epoll_8wait, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7twisted_6python_6_epoll_5epoll_8wait)},
1881   {__Pyx_NAMESTR("poll"), (PyCFunction)__pyx_pf_7twisted_6python_6_epoll_5epoll_9poll, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7twisted_6python_6_epoll_5epoll_9poll)},
1882   {0, 0, 0, 0}
1883 };
1884
1885 static PyNumberMethods __pyx_tp_as_number_epoll = {
1886   0, /*nb_add*/
1887   0, /*nb_subtract*/
1888   0, /*nb_multiply*/
1889   #if PY_MAJOR_VERSION < 3
1890   0, /*nb_divide*/
1891   #endif
1892   0, /*nb_remainder*/
1893   0, /*nb_divmod*/
1894   0, /*nb_power*/
1895   0, /*nb_negative*/
1896   0, /*nb_positive*/
1897   0, /*nb_absolute*/
1898   0, /*nb_nonzero*/
1899   0, /*nb_invert*/
1900   0, /*nb_lshift*/
1901   0, /*nb_rshift*/
1902   0, /*nb_and*/
1903   0, /*nb_xor*/
1904   0, /*nb_or*/
1905   #if PY_MAJOR_VERSION < 3
1906   0, /*nb_coerce*/
1907   #endif
1908   0, /*nb_int*/
1909   #if PY_MAJOR_VERSION < 3
1910   0, /*nb_long*/
1911   #else
1912   0, /*reserved*/
1913   #endif
1914   0, /*nb_float*/
1915   #if PY_MAJOR_VERSION < 3
1916   0, /*nb_oct*/
1917   #endif
1918   #if PY_MAJOR_VERSION < 3
1919   0, /*nb_hex*/
1920   #endif
1921   0, /*nb_inplace_add*/
1922   0, /*nb_inplace_subtract*/
1923   0, /*nb_inplace_multiply*/
1924   #if PY_MAJOR_VERSION < 3
1925   0, /*nb_inplace_divide*/
1926   #endif
1927   0, /*nb_inplace_remainder*/
1928   0, /*nb_inplace_power*/
1929   0, /*nb_inplace_lshift*/
1930   0, /*nb_inplace_rshift*/
1931   0, /*nb_inplace_and*/
1932   0, /*nb_inplace_xor*/
1933   0, /*nb_inplace_or*/
1934   0, /*nb_floor_divide*/
1935   0, /*nb_true_divide*/
1936   0, /*nb_inplace_floor_divide*/
1937   0, /*nb_inplace_true_divide*/
1938   #if PY_VERSION_HEX >= 0x02050000
1939   0, /*nb_index*/
1940   #endif
1941 };
1942
1943 static PySequenceMethods __pyx_tp_as_sequence_epoll = {
1944   0, /*sq_length*/
1945   0, /*sq_concat*/
1946   0, /*sq_repeat*/
1947   0, /*sq_item*/
1948   0, /*sq_slice*/
1949   0, /*sq_ass_item*/
1950   0, /*sq_ass_slice*/
1951   0, /*sq_contains*/
1952   0, /*sq_inplace_concat*/
1953   0, /*sq_inplace_repeat*/
1954 };
1955
1956 static PyMappingMethods __pyx_tp_as_mapping_epoll = {
1957   0, /*mp_length*/
1958   0, /*mp_subscript*/
1959   0, /*mp_ass_subscript*/
1960 };
1961
1962 static PyBufferProcs __pyx_tp_as_buffer_epoll = {
1963   #if PY_MAJOR_VERSION < 3
1964   0, /*bf_getreadbuffer*/
1965   #endif
1966   #if PY_MAJOR_VERSION < 3
1967   0, /*bf_getwritebuffer*/
1968   #endif
1969   #if PY_MAJOR_VERSION < 3
1970   0, /*bf_getsegcount*/
1971   #endif
1972   #if PY_MAJOR_VERSION < 3
1973   0, /*bf_getcharbuffer*/
1974   #endif
1975   #if PY_VERSION_HEX >= 0x02060000
1976   0, /*bf_getbuffer*/
1977   #endif
1978   #if PY_VERSION_HEX >= 0x02060000
1979   0, /*bf_releasebuffer*/
1980   #endif
1981 };
1982
1983 static PyTypeObject __pyx_type_7twisted_6python_6_epoll_epoll = {
1984   PyVarObject_HEAD_INIT(0, 0)
1985   __Pyx_NAMESTR("twisted.python._epoll.epoll"), /*tp_name*/
1986   sizeof(struct __pyx_obj_7twisted_6python_6_epoll_epoll), /*tp_basicsize*/
1987   0, /*tp_itemsize*/
1988   __pyx_tp_dealloc_7twisted_6python_6_epoll_epoll, /*tp_dealloc*/
1989   0, /*tp_print*/
1990   0, /*tp_getattr*/
1991   0, /*tp_setattr*/
1992   #if PY_MAJOR_VERSION < 3
1993   0, /*tp_compare*/
1994   #else
1995   0, /*reserved*/
1996   #endif
1997   0, /*tp_repr*/
1998   &__pyx_tp_as_number_epoll, /*tp_as_number*/
1999   &__pyx_tp_as_sequence_epoll, /*tp_as_sequence*/
2000   &__pyx_tp_as_mapping_epoll, /*tp_as_mapping*/
2001   0, /*tp_hash*/
2002   0, /*tp_call*/
2003   0, /*tp_str*/
2004   0, /*tp_getattro*/
2005   0, /*tp_setattro*/
2006   &__pyx_tp_as_buffer_epoll, /*tp_as_buffer*/
2007   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
2008   __Pyx_DOCSTR("\n    Represent a set of file descriptors being monitored for events.\n    "), /*tp_doc*/
2009   0, /*tp_traverse*/
2010   0, /*tp_clear*/
2011   0, /*tp_richcompare*/
2012   0, /*tp_weaklistoffset*/
2013   0, /*tp_iter*/
2014   0, /*tp_iternext*/
2015   __pyx_methods_7twisted_6python_6_epoll_epoll, /*tp_methods*/
2016   0, /*tp_members*/
2017   0, /*tp_getset*/
2018   0, /*tp_base*/
2019   0, /*tp_dict*/
2020   0, /*tp_descr_get*/
2021   0, /*tp_descr_set*/
2022   0, /*tp_dictoffset*/
2023   __pyx_pf_7twisted_6python_6_epoll_5epoll___init__, /*tp_init*/
2024   0, /*tp_alloc*/
2025   __pyx_tp_new_7twisted_6python_6_epoll_epoll, /*tp_new*/
2026   0, /*tp_free*/
2027   0, /*tp_is_gc*/
2028   0, /*tp_bases*/
2029   0, /*tp_mro*/
2030   0, /*tp_cache*/
2031   0, /*tp_subclasses*/
2032   0, /*tp_weaklist*/
2033   0, /*tp_del*/
2034   #if PY_VERSION_HEX >= 0x02060000
2035   0, /*tp_version_tag*/
2036   #endif
2037 };
2038
2039 static PyMethodDef __pyx_methods[] = {
2040   {0, 0, 0, 0}
2041 };
2042
2043 #if PY_MAJOR_VERSION >= 3
2044 static struct PyModuleDef __pyx_moduledef = {
2045     PyModuleDef_HEAD_INIT,
2046     __Pyx_NAMESTR("_epoll"),
2047     __Pyx_DOCSTR(__pyx_k_1), /* m_doc */
2048     -1, /* m_size */
2049     __pyx_methods /* m_methods */,
2050     NULL, /* m_reload */
2051     NULL, /* m_traverse */
2052     NULL, /* m_clear */
2053     NULL /* m_free */
2054 };
2055 #endif
2056
2057 static __Pyx_StringTabEntry __pyx_string_tab[] = {
2058   {&__pyx_n_s__CTL_ADD, __pyx_k__CTL_ADD, sizeof(__pyx_k__CTL_ADD), 0, 0, 1, 1},
2059   {&__pyx_n_s__CTL_DEL, __pyx_k__CTL_DEL, sizeof(__pyx_k__CTL_DEL), 0, 0, 1, 1},
2060   {&__pyx_n_s__CTL_MOD, __pyx_k__CTL_MOD, sizeof(__pyx_k__CTL_MOD), 0, 0, 1, 1},
2061   {&__pyx_n_s__EPOLLERR, __pyx_k__EPOLLERR, sizeof(__pyx_k__EPOLLERR), 0, 0, 1, 1},
2062   {&__pyx_n_s__EPOLLET, __pyx_k__EPOLLET, sizeof(__pyx_k__EPOLLET), 0, 0, 1, 1},
2063   {&__pyx_n_s__EPOLLHUP, __pyx_k__EPOLLHUP, sizeof(__pyx_k__EPOLLHUP), 0, 0, 1, 1},
2064   {&__pyx_n_s__EPOLLIN, __pyx_k__EPOLLIN, sizeof(__pyx_k__EPOLLIN), 0, 0, 1, 1},
2065   {&__pyx_n_s__EPOLLMSG, __pyx_k__EPOLLMSG, sizeof(__pyx_k__EPOLLMSG), 0, 0, 1, 1},
2066   {&__pyx_n_s__EPOLLOUT, __pyx_k__EPOLLOUT, sizeof(__pyx_k__EPOLLOUT), 0, 0, 1, 1},
2067   {&__pyx_n_s__EPOLLPRI, __pyx_k__EPOLLPRI, sizeof(__pyx_k__EPOLLPRI), 0, 0, 1, 1},
2068   {&__pyx_n_s__EPOLLRDBAND, __pyx_k__EPOLLRDBAND, sizeof(__pyx_k__EPOLLRDBAND), 0, 0, 1, 1},
2069   {&__pyx_n_s__EPOLLRDNORM, __pyx_k__EPOLLRDNORM, sizeof(__pyx_k__EPOLLRDNORM), 0, 0, 1, 1},
2070   {&__pyx_n_s__EPOLLWRBAND, __pyx_k__EPOLLWRBAND, sizeof(__pyx_k__EPOLLWRBAND), 0, 0, 1, 1},
2071   {&__pyx_n_s__EPOLLWRNORM, __pyx_k__EPOLLWRNORM, sizeof(__pyx_k__EPOLLWRNORM), 0, 0, 1, 1},
2072   {&__pyx_n_s__ERR, __pyx_k__ERR, sizeof(__pyx_k__ERR), 0, 0, 1, 1},
2073   {&__pyx_n_s__ET, __pyx_k__ET, sizeof(__pyx_k__ET), 0, 0, 1, 1},
2074   {&__pyx_n_s__HUP, __pyx_k__HUP, sizeof(__pyx_k__HUP), 0, 0, 1, 1},
2075   {&__pyx_n_s__IN, __pyx_k__IN, sizeof(__pyx_k__IN), 0, 0, 1, 1},
2076   {&__pyx_n_s__IOError, __pyx_k__IOError, sizeof(__pyx_k__IOError), 0, 0, 1, 1},
2077   {&__pyx_n_s__MSG, __pyx_k__MSG, sizeof(__pyx_k__MSG), 0, 0, 1, 1},
2078   {&__pyx_n_s__OUT, __pyx_k__OUT, sizeof(__pyx_k__OUT), 0, 0, 1, 1},
2079   {&__pyx_n_s__PRI, __pyx_k__PRI, sizeof(__pyx_k__PRI), 0, 0, 1, 1},
2080   {&__pyx_n_s__RDBAND, __pyx_k__RDBAND, sizeof(__pyx_k__RDBAND), 0, 0, 1, 1},
2081   {&__pyx_n_s__RDNORM, __pyx_k__RDNORM, sizeof(__pyx_k__RDNORM), 0, 0, 1, 1},
2082   {&__pyx_n_s__WRBAND, __pyx_k__WRBAND, sizeof(__pyx_k__WRBAND), 0, 0, 1, 1},
2083   {&__pyx_n_s__WRNORM, __pyx_k__WRNORM, sizeof(__pyx_k__WRNORM), 0, 0, 1, 1},
2084   {&__pyx_n_s____main__, __pyx_k____main__, sizeof(__pyx_k____main__), 0, 0, 1, 1},
2085   {&__pyx_n_s____test__, __pyx_k____test__, sizeof(__pyx_k____test__), 0, 0, 1, 1},
2086   {&__pyx_n_s__events, __pyx_k__events, sizeof(__pyx_k__events), 0, 0, 1, 1},
2087   {&__pyx_n_s__fd, __pyx_k__fd, sizeof(__pyx_k__fd), 0, 0, 1, 1},
2088   {&__pyx_n_s__maxevents, __pyx_k__maxevents, sizeof(__pyx_k__maxevents), 0, 0, 1, 1},
2089   {&__pyx_n_s__op, __pyx_k__op, sizeof(__pyx_k__op), 0, 0, 1, 1},
2090   {&__pyx_n_s__size, __pyx_k__size, sizeof(__pyx_k__size), 0, 0, 1, 1},
2091   {&__pyx_n_s__timeout, __pyx_k__timeout, sizeof(__pyx_k__timeout), 0, 0, 1, 1},
2092   {0, 0, 0, 0, 0, 0, 0}
2093 };
2094 static int __Pyx_InitCachedBuiltins(void) {
2095   __pyx_builtin_IOError = __Pyx_GetName(__pyx_b, __pyx_n_s__IOError); if (!__pyx_builtin_IOError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2096   return 0;
2097   __pyx_L1_error:;
2098   return -1;
2099 }
2100
2101 static int __Pyx_InitCachedConstants(void) {
2102   __Pyx_RefNannyDeclarations
2103   __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants");
2104   __Pyx_RefNannyFinishContext();
2105   return 0;
2106 }
2107
2108 static int __Pyx_InitGlobals(void) {
2109   if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
2110   return 0;
2111   __pyx_L1_error:;
2112   return -1;
2113 }
2114
2115 #if PY_MAJOR_VERSION < 3
2116 PyMODINIT_FUNC init_epoll(void); /*proto*/
2117 PyMODINIT_FUNC init_epoll(void)
2118 #else
2119 PyMODINIT_FUNC PyInit__epoll(void); /*proto*/
2120 PyMODINIT_FUNC PyInit__epoll(void)
2121 #endif
2122 {
2123   PyObject *__pyx_t_1 = NULL;
2124   __Pyx_RefNannyDeclarations
2125   #if CYTHON_REFNANNY
2126   __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny");
2127   if (!__Pyx_RefNanny) {
2128       PyErr_Clear();
2129       __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny");
2130       if (!__Pyx_RefNanny)
2131           Py_FatalError("failed to import 'refnanny' module");
2132   }
2133   #endif
2134   __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit__epoll(void)");
2135   if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2136   __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2137   __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2138   #ifdef __pyx_binding_PyCFunctionType_USED
2139   if (__pyx_binding_PyCFunctionType_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2140   #endif
2141   /*--- Library function declarations ---*/
2142   /*--- Threads initialization code ---*/
2143   #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
2144   #ifdef WITH_THREAD /* Python build with threading support? */
2145   PyEval_InitThreads();
2146   #endif
2147   #endif
2148   /*--- Module creation code ---*/
2149   #if PY_MAJOR_VERSION < 3
2150   __pyx_m = Py_InitModule4(__Pyx_NAMESTR("_epoll"), __pyx_methods, __Pyx_DOCSTR(__pyx_k_1), 0, PYTHON_API_VERSION);
2151   #else
2152   __pyx_m = PyModule_Create(&__pyx_moduledef);
2153   #endif
2154   if (!__pyx_m) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
2155   #if PY_MAJOR_VERSION < 3
2156   Py_INCREF(__pyx_m);
2157   #endif
2158   __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME));
2159   if (!__pyx_b) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
2160   if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
2161   /*--- Initialize various global constants etc. ---*/
2162   if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2163   if (__pyx_module_is_main_twisted__python___epoll) {
2164     if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s____main__) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
2165   }
2166   /*--- Builtin init code ---*/
2167   if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2168   /*--- Constants init code ---*/
2169   if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2170   /*--- Global init code ---*/
2171   /*--- Variable export code ---*/
2172   /*--- Function export code ---*/
2173   /*--- Type init code ---*/
2174   if (PyType_Ready(&__pyx_type_7twisted_6python_6_epoll_epoll) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2175   {
2176     PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_7twisted_6python_6_epoll_epoll, "__init__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2177     if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
2178       __pyx_wrapperbase_7twisted_6python_6_epoll_5epoll___init__ = *((PyWrapperDescrObject *)wrapper)->d_base;
2179       __pyx_wrapperbase_7twisted_6python_6_epoll_5epoll___init__.doc = __pyx_doc_7twisted_6python_6_epoll_5epoll___init__;
2180       ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_7twisted_6python_6_epoll_5epoll___init__;
2181     }
2182   }
2183   if (__Pyx_SetAttrString(__pyx_m, "epoll", (PyObject *)&__pyx_type_7twisted_6python_6_epoll_epoll) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2184   __pyx_ptype_7twisted_6python_6_epoll_epoll = &__pyx_type_7twisted_6python_6_epoll_epoll;
2185   /*--- Type import code ---*/
2186   /*--- Variable import code ---*/
2187   /*--- Function import code ---*/
2188   /*--- Execution code ---*/
2189
2190   /* "twisted/python/_epoll.pyx":270
2191  * 
2192  * 
2193  * CTL_ADD = EPOLL_CTL_ADD             # <<<<<<<<<<<<<<
2194  * CTL_DEL = EPOLL_CTL_DEL
2195  * CTL_MOD = EPOLL_CTL_MOD
2196  */
2197   __pyx_t_1 = PyInt_FromLong(EPOLL_CTL_ADD); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2198   __Pyx_GOTREF(__pyx_t_1);
2199   if (PyObject_SetAttr(__pyx_m, __pyx_n_s__CTL_ADD, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2200   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
2201
2202   /* "twisted/python/_epoll.pyx":271
2203  * 
2204  * CTL_ADD = EPOLL_CTL_ADD
2205  * CTL_DEL = EPOLL_CTL_DEL             # <<<<<<<<<<<<<<
2206  * CTL_MOD = EPOLL_CTL_MOD
2207  * 
2208  */
2209   __pyx_t_1 = PyInt_FromLong(EPOLL_CTL_DEL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2210   __Pyx_GOTREF(__pyx_t_1);
2211   if (PyObject_SetAttr(__pyx_m, __pyx_n_s__CTL_DEL, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2212   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
2213
2214   /* "twisted/python/_epoll.pyx":272
2215  * CTL_ADD = EPOLL_CTL_ADD
2216  * CTL_DEL = EPOLL_CTL_DEL
2217  * CTL_MOD = EPOLL_CTL_MOD             # <<<<<<<<<<<<<<
2218  * 
2219  * IN = EPOLLIN = c_EPOLLIN
2220  */
2221   __pyx_t_1 = PyInt_FromLong(EPOLL_CTL_MOD); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2222   __Pyx_GOTREF(__pyx_t_1);
2223   if (PyObject_SetAttr(__pyx_m, __pyx_n_s__CTL_MOD, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2224   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
2225
2226   /* "twisted/python/_epoll.pyx":274
2227  * CTL_MOD = EPOLL_CTL_MOD
2228  * 
2229  * IN = EPOLLIN = c_EPOLLIN             # <<<<<<<<<<<<<<
2230  * OUT = EPOLLOUT = c_EPOLLOUT
2231  * PRI = EPOLLPRI = c_EPOLLPRI
2232  */
2233   __pyx_t_1 = PyInt_FromLong(EPOLLIN); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2234   __Pyx_GOTREF(__pyx_t_1);
2235   if (PyObject_SetAttr(__pyx_m, __pyx_n_s__IN, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2236   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
2237   __pyx_t_1 = PyInt_FromLong(EPOLLIN); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2238   __Pyx_GOTREF(__pyx_t_1);
2239   if (PyObject_SetAttr(__pyx_m, __pyx_n_s__EPOLLIN, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2240   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
2241
2242   /* "twisted/python/_epoll.pyx":275
2243  * 
2244  * IN = EPOLLIN = c_EPOLLIN
2245  * OUT = EPOLLOUT = c_EPOLLOUT             # <<<<<<<<<<<<<<
2246  * PRI = EPOLLPRI = c_EPOLLPRI
2247  * ERR = EPOLLERR = c_EPOLLERR
2248  */
2249   __pyx_t_1 = PyInt_FromLong(EPOLLOUT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2250   __Pyx_GOTREF(__pyx_t_1);
2251   if (PyObject_SetAttr(__pyx_m, __pyx_n_s__OUT, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2252   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
2253   __pyx_t_1 = PyInt_FromLong(EPOLLOUT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2254   __Pyx_GOTREF(__pyx_t_1);
2255   if (PyObject_SetAttr(__pyx_m, __pyx_n_s__EPOLLOUT, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2256   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
2257
2258   /* "twisted/python/_epoll.pyx":276
2259  * IN = EPOLLIN = c_EPOLLIN
2260  * OUT = EPOLLOUT = c_EPOLLOUT
2261  * PRI = EPOLLPRI = c_EPOLLPRI             # <<<<<<<<<<<<<<
2262  * ERR = EPOLLERR = c_EPOLLERR
2263  * HUP = EPOLLHUP = c_EPOLLHUP
2264  */
2265   __pyx_t_1 = PyInt_FromLong(EPOLLPRI); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2266   __Pyx_GOTREF(__pyx_t_1);
2267   if (PyObject_SetAttr(__pyx_m, __pyx_n_s__PRI, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2268   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
2269   __pyx_t_1 = PyInt_FromLong(EPOLLPRI); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2270   __Pyx_GOTREF(__pyx_t_1);
2271   if (PyObject_SetAttr(__pyx_m, __pyx_n_s__EPOLLPRI, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2272   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
2273
2274   /* "twisted/python/_epoll.pyx":277
2275  * OUT = EPOLLOUT = c_EPOLLOUT
2276  * PRI = EPOLLPRI = c_EPOLLPRI
2277  * ERR = EPOLLERR = c_EPOLLERR             # <<<<<<<<<<<<<<
2278  * HUP = EPOLLHUP = c_EPOLLHUP
2279  * ET = EPOLLET = c_EPOLLET
2280  */
2281   __pyx_t_1 = PyInt_FromLong(EPOLLERR); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2282   __Pyx_GOTREF(__pyx_t_1);
2283   if (PyObject_SetAttr(__pyx_m, __pyx_n_s__ERR, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2284   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
2285   __pyx_t_1 = PyInt_FromLong(EPOLLERR); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2286   __Pyx_GOTREF(__pyx_t_1);
2287   if (PyObject_SetAttr(__pyx_m, __pyx_n_s__EPOLLERR, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2288   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
2289
2290   /* "twisted/python/_epoll.pyx":278
2291  * PRI = EPOLLPRI = c_EPOLLPRI
2292  * ERR = EPOLLERR = c_EPOLLERR
2293  * HUP = EPOLLHUP = c_EPOLLHUP             # <<<<<<<<<<<<<<
2294  * ET = EPOLLET = c_EPOLLET
2295  * 
2296  */
2297   __pyx_t_1 = PyInt_FromLong(EPOLLHUP); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2298   __Pyx_GOTREF(__pyx_t_1);
2299   if (PyObject_SetAttr(__pyx_m, __pyx_n_s__HUP, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2300   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
2301   __pyx_t_1 = PyInt_FromLong(EPOLLHUP); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2302   __Pyx_GOTREF(__pyx_t_1);
2303   if (PyObject_SetAttr(__pyx_m, __pyx_n_s__EPOLLHUP, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2304   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
2305
2306   /* "twisted/python/_epoll.pyx":279
2307  * ERR = EPOLLERR = c_EPOLLERR
2308  * HUP = EPOLLHUP = c_EPOLLHUP
2309  * ET = EPOLLET = c_EPOLLET             # <<<<<<<<<<<<<<
2310  * 
2311  * RDNORM = EPOLLRDNORM = c_EPOLLRDNORM
2312  */
2313   __pyx_t_1 = PyInt_FromLong(EPOLLET); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2314   __Pyx_GOTREF(__pyx_t_1);
2315   if (PyObject_SetAttr(__pyx_m, __pyx_n_s__ET, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2316   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
2317   __pyx_t_1 = PyInt_FromLong(EPOLLET); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2318   __Pyx_GOTREF(__pyx_t_1);
2319   if (PyObject_SetAttr(__pyx_m, __pyx_n_s__EPOLLET, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2320   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
2321
2322   /* "twisted/python/_epoll.pyx":281
2323  * ET = EPOLLET = c_EPOLLET
2324  * 
2325  * RDNORM = EPOLLRDNORM = c_EPOLLRDNORM             # <<<<<<<<<<<<<<
2326  * RDBAND = EPOLLRDBAND = c_EPOLLRDBAND
2327  * WRNORM = EPOLLWRNORM = c_EPOLLWRNORM
2328  */
2329   __pyx_t_1 = PyInt_FromLong(EPOLLRDNORM); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2330   __Pyx_GOTREF(__pyx_t_1);
2331   if (PyObject_SetAttr(__pyx_m, __pyx_n_s__RDNORM, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2332   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
2333   __pyx_t_1 = PyInt_FromLong(EPOLLRDNORM); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2334   __Pyx_GOTREF(__pyx_t_1);
2335   if (PyObject_SetAttr(__pyx_m, __pyx_n_s__EPOLLRDNORM, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2336   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
2337
2338   /* "twisted/python/_epoll.pyx":282
2339  * 
2340  * RDNORM = EPOLLRDNORM = c_EPOLLRDNORM
2341  * RDBAND = EPOLLRDBAND = c_EPOLLRDBAND             # <<<<<<<<<<<<<<
2342  * WRNORM = EPOLLWRNORM = c_EPOLLWRNORM
2343  * WRBAND = EPOLLWRBAND = c_EPOLLWRBAND
2344  */
2345   __pyx_t_1 = PyInt_FromLong(EPOLLRDBAND); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2346   __Pyx_GOTREF(__pyx_t_1);
2347   if (PyObject_SetAttr(__pyx_m, __pyx_n_s__RDBAND, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2348   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
2349   __pyx_t_1 = PyInt_FromLong(EPOLLRDBAND); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2350   __Pyx_GOTREF(__pyx_t_1);
2351   if (PyObject_SetAttr(__pyx_m, __pyx_n_s__EPOLLRDBAND, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2352   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
2353
2354   /* "twisted/python/_epoll.pyx":283
2355  * RDNORM = EPOLLRDNORM = c_EPOLLRDNORM
2356  * RDBAND = EPOLLRDBAND = c_EPOLLRDBAND
2357  * WRNORM = EPOLLWRNORM = c_EPOLLWRNORM             # <<<<<<<<<<<<<<
2358  * WRBAND = EPOLLWRBAND = c_EPOLLWRBAND
2359  * MSG = EPOLLMSG = c_EPOLLMSG
2360  */
2361   __pyx_t_1 = PyInt_FromLong(EPOLLWRNORM); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2362   __Pyx_GOTREF(__pyx_t_1);
2363   if (PyObject_SetAttr(__pyx_m, __pyx_n_s__WRNORM, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2364   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
2365   __pyx_t_1 = PyInt_FromLong(EPOLLWRNORM); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2366   __Pyx_GOTREF(__pyx_t_1);
2367   if (PyObject_SetAttr(__pyx_m, __pyx_n_s__EPOLLWRNORM, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2368   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
2369
2370   /* "twisted/python/_epoll.pyx":284
2371  * RDBAND = EPOLLRDBAND = c_EPOLLRDBAND
2372  * WRNORM = EPOLLWRNORM = c_EPOLLWRNORM
2373  * WRBAND = EPOLLWRBAND = c_EPOLLWRBAND             # <<<<<<<<<<<<<<
2374  * MSG = EPOLLMSG = c_EPOLLMSG
2375  */
2376   __pyx_t_1 = PyInt_FromLong(EPOLLWRBAND); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2377   __Pyx_GOTREF(__pyx_t_1);
2378   if (PyObject_SetAttr(__pyx_m, __pyx_n_s__WRBAND, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2379   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
2380   __pyx_t_1 = PyInt_FromLong(EPOLLWRBAND); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2381   __Pyx_GOTREF(__pyx_t_1);
2382   if (PyObject_SetAttr(__pyx_m, __pyx_n_s__EPOLLWRBAND, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2383   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
2384
2385   /* "twisted/python/_epoll.pyx":285
2386  * WRNORM = EPOLLWRNORM = c_EPOLLWRNORM
2387  * WRBAND = EPOLLWRBAND = c_EPOLLWRBAND
2388  * MSG = EPOLLMSG = c_EPOLLMSG             # <<<<<<<<<<<<<<
2389  */
2390   __pyx_t_1 = PyInt_FromLong(EPOLLMSG); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2391   __Pyx_GOTREF(__pyx_t_1);
2392   if (PyObject_SetAttr(__pyx_m, __pyx_n_s__MSG, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2393   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
2394   __pyx_t_1 = PyInt_FromLong(EPOLLMSG); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2395   __Pyx_GOTREF(__pyx_t_1);
2396   if (PyObject_SetAttr(__pyx_m, __pyx_n_s__EPOLLMSG, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2397   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
2398
2399   /* "twisted/python/_epoll.pyx":1
2400  * # Copyright (c) Twisted Matrix Laboratories.             # <<<<<<<<<<<<<<
2401  * # See LICENSE for details.
2402  * 
2403  */
2404   __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2405   __Pyx_GOTREF(((PyObject *)__pyx_t_1));
2406   if (PyObject_SetAttr(__pyx_m, __pyx_n_s____test__, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2407   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
2408   goto __pyx_L0;
2409   __pyx_L1_error:;
2410   __Pyx_XDECREF(__pyx_t_1);
2411   if (__pyx_m) {
2412     __Pyx_AddTraceback("init twisted.python._epoll", __pyx_clineno, __pyx_lineno, __pyx_filename);
2413     Py_DECREF(__pyx_m); __pyx_m = 0;
2414   } else if (!PyErr_Occurred()) {
2415     PyErr_SetString(PyExc_ImportError, "init twisted.python._epoll");
2416   }
2417   __pyx_L0:;
2418   __Pyx_RefNannyFinishContext();
2419   #if PY_MAJOR_VERSION < 3
2420   return;
2421   #else
2422   return __pyx_m;
2423   #endif
2424 }
2425
2426 /* Runtime support code */
2427
2428 #if CYTHON_REFNANNY
2429 static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) {
2430     PyObject *m = NULL, *p = NULL;
2431     void *r = NULL;
2432     m = PyImport_ImportModule((char *)modname);
2433     if (!m) goto end;
2434     p = PyObject_GetAttrString(m, (char *)"RefNannyAPI");
2435     if (!p) goto end;
2436     r = PyLong_AsVoidPtr(p);
2437 end:
2438     Py_XDECREF(p);
2439     Py_XDECREF(m);
2440     return (__Pyx_RefNannyAPIStruct *)r;
2441 }
2442 #endif /* CYTHON_REFNANNY */
2443
2444 static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name) {
2445     PyObject *result;
2446     result = PyObject_GetAttr(dict, name);
2447     if (!result) {
2448         if (dict != __pyx_b) {
2449             PyErr_Clear();
2450             result = PyObject_GetAttr(__pyx_b, name);
2451         }
2452         if (!result) {
2453             PyErr_SetObject(PyExc_NameError, name);
2454         }
2455     }
2456     return result;
2457 }
2458
2459 static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) {
2460     PyObject *tmp_type, *tmp_value, *tmp_tb;
2461     PyThreadState *tstate = PyThreadState_GET();
2462
2463     tmp_type = tstate->curexc_type;
2464     tmp_value = tstate->curexc_value;
2465     tmp_tb = tstate->curexc_traceback;
2466     tstate->curexc_type = type;
2467     tstate->curexc_value = value;
2468     tstate->curexc_traceback = tb;
2469     Py_XDECREF(tmp_type);
2470     Py_XDECREF(tmp_value);
2471     Py_XDECREF(tmp_tb);
2472 }
2473
2474 static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) {
2475     PyThreadState *tstate = PyThreadState_GET();
2476     *type = tstate->curexc_type;
2477     *value = tstate->curexc_value;
2478     *tb = tstate->curexc_traceback;
2479
2480     tstate->curexc_type = 0;
2481     tstate->curexc_value = 0;
2482     tstate->curexc_traceback = 0;
2483 }
2484
2485
2486 #if PY_MAJOR_VERSION < 3
2487 static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) {
2488     /* cause is unused */
2489     Py_XINCREF(type);
2490     Py_XINCREF(value);
2491     Py_XINCREF(tb);
2492     /* First, check the traceback argument, replacing None with NULL. */
2493     if (tb == Py_None) {
2494         Py_DECREF(tb);
2495         tb = 0;
2496     }
2497     else if (tb != NULL && !PyTraceBack_Check(tb)) {
2498         PyErr_SetString(PyExc_TypeError,
2499             "raise: arg 3 must be a traceback or None");
2500         goto raise_error;
2501     }
2502     /* Next, replace a missing value with None */
2503     if (value == NULL) {
2504         value = Py_None;
2505         Py_INCREF(value);
2506     }
2507     #if PY_VERSION_HEX < 0x02050000
2508     if (!PyClass_Check(type))
2509     #else
2510     if (!PyType_Check(type))
2511     #endif
2512     {
2513         /* Raising an instance.  The value should be a dummy. */
2514         if (value != Py_None) {
2515             PyErr_SetString(PyExc_TypeError,
2516                 "instance exception may not have a separate value");
2517             goto raise_error;
2518         }
2519         /* Normalize to raise <class>, <instance> */
2520         Py_DECREF(value);
2521         value = type;
2522         #if PY_VERSION_HEX < 0x02050000
2523             if (PyInstance_Check(type)) {
2524                 type = (PyObject*) ((PyInstanceObject*)type)->in_class;
2525                 Py_INCREF(type);
2526             }
2527             else {
2528                 type = 0;
2529                 PyErr_SetString(PyExc_TypeError,
2530                     "raise: exception must be an old-style class or instance");
2531                 goto raise_error;
2532             }
2533         #else
2534             type = (PyObject*) Py_TYPE(type);
2535             Py_INCREF(type);
2536             if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) {
2537                 PyErr_SetString(PyExc_TypeError,
2538                     "raise: exception class must be a subclass of BaseException");
2539                 goto raise_error;
2540             }
2541         #endif
2542     }
2543
2544     __Pyx_ErrRestore(type, value, tb);
2545     return;
2546 raise_error:
2547     Py_XDECREF(value);
2548     Py_XDECREF(type);
2549     Py_XDECREF(tb);
2550     return;
2551 }
2552
2553 #else /* Python 3+ */
2554
2555 static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) {
2556     if (tb == Py_None) {
2557         tb = 0;
2558     } else if (tb && !PyTraceBack_Check(tb)) {
2559         PyErr_SetString(PyExc_TypeError,
2560             "raise: arg 3 must be a traceback or None");
2561         goto bad;
2562     }
2563     if (value == Py_None)
2564         value = 0;
2565
2566     if (PyExceptionInstance_Check(type)) {
2567         if (value) {
2568             PyErr_SetString(PyExc_TypeError,
2569                 "instance exception may not have a separate value");
2570             goto bad;
2571         }
2572         value = type;
2573         type = (PyObject*) Py_TYPE(value);
2574     } else if (!PyExceptionClass_Check(type)) {
2575         PyErr_SetString(PyExc_TypeError,
2576             "raise: exception class must be a subclass of BaseException");
2577         goto bad;
2578     }
2579
2580     if (cause) {
2581         PyObject *fixed_cause;
2582         if (PyExceptionClass_Check(cause)) {
2583             fixed_cause = PyObject_CallObject(cause, NULL);
2584             if (fixed_cause == NULL)
2585                 goto bad;
2586         }
2587         else if (PyExceptionInstance_Check(cause)) {
2588             fixed_cause = cause;
2589             Py_INCREF(fixed_cause);
2590         }
2591         else {
2592             PyErr_SetString(PyExc_TypeError,
2593                             "exception causes must derive from "
2594                             "BaseException");
2595             goto bad;
2596         }
2597         if (!value) {
2598             value = PyObject_CallObject(type, NULL);
2599         }
2600         PyException_SetCause(value, fixed_cause);
2601     }
2602
2603     PyErr_SetObject(type, value);
2604
2605     if (tb) {
2606         PyThreadState *tstate = PyThreadState_GET();
2607         PyObject* tmp_tb = tstate->curexc_traceback;
2608         if (tb != tmp_tb) {
2609             Py_INCREF(tb);
2610             tstate->curexc_traceback = tb;
2611             Py_XDECREF(tmp_tb);
2612         }
2613     }
2614
2615 bad:
2616     return;
2617 }
2618 #endif
2619
2620 static void __Pyx_RaiseDoubleKeywordsError(
2621     const char* func_name,
2622     PyObject* kw_name)
2623 {
2624     PyErr_Format(PyExc_TypeError,
2625         #if PY_MAJOR_VERSION >= 3
2626         "%s() got multiple values for keyword argument '%U'", func_name, kw_name);
2627         #else
2628         "%s() got multiple values for keyword argument '%s'", func_name,
2629         PyString_AS_STRING(kw_name));
2630         #endif
2631 }
2632
2633 static int __Pyx_ParseOptionalKeywords(
2634     PyObject *kwds,
2635     PyObject **argnames[],
2636     PyObject *kwds2,
2637     PyObject *values[],
2638     Py_ssize_t num_pos_args,
2639     const char* function_name)
2640 {
2641     PyObject *key = 0, *value = 0;
2642     Py_ssize_t pos = 0;
2643     PyObject*** name;
2644     PyObject*** first_kw_arg = argnames + num_pos_args;
2645
2646     while (PyDict_Next(kwds, &pos, &key, &value)) {
2647         name = first_kw_arg;
2648         while (*name && (**name != key)) name++;
2649         if (*name) {
2650             values[name-argnames] = value;
2651         } else {
2652             #if PY_MAJOR_VERSION < 3
2653             if (unlikely(!PyString_CheckExact(key)) && unlikely(!PyString_Check(key))) {
2654             #else
2655             if (unlikely(!PyUnicode_CheckExact(key)) && unlikely(!PyUnicode_Check(key))) {
2656             #endif
2657                 goto invalid_keyword_type;
2658             } else {
2659                 for (name = first_kw_arg; *name; name++) {
2660                     #if PY_MAJOR_VERSION >= 3
2661                     if (PyUnicode_GET_SIZE(**name) == PyUnicode_GET_SIZE(key) &&
2662                         PyUnicode_Compare(**name, key) == 0) break;
2663                     #else
2664                     if (PyString_GET_SIZE(**name) == PyString_GET_SIZE(key) &&
2665                         _PyString_Eq(**name, key)) break;
2666                     #endif
2667                 }
2668                 if (*name) {
2669                     values[name-argnames] = value;
2670                 } else {
2671                     /* unexpected keyword found */
2672                     for (name=argnames; name != first_kw_arg; name++) {
2673                         if (**name == key) goto arg_passed_twice;
2674                         #if PY_MAJOR_VERSION >= 3
2675                         if (PyUnicode_GET_SIZE(**name) == PyUnicode_GET_SIZE(key) &&
2676                             PyUnicode_Compare(**name, key) == 0) goto arg_passed_twice;
2677                         #else
2678                         if (PyString_GET_SIZE(**name) == PyString_GET_SIZE(key) &&
2679                             _PyString_Eq(**name, key)) goto arg_passed_twice;
2680                         #endif
2681                     }
2682                     if (kwds2) {
2683                         if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad;
2684                     } else {
2685                         goto invalid_keyword;
2686                     }
2687                 }
2688             }
2689         }
2690     }
2691     return 0;
2692 arg_passed_twice:
2693     __Pyx_RaiseDoubleKeywordsError(function_name, **name);
2694     goto bad;
2695 invalid_keyword_type:
2696     PyErr_Format(PyExc_TypeError,
2697         "%s() keywords must be strings", function_name);
2698     goto bad;
2699 invalid_keyword:
2700     PyErr_Format(PyExc_TypeError,
2701     #if PY_MAJOR_VERSION < 3
2702         "%s() got an unexpected keyword argument '%s'",
2703         function_name, PyString_AsString(key));
2704     #else
2705         "%s() got an unexpected keyword argument '%U'",
2706         function_name, key);
2707     #endif
2708 bad:
2709     return -1;
2710 }
2711
2712 static void __Pyx_RaiseArgtupleInvalid(
2713     const char* func_name,
2714     int exact,
2715     Py_ssize_t num_min,
2716     Py_ssize_t num_max,
2717     Py_ssize_t num_found)
2718 {
2719     Py_ssize_t num_expected;
2720     const char *more_or_less;
2721
2722     if (num_found < num_min) {
2723         num_expected = num_min;
2724         more_or_less = "at least";
2725     } else {
2726         num_expected = num_max;
2727         more_or_less = "at most";
2728     }
2729     if (exact) {
2730         more_or_less = "exactly";
2731     }
2732     PyErr_Format(PyExc_TypeError,
2733                  "%s() takes %s %"PY_FORMAT_SIZE_T"d positional argument%s (%"PY_FORMAT_SIZE_T"d given)",
2734                  func_name, more_or_less, num_expected,
2735                  (num_expected == 1) ? "" : "s", num_found);
2736 }
2737
2738 static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject* x) {
2739     const unsigned char neg_one = (unsigned char)-1, const_zero = 0;
2740     const int is_unsigned = neg_one > const_zero;
2741     if (sizeof(unsigned char) < sizeof(long)) {
2742         long val = __Pyx_PyInt_AsLong(x);
2743         if (unlikely(val != (long)(unsigned char)val)) {
2744             if (!unlikely(val == -1 && PyErr_Occurred())) {
2745                 PyErr_SetString(PyExc_OverflowError,
2746                     (is_unsigned && unlikely(val < 0)) ?
2747                     "can't convert negative value to unsigned char" :
2748                     "value too large to convert to unsigned char");
2749             }
2750             return (unsigned char)-1;
2751         }
2752         return (unsigned char)val;
2753     }
2754     return (unsigned char)__Pyx_PyInt_AsUnsignedLong(x);
2755 }
2756
2757 static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject* x) {
2758     const unsigned short neg_one = (unsigned short)-1, const_zero = 0;
2759     const int is_unsigned = neg_one > const_zero;
2760     if (sizeof(unsigned short) < sizeof(long)) {
2761         long val = __Pyx_PyInt_AsLong(x);
2762         if (unlikely(val != (long)(unsigned short)val)) {
2763             if (!unlikely(val == -1 && PyErr_Occurred())) {
2764                 PyErr_SetString(PyExc_OverflowError,
2765                     (is_unsigned && unlikely(val < 0)) ?
2766                     "can't convert negative value to unsigned short" :
2767                     "value too large to convert to unsigned short");
2768             }
2769             return (unsigned short)-1;
2770         }
2771         return (unsigned short)val;
2772     }
2773     return (unsigned short)__Pyx_PyInt_AsUnsignedLong(x);
2774 }
2775
2776 static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject* x) {
2777     const unsigned int neg_one = (unsigned int)-1, const_zero = 0;
2778     const int is_unsigned = neg_one > const_zero;
2779     if (sizeof(unsigned int) < sizeof(long)) {
2780         long val = __Pyx_PyInt_AsLong(x);
2781         if (unlikely(val != (long)(unsigned int)val)) {
2782             if (!unlikely(val == -1 && PyErr_Occurred())) {
2783                 PyErr_SetString(PyExc_OverflowError,
2784                     (is_unsigned && unlikely(val < 0)) ?
2785                     "can't convert negative value to unsigned int" :
2786                     "value too large to convert to unsigned int");
2787             }
2788             return (unsigned int)-1;
2789         }
2790         return (unsigned int)val;
2791     }
2792     return (unsigned int)__Pyx_PyInt_AsUnsignedLong(x);
2793 }
2794
2795 static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject* x) {
2796     const char neg_one = (char)-1, const_zero = 0;
2797     const int is_unsigned = neg_one > const_zero;
2798     if (sizeof(char) < sizeof(long)) {
2799         long val = __Pyx_PyInt_AsLong(x);
2800         if (unlikely(val != (long)(char)val)) {
2801             if (!unlikely(val == -1 && PyErr_Occurred())) {
2802                 PyErr_SetString(PyExc_OverflowError,
2803                     (is_unsigned && unlikely(val < 0)) ?
2804                     "can't convert negative value to char" :
2805                     "value too large to convert to char");
2806             }
2807             return (char)-1;
2808         }
2809         return (char)val;
2810     }
2811     return (char)__Pyx_PyInt_AsLong(x);
2812 }
2813
2814 static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject* x) {
2815     const short neg_one = (short)-1, const_zero = 0;
2816     const int is_unsigned = neg_one > const_zero;
2817     if (sizeof(short) < sizeof(long)) {
2818         long val = __Pyx_PyInt_AsLong(x);
2819         if (unlikely(val != (long)(short)val)) {
2820             if (!unlikely(val == -1 && PyErr_Occurred())) {
2821                 PyErr_SetString(PyExc_OverflowError,
2822                     (is_unsigned && unlikely(val < 0)) ?
2823                     "can't convert negative value to short" :
2824                     "value too large to convert to short");
2825             }
2826             return (short)-1;
2827         }
2828         return (short)val;
2829     }
2830     return (short)__Pyx_PyInt_AsLong(x);
2831 }
2832
2833 static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject* x) {
2834     const int neg_one = (int)-1, const_zero = 0;
2835     const int is_unsigned = neg_one > const_zero;
2836     if (sizeof(int) < sizeof(long)) {
2837         long val = __Pyx_PyInt_AsLong(x);
2838         if (unlikely(val != (long)(int)val)) {
2839             if (!unlikely(val == -1 && PyErr_Occurred())) {
2840                 PyErr_SetString(PyExc_OverflowError,
2841                     (is_unsigned && unlikely(val < 0)) ?
2842                     "can't convert negative value to int" :
2843                     "value too large to convert to int");
2844             }
2845             return (int)-1;
2846         }
2847         return (int)val;
2848     }
2849     return (int)__Pyx_PyInt_AsLong(x);
2850 }
2851
2852 static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject* x) {
2853     const signed char neg_one = (signed char)-1, const_zero = 0;
2854     const int is_unsigned = neg_one > const_zero;
2855     if (sizeof(signed char) < sizeof(long)) {
2856         long val = __Pyx_PyInt_AsLong(x);
2857         if (unlikely(val != (long)(signed char)val)) {
2858             if (!unlikely(val == -1 && PyErr_Occurred())) {
2859                 PyErr_SetString(PyExc_OverflowError,
2860                     (is_unsigned && unlikely(val < 0)) ?
2861                     "can't convert negative value to signed char" :
2862                     "value too large to convert to signed char");
2863             }
2864             return (signed char)-1;
2865         }
2866         return (signed char)val;
2867     }
2868     return (signed char)__Pyx_PyInt_AsSignedLong(x);
2869 }
2870
2871 static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject* x) {
2872     const signed short neg_one = (signed short)-1, const_zero = 0;
2873     const int is_unsigned = neg_one > const_zero;
2874     if (sizeof(signed short) < sizeof(long)) {
2875         long val = __Pyx_PyInt_AsLong(x);
2876         if (unlikely(val != (long)(signed short)val)) {
2877             if (!unlikely(val == -1 && PyErr_Occurred())) {
2878                 PyErr_SetString(PyExc_OverflowError,
2879                     (is_unsigned && unlikely(val < 0)) ?
2880                     "can't convert negative value to signed short" :
2881                     "value too large to convert to signed short");
2882             }
2883             return (signed short)-1;
2884         }
2885         return (signed short)val;
2886     }
2887     return (signed short)__Pyx_PyInt_AsSignedLong(x);
2888 }
2889
2890 static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject* x) {
2891     const signed int neg_one = (signed int)-1, const_zero = 0;
2892     const int is_unsigned = neg_one > const_zero;
2893     if (sizeof(signed int) < sizeof(long)) {
2894         long val = __Pyx_PyInt_AsLong(x);
2895         if (unlikely(val != (long)(signed int)val)) {
2896             if (!unlikely(val == -1 && PyErr_Occurred())) {
2897                 PyErr_SetString(PyExc_OverflowError,
2898                     (is_unsigned && unlikely(val < 0)) ?
2899                     "can't convert negative value to signed int" :
2900                     "value too large to convert to signed int");
2901             }
2902             return (signed int)-1;
2903         }
2904         return (signed int)val;
2905     }
2906     return (signed int)__Pyx_PyInt_AsSignedLong(x);
2907 }
2908
2909 static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject* x) {
2910     const int neg_one = (int)-1, const_zero = 0;
2911     const int is_unsigned = neg_one > const_zero;
2912     if (sizeof(int) < sizeof(long)) {
2913         long val = __Pyx_PyInt_AsLong(x);
2914         if (unlikely(val != (long)(int)val)) {
2915             if (!unlikely(val == -1 && PyErr_Occurred())) {
2916                 PyErr_SetString(PyExc_OverflowError,
2917                     (is_unsigned && unlikely(val < 0)) ?
2918                     "can't convert negative value to int" :
2919                     "value too large to convert to int");
2920             }
2921             return (int)-1;
2922         }
2923         return (int)val;
2924     }
2925     return (int)__Pyx_PyInt_AsLong(x);
2926 }
2927
2928 static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject* x) {
2929     const unsigned long neg_one = (unsigned long)-1, const_zero = 0;
2930     const int is_unsigned = neg_one > const_zero;
2931 #if PY_VERSION_HEX < 0x03000000
2932     if (likely(PyInt_Check(x))) {
2933         long val = PyInt_AS_LONG(x);
2934         if (is_unsigned && unlikely(val < 0)) {
2935             PyErr_SetString(PyExc_OverflowError,
2936                             "can't convert negative value to unsigned long");
2937             return (unsigned long)-1;
2938         }
2939         return (unsigned long)val;
2940     } else
2941 #endif
2942     if (likely(PyLong_Check(x))) {
2943         if (is_unsigned) {
2944             if (unlikely(Py_SIZE(x) < 0)) {
2945                 PyErr_SetString(PyExc_OverflowError,
2946                                 "can't convert negative value to unsigned long");
2947                 return (unsigned long)-1;
2948             }
2949             return (unsigned long)PyLong_AsUnsignedLong(x);
2950         } else {
2951             return (unsigned long)PyLong_AsLong(x);
2952         }
2953     } else {
2954         unsigned long val;
2955         PyObject *tmp = __Pyx_PyNumber_Int(x);
2956         if (!tmp) return (unsigned long)-1;
2957         val = __Pyx_PyInt_AsUnsignedLong(tmp);
2958         Py_DECREF(tmp);
2959         return val;
2960     }
2961 }
2962
2963 static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject* x) {
2964     const unsigned PY_LONG_LONG neg_one = (unsigned PY_LONG_LONG)-1, const_zero = 0;
2965     const int is_unsigned = neg_one > const_zero;
2966 #if PY_VERSION_HEX < 0x03000000
2967     if (likely(PyInt_Check(x))) {
2968         long val = PyInt_AS_LONG(x);
2969         if (is_unsigned && unlikely(val < 0)) {
2970             PyErr_SetString(PyExc_OverflowError,
2971                             "can't convert negative value to unsigned PY_LONG_LONG");
2972             return (unsigned PY_LONG_LONG)-1;
2973         }
2974         return (unsigned PY_LONG_LONG)val;
2975     } else
2976 #endif
2977     if (likely(PyLong_Check(x))) {
2978         if (is_unsigned) {
2979             if (unlikely(Py_SIZE(x) < 0)) {
2980                 PyErr_SetString(PyExc_OverflowError,
2981                                 "can't convert negative value to unsigned PY_LONG_LONG");
2982                 return (unsigned PY_LONG_LONG)-1;
2983             }
2984             return (unsigned PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
2985         } else {
2986             return (unsigned PY_LONG_LONG)PyLong_AsLongLong(x);
2987         }
2988     } else {
2989         unsigned PY_LONG_LONG val;
2990         PyObject *tmp = __Pyx_PyNumber_Int(x);
2991         if (!tmp) return (unsigned PY_LONG_LONG)-1;
2992         val = __Pyx_PyInt_AsUnsignedLongLong(tmp);
2993         Py_DECREF(tmp);
2994         return val;
2995     }
2996 }
2997
2998 static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject* x) {
2999     const long neg_one = (long)-1, const_zero = 0;
3000     const int is_unsigned = neg_one > const_zero;
3001 #if PY_VERSION_HEX < 0x03000000
3002     if (likely(PyInt_Check(x))) {
3003         long val = PyInt_AS_LONG(x);
3004         if (is_unsigned && unlikely(val < 0)) {
3005             PyErr_SetString(PyExc_OverflowError,
3006                             "can't convert negative value to long");
3007             return (long)-1;
3008         }
3009         return (long)val;
3010     } else
3011 #endif
3012     if (likely(PyLong_Check(x))) {
3013         if (is_unsigned) {
3014             if (unlikely(Py_SIZE(x) < 0)) {
3015                 PyErr_SetString(PyExc_OverflowError,
3016                                 "can't convert negative value to long");
3017                 return (long)-1;
3018             }
3019             return (long)PyLong_AsUnsignedLong(x);
3020         } else {
3021             return (long)PyLong_AsLong(x);
3022         }
3023     } else {
3024         long val;
3025         PyObject *tmp = __Pyx_PyNumber_Int(x);
3026         if (!tmp) return (long)-1;
3027         val = __Pyx_PyInt_AsLong(tmp);
3028         Py_DECREF(tmp);
3029         return val;
3030     }
3031 }
3032
3033 static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject* x) {
3034     const PY_LONG_LONG neg_one = (PY_LONG_LONG)-1, const_zero = 0;
3035     const int is_unsigned = neg_one > const_zero;
3036 #if PY_VERSION_HEX < 0x03000000
3037     if (likely(PyInt_Check(x))) {
3038         long val = PyInt_AS_LONG(x);
3039         if (is_unsigned && unlikely(val < 0)) {
3040             PyErr_SetString(PyExc_OverflowError,
3041                             "can't convert negative value to PY_LONG_LONG");
3042             return (PY_LONG_LONG)-1;
3043         }
3044         return (PY_LONG_LONG)val;
3045     } else
3046 #endif
3047     if (likely(PyLong_Check(x))) {
3048         if (is_unsigned) {
3049             if (unlikely(Py_SIZE(x) < 0)) {
3050                 PyErr_SetString(PyExc_OverflowError,
3051                                 "can't convert negative value to PY_LONG_LONG");
3052                 return (PY_LONG_LONG)-1;
3053             }
3054             return (PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
3055         } else {
3056             return (PY_LONG_LONG)PyLong_AsLongLong(x);
3057         }
3058     } else {
3059         PY_LONG_LONG val;
3060         PyObject *tmp = __Pyx_PyNumber_Int(x);
3061         if (!tmp) return (PY_LONG_LONG)-1;
3062         val = __Pyx_PyInt_AsLongLong(tmp);
3063         Py_DECREF(tmp);
3064         return val;
3065     }
3066 }
3067
3068 static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject* x) {
3069     const signed long neg_one = (signed long)-1, const_zero = 0;
3070     const int is_unsigned = neg_one > const_zero;
3071 #if PY_VERSION_HEX < 0x03000000
3072     if (likely(PyInt_Check(x))) {
3073         long val = PyInt_AS_LONG(x);
3074         if (is_unsigned && unlikely(val < 0)) {
3075             PyErr_SetString(PyExc_OverflowError,
3076                             "can't convert negative value to signed long");
3077             return (signed long)-1;
3078         }
3079         return (signed long)val;
3080     } else
3081 #endif
3082     if (likely(PyLong_Check(x))) {
3083         if (is_unsigned) {
3084             if (unlikely(Py_SIZE(x) < 0)) {
3085                 PyErr_SetString(PyExc_OverflowError,
3086                                 "can't convert negative value to signed long");
3087                 return (signed long)-1;
3088             }
3089             return (signed long)PyLong_AsUnsignedLong(x);
3090         } else {
3091             return (signed long)PyLong_AsLong(x);
3092         }
3093     } else {
3094         signed long val;
3095         PyObject *tmp = __Pyx_PyNumber_Int(x);
3096         if (!tmp) return (signed long)-1;
3097         val = __Pyx_PyInt_AsSignedLong(tmp);
3098         Py_DECREF(tmp);
3099         return val;
3100     }
3101 }
3102
3103 static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject* x) {
3104     const signed PY_LONG_LONG neg_one = (signed PY_LONG_LONG)-1, const_zero = 0;
3105     const int is_unsigned = neg_one > const_zero;
3106 #if PY_VERSION_HEX < 0x03000000
3107     if (likely(PyInt_Check(x))) {
3108         long val = PyInt_AS_LONG(x);
3109         if (is_unsigned && unlikely(val < 0)) {
3110             PyErr_SetString(PyExc_OverflowError,
3111                             "can't convert negative value to signed PY_LONG_LONG");
3112             return (signed PY_LONG_LONG)-1;
3113         }
3114         return (signed PY_LONG_LONG)val;
3115     } else
3116 #endif
3117     if (likely(PyLong_Check(x))) {
3118         if (is_unsigned) {
3119             if (unlikely(Py_SIZE(x) < 0)) {
3120                 PyErr_SetString(PyExc_OverflowError,
3121                                 "can't convert negative value to signed PY_LONG_LONG");
3122                 return (signed PY_LONG_LONG)-1;
3123             }
3124             return (signed PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
3125         } else {
3126             return (signed PY_LONG_LONG)PyLong_AsLongLong(x);
3127         }
3128     } else {
3129         signed PY_LONG_LONG val;
3130         PyObject *tmp = __Pyx_PyNumber_Int(x);
3131         if (!tmp) return (signed PY_LONG_LONG)-1;
3132         val = __Pyx_PyInt_AsSignedLongLong(tmp);
3133         Py_DECREF(tmp);
3134         return val;
3135     }
3136 }
3137
3138 static int __Pyx_check_binary_version(void) {
3139     char ctversion[4], rtversion[4];
3140     PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION);
3141     PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion());
3142     if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) {
3143         char message[200];
3144         PyOS_snprintf(message, sizeof(message),
3145                       "compiletime version %s of module '%.100s' "
3146                       "does not match runtime version %s",
3147                       ctversion, __Pyx_MODULE_NAME, rtversion);
3148         #if PY_VERSION_HEX < 0x02050000
3149         return PyErr_Warn(NULL, message);
3150         #else
3151         return PyErr_WarnEx(NULL, message, 1);
3152         #endif
3153     }
3154     return 0;
3155 }
3156
3157 #include "compile.h"
3158 #include "frameobject.h"
3159 #include "traceback.h"
3160
3161 static void __Pyx_AddTraceback(const char *funcname, int __pyx_clineno,
3162                                int __pyx_lineno, const char *__pyx_filename) {
3163     PyObject *py_srcfile = 0;
3164     PyObject *py_funcname = 0;
3165     PyObject *py_globals = 0;
3166     PyCodeObject *py_code = 0;
3167     PyFrameObject *py_frame = 0;
3168
3169     #if PY_MAJOR_VERSION < 3
3170     py_srcfile = PyString_FromString(__pyx_filename);
3171     #else
3172     py_srcfile = PyUnicode_FromString(__pyx_filename);
3173     #endif
3174     if (!py_srcfile) goto bad;
3175     if (__pyx_clineno) {
3176         #if PY_MAJOR_VERSION < 3
3177         py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, __pyx_clineno);
3178         #else
3179         py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, __pyx_clineno);
3180         #endif
3181     }
3182     else {
3183         #if PY_MAJOR_VERSION < 3
3184         py_funcname = PyString_FromString(funcname);
3185         #else
3186         py_funcname = PyUnicode_FromString(funcname);
3187         #endif
3188     }
3189     if (!py_funcname) goto bad;
3190     py_globals = PyModule_GetDict(__pyx_m);
3191     if (!py_globals) goto bad;
3192     py_code = PyCode_New(
3193         0,            /*int argcount,*/
3194         #if PY_MAJOR_VERSION >= 3
3195         0,            /*int kwonlyargcount,*/
3196         #endif
3197         0,            /*int nlocals,*/
3198         0,            /*int stacksize,*/
3199         0,            /*int flags,*/
3200         __pyx_empty_bytes, /*PyObject *code,*/
3201         __pyx_empty_tuple,  /*PyObject *consts,*/
3202         __pyx_empty_tuple,  /*PyObject *names,*/
3203         __pyx_empty_tuple,  /*PyObject *varnames,*/
3204         __pyx_empty_tuple,  /*PyObject *freevars,*/
3205         __pyx_empty_tuple,  /*PyObject *cellvars,*/
3206         py_srcfile,   /*PyObject *filename,*/
3207         py_funcname,  /*PyObject *name,*/
3208         __pyx_lineno,   /*int firstlineno,*/
3209         __pyx_empty_bytes  /*PyObject *lnotab*/
3210     );
3211     if (!py_code) goto bad;
3212     py_frame = PyFrame_New(
3213         PyThreadState_GET(), /*PyThreadState *tstate,*/
3214         py_code,             /*PyCodeObject *code,*/
3215         py_globals,          /*PyObject *globals,*/
3216         0                    /*PyObject *locals*/
3217     );
3218     if (!py_frame) goto bad;
3219     py_frame->f_lineno = __pyx_lineno;
3220     PyTraceBack_Here(py_frame);
3221 bad:
3222     Py_XDECREF(py_srcfile);
3223     Py_XDECREF(py_funcname);
3224     Py_XDECREF(py_code);
3225     Py_XDECREF(py_frame);
3226 }
3227
3228 static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
3229     while (t->p) {
3230         #if PY_MAJOR_VERSION < 3
3231         if (t->is_unicode) {
3232             *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL);
3233         } else if (t->intern) {
3234             *t->p = PyString_InternFromString(t->s);
3235         } else {
3236             *t->p = PyString_FromStringAndSize(t->s, t->n - 1);
3237         }
3238         #else  /* Python 3+ has unicode identifiers */
3239         if (t->is_unicode | t->is_str) {
3240             if (t->intern) {
3241                 *t->p = PyUnicode_InternFromString(t->s);
3242             } else if (t->encoding) {
3243                 *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL);
3244             } else {
3245                 *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1);
3246             }
3247         } else {
3248             *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1);
3249         }
3250         #endif
3251         if (!*t->p)
3252             return -1;
3253         ++t;
3254     }
3255     return 0;
3256 }
3257
3258 /* Type Conversion Functions */
3259
3260 static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {
3261    int is_true = x == Py_True;
3262    if (is_true | (x == Py_False) | (x == Py_None)) return is_true;
3263    else return PyObject_IsTrue(x);
3264 }
3265
3266 static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) {
3267   PyNumberMethods *m;
3268   const char *name = NULL;
3269   PyObject *res = NULL;
3270 #if PY_VERSION_HEX < 0x03000000
3271   if (PyInt_Check(x) || PyLong_Check(x))
3272 #else
3273   if (PyLong_Check(x))
3274 #endif
3275     return Py_INCREF(x), x;
3276   m = Py_TYPE(x)->tp_as_number;
3277 #if PY_VERSION_HEX < 0x03000000
3278   if (m && m->nb_int) {
3279     name = "int";
3280     res = PyNumber_Int(x);
3281   }
3282   else if (m && m->nb_long) {
3283     name = "long";
3284     res = PyNumber_Long(x);
3285   }
3286 #else
3287   if (m && m->nb_int) {
3288     name = "int";
3289     res = PyNumber_Long(x);
3290   }
3291 #endif
3292   if (res) {
3293 #if PY_VERSION_HEX < 0x03000000
3294     if (!PyInt_Check(res) && !PyLong_Check(res)) {
3295 #else
3296     if (!PyLong_Check(res)) {
3297 #endif
3298       PyErr_Format(PyExc_TypeError,
3299                    "__%s__ returned non-%s (type %.200s)",
3300                    name, name, Py_TYPE(res)->tp_name);
3301       Py_DECREF(res);
3302       return NULL;
3303     }
3304   }
3305   else if (!PyErr_Occurred()) {
3306     PyErr_SetString(PyExc_TypeError,
3307                     "an integer is required");
3308   }
3309   return res;
3310 }
3311
3312 static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
3313   Py_ssize_t ival;
3314   PyObject* x = PyNumber_Index(b);
3315   if (!x) return -1;
3316   ival = PyInt_AsSsize_t(x);
3317   Py_DECREF(x);
3318   return ival;
3319 }
3320
3321 static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) {
3322 #if PY_VERSION_HEX < 0x02050000
3323    if (ival <= LONG_MAX)
3324        return PyInt_FromLong((long)ival);
3325    else {
3326        unsigned char *bytes = (unsigned char *) &ival;
3327        int one = 1; int little = (int)*(unsigned char*)&one;
3328        return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0);
3329    }
3330 #else
3331    return PyInt_FromSize_t(ival);
3332 #endif
3333 }
3334
3335 static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject* x) {
3336    unsigned PY_LONG_LONG val = __Pyx_PyInt_AsUnsignedLongLong(x);
3337    if (unlikely(val == (unsigned PY_LONG_LONG)-1 && PyErr_Occurred())) {
3338        return (size_t)-1;
3339    } else if (unlikely(val != (unsigned PY_LONG_LONG)(size_t)val)) {
3340        PyErr_SetString(PyExc_OverflowError,
3341                        "value too large to convert to size_t");
3342        return (size_t)-1;
3343    }
3344    return (size_t)val;
3345 }
3346
3347
3348 #endif /* Py_PYTHON_H */