15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// IncludeStringH.proto //////////////////// 35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <string.h> 55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// IncludeCppStringH.proto //////////////////// 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <string> 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// InitStrings.proto //////////////////// 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/ 135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// InitStrings //////////////////// 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) while (t->p) { 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #if PY_MAJOR_VERSION < 3 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (t->is_unicode) { 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else if (t->intern) { 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) *t->p = PyString_InternFromString(t->s); 235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) *t->p = PyString_FromStringAndSize(t->s, t->n - 1); 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #else /* Python 3+ has unicode identifiers */ 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (t->is_unicode | t->is_str) { 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (t->intern) { 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) *t->p = PyUnicode_InternFromString(t->s); 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else if (t->encoding) { 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #endif 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!*t->p) 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return -1; 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ++t; 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return 0; 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// BytesContains.proto //////////////////// 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_BytesContains(PyObject* bytes, char character); /*proto*/ 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// BytesContains //////////////////// 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_BytesContains(PyObject* bytes, char character) { 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const Py_ssize_t length = PyBytes_GET_SIZE(bytes); 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) char* char_start = PyBytes_AS_STRING(bytes); 555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) char* pos; 565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (pos=char_start; pos < char_start+length; pos++) { 575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (character == pos[0]) return 1; 585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return 0; 605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// PyUCS4InUnicode.proto //////////////////// 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_UnicodeContainsUCS4(PyObject* unicode, Py_UCS4 character); /*proto*/ 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_PyUnicodeBufferContainsUCS4(Py_UNICODE* buffer, Py_ssize_t length, Py_UCS4 character); /*proto*/ 675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// PyUCS4InUnicode //////////////////// 695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_UnicodeContainsUCS4(PyObject* unicode, Py_UCS4 character) { 715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_PEP393_ENABLED 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const int kind = PyUnicode_KIND(unicode); 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (likely(kind != PyUnicode_WCHAR_KIND)) { 745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_ssize_t i; 755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const void* udata = PyUnicode_DATA(unicode); 765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const Py_ssize_t length = PyUnicode_GET_LENGTH(unicode); 775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (i=0; i < length; i++) { 785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(character == PyUnicode_READ(kind, udata, i))) return 1; 795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return 0; 815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return __Pyx_PyUnicodeBufferContainsUCS4( 845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyUnicode_AS_UNICODE(unicode), 855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyUnicode_GET_SIZE(unicode), 865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) character); 875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_PyUnicodeBufferContainsUCS4(Py_UNICODE* buffer, Py_ssize_t length, Py_UCS4 character) { 905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_UNICODE uchar; 915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_UNICODE* pos; 925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #if Py_UNICODE_SIZE == 2 935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (character > 65535) { 945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) /* handle surrogate pairs for Py_UNICODE buffers in 16bit Unicode builds */ 955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_UNICODE high_val, low_val; 965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) high_val = (Py_UNICODE) (0xD800 | (((character - 0x10000) >> 10) & ((1<<10)-1))); 975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) low_val = (Py_UNICODE) (0xDC00 | ( (character - 0x10000) & ((1<<10)-1))); 985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (pos=buffer; pos < buffer+length-1; pos++) { 995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(high_val == pos[0]) & unlikely(low_val == pos[1])) return 1; 1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return 0; 1025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #endif 1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) uchar = (Py_UNICODE) character; 1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (pos=buffer; pos < buffer+length; pos++) { 1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(uchar == pos[0])) return 1; 1075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return 0; 1095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// PyUnicodeContains.proto //////////////////// 1135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_PyUnicode_Contains(PyObject* substring, PyObject* text, int eq) { 1155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int result = PyUnicode_Contains(text, substring); 1165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return unlikely(result < 0) ? result : (result == (eq == Py_EQ)); 1175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// StrEquals.proto //////////////////// 1215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: BytesEquals 1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: UnicodeEquals 1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_MAJOR_VERSION >= 3 1255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals 1265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else 1275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals 1285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 1295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// UnicodeEquals.proto //////////////////// 1325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); /*proto*/ 1345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// UnicodeEquals //////////////////// 1365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: BytesEquals 1375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { 1395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_COMPILING_IN_PYPY 1405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return PyObject_RichCompareBool(s1, s2, equals); 1415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else 1425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_MAJOR_VERSION < 3 1435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject* owned_ref = NULL; 1445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 1455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int s1_is_unicode, s2_is_unicode; 1465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (s1 == s2) { 1475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) /* as done by PyObject_RichCompareBool(); also catches the (interned) empty string */ 1485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) goto return_eq; 1495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) s1_is_unicode = PyUnicode_CheckExact(s1); 1515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) s2_is_unicode = PyUnicode_CheckExact(s2); 1525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_MAJOR_VERSION < 3 1535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { 1545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) owned_ref = PyUnicode_FromObject(s2); 1555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(!owned_ref)) 1565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return -1; 1575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) s2 = owned_ref; 1585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) s2_is_unicode = 1; 1595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { 1605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) owned_ref = PyUnicode_FromObject(s1); 1615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(!owned_ref)) 1625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return -1; 1635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) s1 = owned_ref; 1645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) s1_is_unicode = 1; 1655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else if (((!s2_is_unicode) & (!s1_is_unicode))) { 1665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return __Pyx_PyBytes_Equals(s1, s2, equals); 1675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 1695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (s1_is_unicode & s2_is_unicode) { 1705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_ssize_t length; 1715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int kind; 1725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void *data1, *data2; 1735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #if CYTHON_PEP393_ENABLED 1745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(PyUnicode_READY(s1) < 0) || unlikely(PyUnicode_READY(s2) < 0)) 1755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return -1; 1765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #endif 1775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) length = __Pyx_PyUnicode_GET_LENGTH(s1); 1785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { 1795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) goto return_ne; 1805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // len(s1) == len(s2) >= 1 (empty string is interned, and "s1 is not s2") 1825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) kind = __Pyx_PyUnicode_KIND(s1); 1835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (kind != __Pyx_PyUnicode_KIND(s2)) { 1845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) goto return_ne; 1855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) data1 = __Pyx_PyUnicode_DATA(s1); 1875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) data2 = __Pyx_PyUnicode_DATA(s2); 1885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { 1895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) goto return_ne; 1905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else if (length == 1) { 1915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) goto return_eq; 1925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 1935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int result = memcmp(data1, data2, (size_t)(length * kind)); 1945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #if PY_MAJOR_VERSION < 3 1955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_XDECREF(owned_ref); 1965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #endif 1975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return (equals == Py_EQ) ? (result == 0) : (result != 0); 1985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else if ((s1 == Py_None) & s2_is_unicode) { 2005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) goto return_ne; 2015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else if ((s2 == Py_None) & s1_is_unicode) { 2025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) goto return_ne; 2035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 2045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int result; 2055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject* py_result = PyObject_RichCompare(s1, s2, equals); 2065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!py_result) 2075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return -1; 2085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) result = __Pyx_PyObject_IsTrue(py_result); 2095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_DECREF(py_result); 2105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return result; 2115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 2125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)return_eq: 2135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #if PY_MAJOR_VERSION < 3 2145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_XDECREF(owned_ref); 2155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #endif 2165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return (equals == Py_EQ); 2175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)return_ne: 2185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #if PY_MAJOR_VERSION < 3 2195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_XDECREF(owned_ref); 2205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #endif 2215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return (equals == Py_NE); 2225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 2235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 2245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// BytesEquals.proto //////////////////// 2275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); /*proto*/ 2295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// BytesEquals //////////////////// 2315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: IncludeStringH 2325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { 2345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_COMPILING_IN_PYPY 2355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return PyObject_RichCompareBool(s1, s2, equals); 2365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else 2375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (s1 == s2) { 2385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) /* as done by PyObject_RichCompareBool(); also catches the (interned) empty string */ 2395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return (equals == Py_EQ); 2405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { 2415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const char *ps1, *ps2; 2425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_ssize_t length = PyBytes_GET_SIZE(s1); 2435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (length != PyBytes_GET_SIZE(s2)) 2445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return (equals == Py_NE); 2455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // len(s1) == len(s2) >= 1 (empty string is interned, and "s1 is not s2") 2465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ps1 = PyBytes_AS_STRING(s1); 2475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ps2 = PyBytes_AS_STRING(s2); 2485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (ps1[0] != ps2[0]) { 2495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return (equals == Py_NE); 2505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else if (length == 1) { 2515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return (equals == Py_EQ); 2525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 2535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int result = memcmp(ps1, ps2, (size_t)length); 2545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return (equals == Py_EQ) ? (result == 0) : (result != 0); 2555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 2565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { 2575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return (equals == Py_NE); 2585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { 2595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return (equals == Py_NE); 2605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 2615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int result; 2625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject* py_result = PyObject_RichCompare(s1, s2, equals); 2635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!py_result) 2645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return -1; 2655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) result = __Pyx_PyObject_IsTrue(py_result); 2665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_DECREF(py_result); 2675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return result; 2685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 2695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 2705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 2715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// GetItemIntByteArray.proto //////////////////// 2735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_GetItemInt_ByteArray(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \ 2755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \ 2765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) __Pyx_GetItemInt_ByteArray_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) : \ 2775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) (PyErr_SetString(PyExc_IndexError, "bytearray index out of range"), -1)) 2785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_GetItemInt_ByteArray_Fast(PyObject* string, Py_ssize_t i, 2805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int wraparound, int boundscheck); 2815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// GetItemIntByteArray //////////////////// 2835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_GetItemInt_ByteArray_Fast(PyObject* string, Py_ssize_t i, 2855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int wraparound, int boundscheck) { 2865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_ssize_t length; 2875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (wraparound | boundscheck) { 2885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) length = PyByteArray_GET_SIZE(string); 2895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (wraparound & unlikely(i < 0)) i += length; 2905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if ((!boundscheck) || likely((0 <= i) & (i < length))) { 2915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return (unsigned char) (PyByteArray_AS_STRING(string)[i]); 2925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 2935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyErr_SetString(PyExc_IndexError, "bytearray index out of range"); 2945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return -1; 2955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 2965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 2975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return (unsigned char) (PyByteArray_AS_STRING(string)[i]); 2985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 2995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 3005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// SetItemIntByteArray.proto //////////////////// 3035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_SetItemInt_ByteArray(o, i, v, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \ 3055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \ 3065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) __Pyx_SetItemInt_ByteArray_Fast(o, (Py_ssize_t)i, v, wraparound, boundscheck) : \ 3075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) (PyErr_SetString(PyExc_IndexError, "bytearray index out of range"), -1)) 3085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_SetItemInt_ByteArray_Fast(PyObject* string, Py_ssize_t i, unsigned char v, 3105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int wraparound, int boundscheck); 3115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// SetItemIntByteArray //////////////////// 3135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_SetItemInt_ByteArray_Fast(PyObject* string, Py_ssize_t i, unsigned char v, 3155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int wraparound, int boundscheck) { 3165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_ssize_t length; 3175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (wraparound | boundscheck) { 3185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) length = PyByteArray_GET_SIZE(string); 3195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (wraparound & unlikely(i < 0)) i += length; 3205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if ((!boundscheck) || likely((0 <= i) & (i < length))) { 3215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyByteArray_AS_STRING(string)[i] = (char) v; 3225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return 0; 3235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 3245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyErr_SetString(PyExc_IndexError, "bytearray index out of range"); 3255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return -1; 3265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 3275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 3285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyByteArray_AS_STRING(string)[i] = (char) v; 3295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return 0; 3305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 3315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 3325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// GetItemIntUnicode.proto //////////////////// 3355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_GetItemInt_Unicode(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \ 3375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \ 3385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) __Pyx_GetItemInt_Unicode_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) : \ 3395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) (PyErr_SetString(PyExc_IndexError, "string index out of range"), (Py_UCS4)-1)) 3405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE Py_UCS4 __Pyx_GetItemInt_Unicode_Fast(PyObject* ustring, Py_ssize_t i, 3425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int wraparound, int boundscheck); 3435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// GetItemIntUnicode //////////////////// 3455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE Py_UCS4 __Pyx_GetItemInt_Unicode_Fast(PyObject* ustring, Py_ssize_t i, 3475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int wraparound, int boundscheck) { 3485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_ssize_t length; 3495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_PEP393_ENABLED 3505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(__Pyx_PyUnicode_READY(ustring) < 0)) return (Py_UCS4)-1; 3515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 3525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (wraparound | boundscheck) { 3535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) length = __Pyx_PyUnicode_GET_LENGTH(ustring); 3545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (wraparound & unlikely(i < 0)) i += length; 3555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if ((!boundscheck) || likely((0 <= i) & (i < length))) { 3565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return __Pyx_PyUnicode_READ_CHAR(ustring, i); 3575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 3585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyErr_SetString(PyExc_IndexError, "string index out of range"); 3595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return (Py_UCS4)-1; 3605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 3615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 3625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return __Pyx_PyUnicode_READ_CHAR(ustring, i); 3635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 3645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 3655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// decode_cpp_string.proto /////////////// 3685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: IncludeCppStringH 3695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: decode_c_bytes 3705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject* __Pyx_decode_cpp_string( 3725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::string cppstring, Py_ssize_t start, Py_ssize_t stop, 3735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const char* encoding, const char* errors, 3745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)) { 3755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return __Pyx_decode_c_bytes( 3765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) cppstring.data(), cppstring.size(), start, stop, encoding, errors, decode_func); 3775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 3785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// decode_c_string.proto /////////////// 3805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject* __Pyx_decode_c_string( 3825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const char* cstring, Py_ssize_t start, Py_ssize_t stop, 3835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const char* encoding, const char* errors, 3845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)); 3855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// decode_c_string /////////////// 3875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: IncludeStringH 3885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/* duplicate code to avoid calling strlen() if start >= 0 and stop >= 0 */ 3905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject* __Pyx_decode_c_string( 3925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const char* cstring, Py_ssize_t start, Py_ssize_t stop, 3935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const char* encoding, const char* errors, 3945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)) { 3955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_ssize_t length; 3965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely((start < 0) | (stop < 0))) { 3975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) length = strlen(cstring); 3985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (start < 0) { 3995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) start += length; 4005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (start < 0) 4015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) start = 0; 4025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 4035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (stop < 0) 4045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) stop += length; 4055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 4065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) length = stop - start; 4075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(length <= 0)) 4085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return PyUnicode_FromUnicode(NULL, 0); 4095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) cstring += start; 4105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (decode_func) { 4115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return decode_func(cstring, length, errors); 4125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 4135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return PyUnicode_Decode(cstring, length, encoding, errors); 4145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 4155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 4165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// decode_c_bytes.proto /////////////// 4185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject* __Pyx_decode_c_bytes( 4205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const char* cstring, Py_ssize_t length, Py_ssize_t start, Py_ssize_t stop, 4215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const char* encoding, const char* errors, 4225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)); 4235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// decode_c_bytes /////////////// 4255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject* __Pyx_decode_c_bytes( 4275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const char* cstring, Py_ssize_t length, Py_ssize_t start, Py_ssize_t stop, 4285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const char* encoding, const char* errors, 4295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)) { 4305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely((start < 0) | (stop < 0))) { 4315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (start < 0) { 4325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) start += length; 4335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (start < 0) 4345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) start = 0; 4355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 4365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (stop < 0) 4375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) stop += length; 4385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 4395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (stop > length) 4405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) stop = length; 4415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) length = stop - start; 4425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(length <= 0)) 4435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return PyUnicode_FromUnicode(NULL, 0); 4445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) cstring += start; 4455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (decode_func) { 4465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return decode_func(cstring, length, errors); 4475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 4485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return PyUnicode_Decode(cstring, length, encoding, errors); 4495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 4505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 4515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// decode_bytes.proto /////////////// 4535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: decode_c_bytes 4545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject* __Pyx_decode_bytes( 4565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject* string, Py_ssize_t start, Py_ssize_t stop, 4575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const char* encoding, const char* errors, 4585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)) { 4595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return __Pyx_decode_c_bytes( 4605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyBytes_AS_STRING(string), PyBytes_GET_SIZE(string), 4615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) start, stop, encoding, errors, decode_func); 4625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 4635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// decode_bytearray.proto /////////////// 4655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: decode_c_bytes 4665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject* __Pyx_decode_bytearray( 4685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject* string, Py_ssize_t start, Py_ssize_t stop, 4695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const char* encoding, const char* errors, 4705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)) { 4715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return __Pyx_decode_c_bytes( 4725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyByteArray_AS_STRING(string), PyByteArray_GET_SIZE(string), 4735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) start, stop, encoding, errors, decode_func); 4745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 4755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// PyUnicode_Substring.proto /////////////// 4775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject* __Pyx_PyUnicode_Substring( 4795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject* text, Py_ssize_t start, Py_ssize_t stop); 4805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// PyUnicode_Substring /////////////// 4825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject* __Pyx_PyUnicode_Substring( 4845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject* text, Py_ssize_t start, Py_ssize_t stop) { 4855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_ssize_t length; 4865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_PEP393_ENABLED 4875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(PyUnicode_READY(text) == -1)) return NULL; 4885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) length = PyUnicode_GET_LENGTH(text); 4895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else 4905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) length = PyUnicode_GET_SIZE(text); 4915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 4925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (start < 0) { 4935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) start += length; 4945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (start < 0) 4955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) start = 0; 4965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 4975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (stop < 0) 4985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) stop += length; 4995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) else if (stop > length) 5005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) stop = length; 5015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) length = stop - start; 5025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (length <= 0) 5035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return PyUnicode_FromUnicode(NULL, 0); 5045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_PEP393_ENABLED 5055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return PyUnicode_FromKindAndData(PyUnicode_KIND(text), 5065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyUnicode_1BYTE_DATA(text) + start*PyUnicode_KIND(text), stop-start); 5075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else 5085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return PyUnicode_FromUnicode(PyUnicode_AS_UNICODE(text)+start, stop-start); 5095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 5105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 5115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// py_unicode_istitle.proto /////////////// 5145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Py_UNICODE_ISTITLE() doesn't match unicode.istitle() as the latter 5165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// additionally allows character that comply with Py_UNICODE_ISUPPER() 5175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_VERSION_HEX < 0x030200A2 5195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_Py_UNICODE_ISTITLE(Py_UNICODE uchar) 5205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else 5215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_Py_UNICODE_ISTITLE(Py_UCS4 uchar) 5225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 5235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){ 5245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return Py_UNICODE_ISTITLE(uchar) || Py_UNICODE_ISUPPER(uchar); 5255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 5265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// unicode_tailmatch.proto /////////////// 5295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Python's unicode.startswith() and unicode.endswith() support a 5315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// tuple of prefixes/suffixes, whereas it's much more common to 5325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// test for a single unicode string. 5335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int __Pyx_PyUnicode_Tailmatch(PyObject* s, PyObject* substr, 5355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_ssize_t start, Py_ssize_t end, int direction) { 5365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(PyTuple_Check(substr))) { 5375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_ssize_t i, count = PyTuple_GET_SIZE(substr); 5385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (i = 0; i < count; i++) { 5395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int result; 5405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_COMPILING_IN_CPYTHON 5415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) result = PyUnicode_Tailmatch(s, PyTuple_GET_ITEM(substr, i), 5425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) start, end, direction); 5435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else 5445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject* sub = PySequence_GetItem(substr, i); 5455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(!sub)) return -1; 5465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) result = PyUnicode_Tailmatch(s, sub, start, end, direction); 5475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_DECREF(sub); 5485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 5495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (result) { 5505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return result; 5515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 5525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 5535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return 0; 5545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 5555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return PyUnicode_Tailmatch(s, substr, start, end, direction); 5565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 5575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// bytes_tailmatch.proto /////////////// 5605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int __Pyx_PyBytes_SingleTailmatch(PyObject* self, PyObject* arg, Py_ssize_t start, 5625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_ssize_t end, int direction) 5635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){ 5645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const char* self_ptr = PyBytes_AS_STRING(self); 5655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_ssize_t self_len = PyBytes_GET_SIZE(self); 5665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const char* sub_ptr; 5675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_ssize_t sub_len; 5685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int retval; 5695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_VERSION_HEX >= 0x02060000 5715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_buffer view; 5725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) view.obj = NULL; 5735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 5745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if ( PyBytes_Check(arg) ) { 5765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) sub_ptr = PyBytes_AS_STRING(arg); 5775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) sub_len = PyBytes_GET_SIZE(arg); 5785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 5795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_MAJOR_VERSION < 3 5805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Python 2.x allows mixing unicode and str 5815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) else if ( PyUnicode_Check(arg) ) { 5825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return PyUnicode_Tailmatch(self, arg, start, end, direction); 5835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 5845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 5855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) else { 5865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_VERSION_HEX < 0x02060000 5875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(PyObject_AsCharBuffer(arg, &sub_ptr, &sub_len))) 5885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return -1; 5895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else 5905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(PyObject_GetBuffer(self, &view, PyBUF_SIMPLE) == -1)) 5915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return -1; 5925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) sub_ptr = (const char*) view.buf; 5935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) sub_len = view.len; 5945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 5955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 5965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (end > self_len) 5985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) end = self_len; 5995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) else if (end < 0) 6005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) end += self_len; 6015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (end < 0) 6025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) end = 0; 6035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (start < 0) 6045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) start += self_len; 6055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (start < 0) 6065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) start = 0; 6075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (direction > 0) { 6095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) /* endswith */ 6105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (end-sub_len > start) 6115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) start = end - sub_len; 6125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 6135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (start + sub_len <= end) 6155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) retval = !memcmp(self_ptr+start, sub_ptr, (size_t)sub_len); 6165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) else 6175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) retval = 0; 6185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_VERSION_HEX >= 0x02060000 6205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (view.obj) 6215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyBuffer_Release(&view); 6225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 6235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return retval; 6255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 6265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int __Pyx_PyBytes_Tailmatch(PyObject* self, PyObject* substr, Py_ssize_t start, 6285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_ssize_t end, int direction) 6295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){ 6305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(PyTuple_Check(substr))) { 6315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_ssize_t i, count = PyTuple_GET_SIZE(substr); 6325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (i = 0; i < count; i++) { 6335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int result; 6345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_COMPILING_IN_CPYTHON 6355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) result = __Pyx_PyBytes_SingleTailmatch(self, PyTuple_GET_ITEM(substr, i), 6365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) start, end, direction); 6375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else 6385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject* sub = PySequence_GetItem(substr, i); 6395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(!sub)) return -1; 6405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) result = __Pyx_PyBytes_SingleTailmatch(self, sub, start, end, direction); 6415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_DECREF(sub); 6425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 6435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (result) { 6445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return result; 6455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 6465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 6475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return 0; 6485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 6495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return __Pyx_PyBytes_SingleTailmatch(self, substr, start, end, direction); 6515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 6525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// str_tailmatch.proto /////////////// 6555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_PyStr_Tailmatch(PyObject* self, PyObject* arg, Py_ssize_t start, 6575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_ssize_t end, int direction); 6585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// str_tailmatch /////////////// 6605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: bytes_tailmatch 6615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: unicode_tailmatch 6625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_PyStr_Tailmatch(PyObject* self, PyObject* arg, Py_ssize_t start, 6645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_ssize_t end, int direction) 6655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){ 6665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // We do not use a C compiler macro here to avoid "unused function" 6675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // warnings for the *_Tailmatch() function that is not being used in 6685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // the specific CPython version. The C compiler will generate the same 6695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // code anyway, and will usually just remove the unused function. 6705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (PY_MAJOR_VERSION < 3) 6715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return __Pyx_PyBytes_Tailmatch(self, arg, start, end, direction); 6725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) else 6735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return __Pyx_PyUnicode_Tailmatch(self, arg, start, end, direction); 6745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 6755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// bytes_index.proto /////////////// 6785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE char __Pyx_PyBytes_GetItemInt(PyObject* bytes, Py_ssize_t index, int check_bounds) { 6805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (check_bounds) { 6815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_ssize_t size = PyBytes_GET_SIZE(bytes); 6825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(index >= size) | ((index < 0) & unlikely(index < -size))) { 6835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyErr_SetString(PyExc_IndexError, "string index out of range"); 6845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return -1; 6855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 6865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 6875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (index < 0) 6885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) index += PyBytes_GET_SIZE(bytes); 6895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return PyBytes_AS_STRING(bytes)[index]; 6905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 6915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// StringJoin.proto //////////////////// 6945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_MAJOR_VERSION < 3 6965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_PyString_Join __Pyx_PyBytes_Join 6975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_PyBaseString_Join(s, v) (PyUnicode_CheckExact(s) ? PyUnicode_Join(s, v) : __Pyx_PyBytes_Join(s, v)) 6985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else 6995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_PyString_Join PyUnicode_Join 7005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_PyBaseString_Join PyUnicode_Join 7015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 7025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_COMPILING_IN_CPYTHON 7045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #if PY_MAJOR_VERSION < 3 7055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #define __Pyx_PyBytes_Join _PyString_Join 7065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #else 7075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #define __Pyx_PyBytes_Join _PyBytes_Join 7085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #endif 7095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else 7105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject* __Pyx_PyBytes_Join(PyObject* sep, PyObject* values); /*proto*/ 7115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 7125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// StringJoin //////////////////// 7155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if !CYTHON_COMPILING_IN_CPYTHON 7175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject* __Pyx_PyBytes_Join(PyObject* sep, PyObject* values) { 7185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return PyObject_CallMethodObjArgs(sep, PYIDENT("join"), values, NULL); 7195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 7205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 7215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// ByteArrayAppendObject.proto //////////////////// 7245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_PyByteArray_AppendObject(PyObject* bytearray, PyObject* value); 7265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// ByteArrayAppendObject //////////////////// 7285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: ByteArrayAppend 7295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_PyByteArray_AppendObject(PyObject* bytearray, PyObject* value) { 7315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_ssize_t ival; 7325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_MAJOR_VERSION < 3 7335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(PyString_Check(value))) { 7345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(PyString_GET_SIZE(value) != 1)) { 7355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyErr_SetString(PyExc_ValueError, "string must be of size 1"); 7365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return -1; 7375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 7385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ival = (unsigned char) (PyString_AS_STRING(value)[0]); 7395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else 7405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 7415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) { 7425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // CPython calls PyNumber_Index() internally 7435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ival = __Pyx_PyIndex_AsSsize_t(value); 7445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely((ival < 0) | (ival > 255))) { 7455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (ival == -1 && PyErr_Occurred()) 7465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return -1; 7475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyErr_SetString(PyExc_ValueError, "byte must be in range(0, 256)"); 7485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return -1; 7495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 7505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 7515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return __Pyx_PyByteArray_Append(bytearray, ival); 7525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 7535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// ByteArrayAppend.proto //////////////////// 7555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_PyByteArray_Append(PyObject* bytearray, int value); 7575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// ByteArrayAppend //////////////////// 7595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: ObjectHandling.c::PyObjectCallMethod 7605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_PyByteArray_Append(PyObject* bytearray, int value) { 7625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject *pyval, *retval; 7635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_COMPILING_IN_CPYTHON 7645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (likely((value >= 0) & (value <= 255))) { 7655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_ssize_t n = Py_SIZE(bytearray); 7665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (likely(n != PY_SSIZE_T_MAX)) { 7675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(PyByteArray_Resize(bytearray, n + 1) < 0)) 7685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return -1; 7695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyByteArray_AS_STRING(bytearray)[n] = value; 7705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return 0; 7715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 7725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 7735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyErr_SetString(PyExc_ValueError, "byte must be in range(0, 256)"); 7745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return -1; 7755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 7765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 7775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) pyval = PyInt_FromLong(value); 7785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(!pyval)) 7795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return -1; 7805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) retval = __Pyx_PyObject_CallMethod1(bytearray, PYIDENT("append"), pyval); 7815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_DECREF(pyval); 7825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(!retval)) 7835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return -1; 7845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_DECREF(retval); 7855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return 0; 7865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 787