annotate configmix/_py_helper.h @ 654:0d6673d06c2c

Add support for using "tomllib" (in Python's stdlib since 3.11) and "tomli" TOML packages. They are preferred if they are found to be installed. But note that the declared dependency for the "toml" extra nevertheless is the "toml" package. Because it is available for all supported Python versions. So use Python 3.11+ or install "tomli" manually if you want to use the alternate packages.
author Franz Glasner <fzglas.hg@dom66.de>
date Thu, 19 May 2022 22:10:59 +0200
parents f454889e41fa
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
559
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1 /* -*- coding: utf-8 -*- */
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2 /*
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3 * Some Python helper for C.
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4 *
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5 * Also contains some interesting backports from later Python versions.
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6 *
593
f454889e41fa Adjust copyright year (the end) to 2022
Franz Glasner <fzglas.hg@dom66.de>
parents: 563
diff changeset
7 * :Copyright: (c) 2021-2022, Franz Glasner. All rights reserved.
559
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8 * :License: BSD-3-Clause. See LICENSE.txt for details.
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9 */
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11 #if !defined(_PY_HELPER_H_d9df407295df4884a88e56699f6c6d8d)
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12 #define _PY_HELPER_H_d9df407295df4884a88e56699f6c6d8d
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14 #if PY_VERSION_HEX < 0x030A0000
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15
560
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
16 /*
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
17 * Return a new owned reference to an object
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
18 */
559
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19 static inline
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20 PyObject *
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21 Py_NewRef(PyObject *obj)
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22 {
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23 Py_INCREF(obj);
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24 return obj;
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25 }
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
26
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
27
560
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
28 /*
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
29 * Return a new owned reference to an object when the input can be NULL
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
30 */
559
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
31 static inline
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
32 PyObject *
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
33 Py_XNewRef(PyObject *obj)
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
34 {
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
35 Py_XINCREF(obj);
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
36 return obj;
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
37 }
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
38
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
39 #endif /* PY_VERSION_HEX < 0x030A0000 */
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
40
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
41
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
42 static inline
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
43 void
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
44 py_clear_ref(PyObject **obj)
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
45 {
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
46 PyObject *tmp;
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
47
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
48 if ((tmp = *obj) != NULL) {
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
49 *obj = NULL;
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
50 Py_DECREF(tmp);
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
51 }
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
52 }
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
53
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
54
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
55 /*
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
56 * NOTE: This implementation is valid for CPython only!
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
57 */
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
58 static inline
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
59 int
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
60 py_object_is(PyObject *obj1, PyObject *obj2)
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
61 {
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
62 return (obj1 == obj2);
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
63 }
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
64
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
65
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
66 /*
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
67 * NOTE: This implementation is valid for CPython only!
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
68 */
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
69 static inline
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
70 int
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
71 py_object_isnot(PyObject *obj1, PyObject *obj2)
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
72 {
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
73 return (obj1 != obj2);
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
74 }
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
75
560
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
76
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
77 /**
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
78 * Copy from source to destination and make an owned reference.
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
79 * Also safely clear the destination before.
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
80 */
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
81 static inline
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
82 void
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
83 py_assign(PyObject **dest, PyObject *src)
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
84 {
563
2c211934d4b0 Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents: 562
diff changeset
85 Py_DECREF(*dest);
2c211934d4b0 Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents: 562
diff changeset
86 *dest = Py_NewRef(src);
2c211934d4b0 Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents: 562
diff changeset
87 }
2c211934d4b0 Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents: 562
diff changeset
88
2c211934d4b0 Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents: 562
diff changeset
89
2c211934d4b0 Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents: 562
diff changeset
90 /**
2c211934d4b0 Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents: 562
diff changeset
91 * Copy from source to destination and make an owned reference.
2c211934d4b0 Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents: 562
diff changeset
92 * Also clear the destination before.
2c211934d4b0 Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents: 562
diff changeset
93 */
2c211934d4b0 Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents: 562
diff changeset
94 static inline
2c211934d4b0 Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents: 562
diff changeset
95 void
2c211934d4b0 Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents: 562
diff changeset
96 py_x_assign(PyObject **dest, PyObject *src)
2c211934d4b0 Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents: 562
diff changeset
97 {
560
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
98 Py_XDECREF(*dest);
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
99 *dest = Py_NewRef(src);
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
100 }
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
101
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
102
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
103 /**
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
104 * Copy from source to destination and make an owned reference.
563
2c211934d4b0 Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents: 562
diff changeset
105 * Also clear the destination before. The source object may be NULL.
2c211934d4b0 Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents: 562
diff changeset
106 */
2c211934d4b0 Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents: 562
diff changeset
107 static inline
2c211934d4b0 Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents: 562
diff changeset
108 void
2c211934d4b0 Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents: 562
diff changeset
109 py_assign_x(PyObject **dest, PyObject *src)
2c211934d4b0 Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents: 562
diff changeset
110 {
2c211934d4b0 Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents: 562
diff changeset
111 Py_DECREF(*dest);
2c211934d4b0 Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents: 562
diff changeset
112 *dest = Py_XNewRef(src);
2c211934d4b0 Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents: 562
diff changeset
113 }
2c211934d4b0 Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents: 562
diff changeset
114
2c211934d4b0 Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents: 562
diff changeset
115
2c211934d4b0 Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents: 562
diff changeset
116 /**
2c211934d4b0 Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents: 562
diff changeset
117 * Copy from source to destination and make an owned reference.
560
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
118 * Also safely clear the destination before. The source object may be NULL.
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
119 */
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
120 static inline
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
121 void
563
2c211934d4b0 Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents: 562
diff changeset
122 py_x_assign_x(PyObject **dest, PyObject *src)
560
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
123 {
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
124 Py_XDECREF(*dest);
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
125 *dest = Py_XNewRef(src);
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
126 }
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
127
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
128
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
129 /*
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
130 * Transfer from a borrowed reference to an owned one and clear the source.
562
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
131 * Also clear the destination before.
560
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
132 */
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
133 static inline
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
134 void
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
135 py_transfer_borrowed(PyObject **dest, PyObject **src)
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
136 {
562
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
137 Py_DECREF(*dest);
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
138 *dest = Py_NewRef(*src);
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
139 *src = NULL;
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
140 }
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
141
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
142
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
143 /*
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
144 * Transfer from a borrowed reference to an owned one and clear the source.
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
145 * Also safely clear the destination before.
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
146 */
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
147 static inline
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
148 void
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
149 py_x_transfer_borrowed(PyObject **dest, PyObject **src)
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
150 {
560
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
151 Py_XDECREF(*dest);
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
152 *dest = Py_NewRef(*src);
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
153 *src = NULL;
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
154 }
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
155
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
156
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
157 /*
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
158 * Transfer from a borrowed reference to an owned one and clear the source.
562
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
159 * Also clear the destination before. The source object may be NULL.
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
160 */
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
161 static inline
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
162 void
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
163 py_transfer_x_borrowed(PyObject **dest, PyObject **src)
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
164 {
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
165 Py_DECREF(*dest);
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
166 *dest = Py_XNewRef(*src);
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
167 *src = NULL;
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
168 }
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
169
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
170
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
171 /*
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
172 * Transfer from a borrowed reference to an owned one and clear the source.
560
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
173 * Also safely clear the destination before. The source object may be NULL.
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
174 */
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
175 static inline
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
176 void
562
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
177 py_x_transfer_x_borrowed(PyObject **dest, PyObject **src)
560
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
178 {
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
179 Py_XDECREF(*dest);
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
180 *dest = Py_XNewRef(*src);
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
181 *src = NULL;
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
182 }
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
183
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
184
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
185 /*
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
186 * Transfer ownership from a owned reference to an owned one and clear the
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
187 * source.
562
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
188 * Also clear the destination before.
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
189 */
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
190 static inline
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
191 void
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
192 py_transfer_owned(PyObject **dest, PyObject **src)
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
193 {
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
194 Py_DECREF(*dest);
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
195 *dest = *src;
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
196 *src = NULL;
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
197 }
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
198
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
199
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
200 /*
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
201 * Transfer ownership from a owned reference to an owned one and clear the
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
202 * source.
560
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
203 * Also safely clear the destination before.
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
204 */
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
205 static inline
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
206 void
562
f75c5b13a1d7 FIX: Memory-leak
Franz Glasner <fzglas.hg@dom66.de>
parents: 560
diff changeset
207 py_x_transfer_owned(PyObject **dest, PyObject **src)
560
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
208 {
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
209 Py_XDECREF(*dest);
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
210 *dest = *src;
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
211 *src = NULL;
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
212 }
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
213
81238ea2dbe3 Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 559
diff changeset
214
559
bb160a1e67d7 A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
215 #endif