ozone: evdev: Sync caps lock LED state to evdev
[chromium-blink-merge.git] / third_party / cython / src / Cython / Utility / Printing.c
blob71aa7eafe95d64f82afe719c479e3aac32f0bd6c
1 ////////////////////// Print.proto //////////////////////
2 //@substitute: naming
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
10 ////////////////////// Print.cleanup //////////////////////
11 //@substitute: naming
13 #if CYTHON_COMPILING_IN_PYPY || PY_MAJOR_VERSION >= 3
14 Py_CLEAR($print_function);
15 Py_CLEAR($print_function_kwargs);
16 #endif
18 ////////////////////// Print //////////////////////
19 //@substitute: naming
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");
27 return f;
30 static int __Pyx_Print(PyObject* f, PyObject *arg_tuple, int newline) {
31 int i;
33 if (!f) {
34 if (!(f = __Pyx_GetStdout()))
35 return -1;
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;
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;
62 if (newline) {
63 if (PyFile_WriteString("\n", f) < 0)
64 goto error;
65 PyFile_SoftSpace(f, 0);
67 Py_DECREF(f);
68 return 0;
69 error:
70 Py_DECREF(f);
71 return -1;
74 #else /* Python 3 has a print function */
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;
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;
99 Py_DECREF(end_string);
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;
113 Py_DECREF(end_string);
115 kwargs = $print_function_kwargs;
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;
129 #endif
131 ////////////////////// PrintOne.proto //////////////////////
132 //@requires: Print
134 static int __Pyx_PrintOne(PyObject* stream, PyObject *o); /*proto*/
136 ////////////////////// PrintOne //////////////////////
138 #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION < 3
140 static int __Pyx_PrintOne(PyObject* f, PyObject *o) {
141 if (!f) {
142 if (!(f = __Pyx_GetStdout()))
143 return -1;
145 Py_INCREF(f);
146 if (PyFile_SoftSpace(f, 0)) {
147 if (PyFile_WriteString(" ", f) < 0)
148 goto error;
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);
164 #else /* Python 3 has a print function */
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;
176 #endif