1 ////////////////////// Print.proto ////////////////////// 2 //@substitute: naming 3 4 static int __Pyx_Print(PyObject*, PyObject *, int); /*proto*/ 5 #if CYTHON_COMPILING_IN_PYPY || PY_MAJOR_VERSION >= 3 6 static PyObject* $print_function = 0; 7 static PyObject* $print_function_kwargs = 0; 8 #endif 9 10 ////////////////////// Print.cleanup ////////////////////// 11 //@substitute: naming 12 13 #if CYTHON_COMPILING_IN_PYPY || PY_MAJOR_VERSION >= 3 14 Py_CLEAR($print_function); 15 Py_CLEAR($print_function_kwargs); 16 #endif 17 18 ////////////////////// Print ////////////////////// 19 //@substitute: naming 20 21 #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION < 3 22 static PyObject *__Pyx_GetStdout(void) { 23 PyObject *f = PySys_GetObject((char *)"stdout"); 24 if (!f) { 25 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout"); 26 } 27 return f; 28 } 29 30 static int __Pyx_Print(PyObject* f, PyObject *arg_tuple, int newline) { 31 int i; 32 33 if (!f) { 34 if (!(f = __Pyx_GetStdout())) 35 return -1; 36 } 37 Py_INCREF(f); 38 for (i=0; i < PyTuple_GET_SIZE(arg_tuple); i++) { 39 PyObject* v; 40 if (PyFile_SoftSpace(f, 1)) { 41 if (PyFile_WriteString(" ", f) < 0) 42 goto error; 43 } 44 v = PyTuple_GET_ITEM(arg_tuple, i); 45 if (PyFile_WriteObject(v, f, Py_PRINT_RAW) < 0) 46 goto error; 47 if (PyString_Check(v)) { 48 char *s = PyString_AsString(v); 49 Py_ssize_t len = PyString_Size(v); 50 if (len > 0) { 51 // append soft-space if necessary (not using isspace() due to C/C++ problem on MacOS-X) 52 switch (s[len-1]) { 53 case ' ': break; 54 case '\f': case '\r': case '\n': case '\t': case '\v': 55 PyFile_SoftSpace(f, 0); 56 break; 57 default: break; 58 } 59 } 60 } 61 } 62 if (newline) { 63 if (PyFile_WriteString("\n", f) < 0) 64 goto error; 65 PyFile_SoftSpace(f, 0); 66 } 67 Py_DECREF(f); 68 return 0; 69 error: 70 Py_DECREF(f); 71 return -1; 72 } 73 74 #else /* Python 3 has a print function */ 75 76 static int __Pyx_Print(PyObject* stream, PyObject *arg_tuple, int newline) { 77 PyObject* kwargs = 0; 78 PyObject* result = 0; 79 PyObject* end_string; 80 if (unlikely(!$print_function)) { 81 $print_function = PyObject_GetAttr($builtins_cname, PYIDENT("print")); 82 if (!$print_function) 83 return -1; 84 } 85 if (stream) { 86 kwargs = PyDict_New(); 87 if (unlikely(!kwargs)) 88 return -1; 89 if (unlikely(PyDict_SetItem(kwargs, PYIDENT("file"), stream) < 0)) 90 goto bad; 91 if (!newline) { 92 end_string = PyUnicode_FromStringAndSize(" ", 1); 93 if (unlikely(!end_string)) 94 goto bad; 95 if (PyDict_SetItem(kwargs, PYIDENT("end"), end_string) < 0) { 96 Py_DECREF(end_string); 97 goto bad; 98 } 99 Py_DECREF(end_string); 100 } 101 } else if (!newline) { 102 if (unlikely(!$print_function_kwargs)) { 103 $print_function_kwargs = PyDict_New(); 104 if (unlikely(!$print_function_kwargs)) 105 return -1; 106 end_string = PyUnicode_FromStringAndSize(" ", 1); 107 if (unlikely(!end_string)) 108 return -1; 109 if (PyDict_SetItem($print_function_kwargs, PYIDENT("end"), end_string) < 0) { 110 Py_DECREF(end_string); 111 return -1; 112 } 113 Py_DECREF(end_string); 114 } 115 kwargs = $print_function_kwargs; 116 } 117 result = PyObject_Call($print_function, arg_tuple, kwargs); 118 if (unlikely(kwargs) && (kwargs != $print_function_kwargs)) 119 Py_DECREF(kwargs); 120 if (!result) 121 return -1; 122 Py_DECREF(result); 123 return 0; 124 bad: 125 if (kwargs != $print_function_kwargs) 126 Py_XDECREF(kwargs); 127 return -1; 128 } 129 #endif 130 131 ////////////////////// PrintOne.proto ////////////////////// 132 //@requires: Print 133 134 static int __Pyx_PrintOne(PyObject* stream, PyObject *o); /*proto*/ 135 136 ////////////////////// PrintOne ////////////////////// 137 138 #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION < 3 139 140 static int __Pyx_PrintOne(PyObject* f, PyObject *o) { 141 if (!f) { 142 if (!(f = __Pyx_GetStdout())) 143 return -1; 144 } 145 Py_INCREF(f); 146 if (PyFile_SoftSpace(f, 0)) { 147 if (PyFile_WriteString(" ", f) < 0) 148 goto error; 149 } 150 if (PyFile_WriteObject(o, f, Py_PRINT_RAW) < 0) 151 goto error; 152 if (PyFile_WriteString("\n", f) < 0) 153 goto error; 154 Py_DECREF(f); 155 return 0; 156 error: 157 Py_DECREF(f); 158 return -1; 159 /* the line below is just to avoid C compiler 160 * warnings about unused functions */ 161 return __Pyx_Print(f, NULL, 0); 162 } 163 164 #else /* Python 3 has a print function */ 165 166 static int __Pyx_PrintOne(PyObject* stream, PyObject *o) { 167 int res; 168 PyObject* arg_tuple = PyTuple_Pack(1, o); 169 if (unlikely(!arg_tuple)) 170 return -1; 171 res = __Pyx_Print(stream, arg_tuple, 1); 172 Py_DECREF(arg_tuple); 173 return res; 174 } 175 176 #endif 177