OLD | NEW |
(Empty) | |
| 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_strin
g) < 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 |
OLD | NEW |