Mercurial > cpython-lru_cache-weakref
annotate Modules/_elementtree.c @ 81343:3a7cd8efc19f
#16852: merge with 3.3.
| author | Ezio Melotti <ezio.melotti@gmail.com> |
|---|---|
| date | Thu, 10 Jan 2013 03:29:45 +0200 |
| parents | c1fc6b6d1cfc |
| children | 8d6dadfecf22 |
| rev | line source |
|---|---|
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1 /* |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2 * ElementTree |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3 * $Id: _elementtree.c 3473 2009-01-11 22:53:55Z fredrik $ |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
4 * |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
5 * elementtree accelerator |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
6 * |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
7 * History: |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
8 * 1999-06-20 fl created (as part of sgmlop) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
9 * 2001-05-29 fl effdom edition |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
10 * 2003-02-27 fl elementtree edition (alpha) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
11 * 2004-06-03 fl updates for elementtree 1.2 |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
12 * 2005-01-05 fl major optimization effort |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
13 * 2005-01-11 fl first public release (cElementTree 0.8) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
14 * 2005-01-12 fl split element object into base and extras |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
15 * 2005-01-13 fl use tagged pointers for tail/text (cElementTree 0.9) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
16 * 2005-01-17 fl added treebuilder close method |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
17 * 2005-01-17 fl fixed crash in getchildren |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
18 * 2005-01-18 fl removed observer api, added iterparse (cElementTree 0.9.3) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
19 * 2005-01-23 fl revised iterparse api; added namespace event support (0.9.8) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
20 * 2005-01-26 fl added VERSION module property (cElementTree 1.0) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
21 * 2005-01-28 fl added remove method (1.0.1) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
22 * 2005-03-01 fl added iselement function; fixed makeelement aliasing (1.0.2) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
23 * 2005-03-13 fl export Comment and ProcessingInstruction/PI helpers |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
24 * 2005-03-26 fl added Comment and PI support to XMLParser |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
25 * 2005-03-27 fl event optimizations; complain about bogus events |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
26 * 2005-08-08 fl fixed read error handling in parse |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
27 * 2005-08-11 fl added runtime test for copy workaround (1.0.3) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
28 * 2005-12-13 fl added expat_capi support (for xml.etree) (1.0.4) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
29 * 2005-12-16 fl added support for non-standard encodings |
|
36954
db5e720b0cef
merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents:
36684
diff
changeset
|
30 * 2006-03-08 fl fixed a couple of potential null-refs and leaks |
|
db5e720b0cef
merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents:
36684
diff
changeset
|
31 * 2006-03-12 fl merge in 2.5 ssize_t changes |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
32 * 2007-08-25 fl call custom builder's close method from XMLParser |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
33 * 2007-08-31 fl added iter, extend from ET 1.3 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
34 * 2007-09-01 fl fixed ParseError exception, setslice source type, etc |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
35 * 2007-09-03 fl fixed handling of negative insert indexes |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
36 * 2007-09-04 fl added itertext from ET 1.3 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
37 * 2007-09-06 fl added position attribute to ParseError exception |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
38 * 2008-06-06 fl delay error reporting in iterparse (from Hrvoje Niksic) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
39 * |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
40 * Copyright (c) 1999-2009 by Secret Labs AB. All rights reserved. |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
41 * Copyright (c) 1999-2009 by Fredrik Lundh. |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
42 * |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
43 * info@pythonware.com |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
44 * http://www.pythonware.com |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
45 */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
46 |
|
36051
9b897fb7ac6a
updating to cElementTree 1.0.5 (step 3 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
36050
diff
changeset
|
47 /* Licensed to PSF under a Contributor Agreement. */ |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
48 /* See http://www.python.org/psf/license for licensing details. */ |
|
36051
9b897fb7ac6a
updating to cElementTree 1.0.5 (step 3 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
36050
diff
changeset
|
49 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
50 #include "Python.h" |
|
76098
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
51 #include "structmember.h" |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
52 |
|
39610
3674f20ac781
Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents:
39442
diff
changeset
|
53 #define VERSION "1.0.6" |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
54 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
55 /* -------------------------------------------------------------------- */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
56 /* configuration */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
57 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
58 /* Leave defined to include the expat-based XMLParser type */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
59 #define USE_EXPAT |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
60 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
61 /* An element can hold this many children without extra memory |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
62 allocations. */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
63 #define STATIC_CHILDREN 4 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
64 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
65 /* For best performance, chose a value so that 80-90% of all nodes |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
66 have no more than the given number of children. Set this to zero |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
67 to minimize the size of the element structure itself (this only |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
68 helps if you have lots of leaf nodes with attributes). */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
69 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
70 /* Also note that pymalloc always allocates blocks in multiples of |
|
74903
65fc79fb4eb2
Issue #13988: cElementTree is deprecated and the _elementtree accelerator is automatically used whenever available.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
74870
diff
changeset
|
71 eight bytes. For the current C version of ElementTree, this means |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
72 that the number of children should be an even number, at least on |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
73 32-bit platforms. */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
74 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
75 /* -------------------------------------------------------------------- */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
76 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
77 #if 0 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
78 static int memory = 0; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
79 #define ALLOC(size, comment)\ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
80 do { memory += size; printf("%8d - %s\n", memory, comment); } while (0) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
81 #define RELEASE(size, comment)\ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
82 do { memory -= size; printf("%8d - %s\n", memory, comment); } while (0) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
83 #else |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
84 #define ALLOC(size, comment) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
85 #define RELEASE(size, comment) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
86 #endif |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
87 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
88 /* compiler tweaks */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
89 #if defined(_MSC_VER) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
90 #define LOCAL(type) static __inline type __fastcall |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
91 #else |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
92 #define LOCAL(type) static type |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
93 #endif |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
94 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
95 /* macros used to store 'join' flags in string object pointers. note |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
96 that all use of text and tail as object pointers must be wrapped in |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
97 JOIN_OBJ. see comments in the ElementObject definition for more |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
98 info. */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
99 #define JOIN_GET(p) ((Py_uintptr_t) (p) & 1) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
100 #define JOIN_SET(p, flag) ((void*) ((Py_uintptr_t) (JOIN_OBJ(p)) | (flag))) |
|
79065
99112b851b25
Issue #15144: Fix possible integer overflow when handling pointers as integer values, by using Py_uintptr_t instead of size_t.
Antoine Pitrou <solipsis@pitrou.net>
parents:
78221
diff
changeset
|
101 #define JOIN_OBJ(p) ((PyObject*) ((Py_uintptr_t) (p) & ~(Py_uintptr_t)1)) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
102 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
103 /* glue functions (see the init function for details) */ |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
104 static PyObject* elementtree_parseerror_obj; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
105 static PyObject* elementtree_deepcopy_obj; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
106 static PyObject* elementpath_obj; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
107 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
108 /* helpers */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
109 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
110 LOCAL(PyObject*) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
111 deepcopy(PyObject* object, PyObject* memo) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
112 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
113 /* do a deep copy of the given object */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
114 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
115 PyObject* args; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
116 PyObject* result; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
117 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
118 if (!elementtree_deepcopy_obj) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
119 PyErr_SetString( |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
120 PyExc_RuntimeError, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
121 "deepcopy helper not found" |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
122 ); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
123 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
124 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
125 |
|
79385
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
126 args = PyTuple_Pack(2, object, memo); |
|
36954
db5e720b0cef
merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents:
36684
diff
changeset
|
127 if (!args) |
|
db5e720b0cef
merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents:
36684
diff
changeset
|
128 return NULL; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
129 result = PyObject_CallObject(elementtree_deepcopy_obj, args); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
130 Py_DECREF(args); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
131 return result; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
132 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
133 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
134 LOCAL(PyObject*) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
135 list_join(PyObject* list) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
136 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
137 /* join list elements (destroying the list in the process) */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
138 PyObject* joiner; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
139 PyObject* result; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
140 |
|
79385
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
141 joiner = PyUnicode_FromStringAndSize("", 0); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
142 if (!joiner) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
143 return NULL; |
|
79385
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
144 result = PyUnicode_Join(joiner, list); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
145 Py_DECREF(joiner); |
|
79385
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
146 if (result) |
|
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
147 Py_DECREF(list); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
148 return result; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
149 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
150 |
|
77246
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
151 /* Is the given object an empty dictionary? |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
152 */ |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
153 static int |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
154 is_empty_dict(PyObject *obj) |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
155 { |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
156 return PyDict_CheckExact(obj) && PyDict_Size(obj) == 0; |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
157 } |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
158 |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
159 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
160 /* -------------------------------------------------------------------- */ |
|
75379
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
161 /* the Element type */ |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
162 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
163 typedef struct { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
164 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
165 /* attributes (a dictionary object), or None if no attributes */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
166 PyObject* attrib; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
167 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
168 /* child elements */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
169 int length; /* actual number of items */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
170 int allocated; /* allocated items */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
171 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
172 /* this either points to _children or to a malloced buffer */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
173 PyObject* *children; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
174 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
175 PyObject* _children[STATIC_CHILDREN]; |
|
68804
d0fe7489c4cc
_elementtree.c: remove trailing spaces
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66799
diff
changeset
|
176 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
177 } ElementObjectExtra; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
178 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
179 typedef struct { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
180 PyObject_HEAD |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
181 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
182 /* element tag (a string). */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
183 PyObject* tag; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
184 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
185 /* text before first child. note that this is a tagged pointer; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
186 use JOIN_OBJ to get the object pointer. the join flag is used |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
187 to distinguish lists created by the tree builder from lists |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
188 assigned to the attribute by application code; the former |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
189 should be joined before being returned to the user, the latter |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
190 should be left intact. */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
191 PyObject* text; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
192 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
193 /* text after this element, in parent. note that this is a tagged |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
194 pointer; use JOIN_OBJ to get the object pointer. */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
195 PyObject* tail; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
196 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
197 ElementObjectExtra* extra; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
198 |
|
76098
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
199 PyObject *weakreflist; /* For tp_weaklistoffset */ |
|
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
200 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
201 } ElementObject; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
202 |
|
37144
91dd4d44d3bc
Finish getting rid of statichere/staticforward
Neal Norwitz <nnorwitz@gmail.com>
parents:
36954
diff
changeset
|
203 static PyTypeObject Element_Type; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
204 |
|
44351
86a2679dca46
#1629: Renamed Py_Size, Py_Type and Py_Refcnt to Py_SIZE, Py_TYPE and Py_REFCNT.
Christian Heimes <christian@cheimes.de>
parents:
44099
diff
changeset
|
205 #define Element_CheckExact(op) (Py_TYPE(op) == &Element_Type) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
206 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
207 /* -------------------------------------------------------------------- */ |
|
75379
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
208 /* Element constructors and destructor */ |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
209 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
210 LOCAL(int) |
|
75379
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
211 create_extra(ElementObject* self, PyObject* attrib) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
212 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
213 self->extra = PyObject_Malloc(sizeof(ElementObjectExtra)); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
214 if (!self->extra) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
215 return -1; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
216 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
217 if (!attrib) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
218 attrib = Py_None; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
219 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
220 Py_INCREF(attrib); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
221 self->extra->attrib = attrib; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
222 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
223 self->extra->length = 0; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
224 self->extra->allocated = STATIC_CHILDREN; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
225 self->extra->children = self->extra->_children; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
226 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
227 return 0; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
228 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
229 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
230 LOCAL(void) |
|
75379
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
231 dealloc_extra(ElementObject* self) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
232 { |
|
76101
118729090dc5
Fix Windows compilation errors
Eli Bendersky <eliben@gmail.com>
parents:
76098
diff
changeset
|
233 ElementObjectExtra *myextra; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
234 int i; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
235 |
|
76098
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
236 if (!self->extra) |
|
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
237 return; |
|
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
238 |
|
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
239 /* Avoid DECREFs calling into this code again (cycles, etc.) |
|
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
240 */ |
|
76101
118729090dc5
Fix Windows compilation errors
Eli Bendersky <eliben@gmail.com>
parents:
76098
diff
changeset
|
241 myextra = self->extra; |
|
76098
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
242 self->extra = NULL; |
|
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
243 |
|
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
244 Py_DECREF(myextra->attrib); |
|
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
245 |
|
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
246 for (i = 0; i < myextra->length; i++) |
|
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
247 Py_DECREF(myextra->children[i]); |
|
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
248 |
|
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
249 if (myextra->children != myextra->_children) |
|
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
250 PyObject_Free(myextra->children); |
|
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
251 |
|
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
252 PyObject_Free(myextra); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
253 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
254 |
|
75379
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
255 /* Convenience internal function to create new Element objects with the given |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
256 * tag and attributes. |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
257 */ |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
258 LOCAL(PyObject*) |
|
75379
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
259 create_new_element(PyObject* tag, PyObject* attrib) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
260 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
261 ElementObject* self; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
262 |
|
75997
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
263 self = PyObject_GC_New(ElementObject, &Element_Type); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
264 if (self == NULL) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
265 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
266 self->extra = NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
267 |
|
77246
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
268 if (attrib != Py_None && !is_empty_dict(attrib)) { |
|
75379
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
269 if (create_extra(self, attrib) < 0) { |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37144
diff
changeset
|
270 PyObject_Del(self); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
271 return NULL; |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
272 } |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
273 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
274 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
275 Py_INCREF(tag); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
276 self->tag = tag; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
277 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
278 Py_INCREF(Py_None); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
279 self->text = Py_None; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
280 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
281 Py_INCREF(Py_None); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
282 self->tail = Py_None; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
283 |
|
76098
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
284 self->weakreflist = NULL; |
|
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
285 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
286 ALLOC(sizeof(ElementObject), "create element"); |
|
75997
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
287 PyObject_GC_Track(self); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
288 return (PyObject*) self; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
289 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
290 |
|
75379
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
291 static PyObject * |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
292 element_new(PyTypeObject *type, PyObject *args, PyObject *kwds) |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
293 { |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
294 ElementObject *e = (ElementObject *)type->tp_alloc(type, 0); |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
295 if (e != NULL) { |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
296 Py_INCREF(Py_None); |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
297 e->tag = Py_None; |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
298 |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
299 Py_INCREF(Py_None); |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
300 e->text = Py_None; |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
301 |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
302 Py_INCREF(Py_None); |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
303 e->tail = Py_None; |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
304 |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
305 e->extra = NULL; |
|
76098
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
306 e->weakreflist = NULL; |
|
75379
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
307 } |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
308 return (PyObject *)e; |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
309 } |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
310 |
|
77217
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
311 /* Helper function for extracting the attrib dictionary from a keywords dict. |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
312 * This is required by some constructors/functions in this module that can |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
313 * either accept attrib as a keyword argument or all attributes splashed |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
314 * directly into *kwds. |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
315 * If there is no 'attrib' keyword, return an empty dict. |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
316 */ |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
317 static PyObject* |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
318 get_attrib_from_keywords(PyObject *kwds) |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
319 { |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
320 PyObject *attrib_str = PyUnicode_FromString("attrib"); |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
321 PyObject *attrib = PyDict_GetItem(kwds, attrib_str); |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
322 |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
323 if (attrib) { |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
324 /* If attrib was found in kwds, copy its value and remove it from |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
325 * kwds |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
326 */ |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
327 if (!PyDict_Check(attrib)) { |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
328 Py_DECREF(attrib_str); |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
329 PyErr_Format(PyExc_TypeError, "attrib must be dict, not %.100s", |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
330 Py_TYPE(attrib)->tp_name); |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
331 return NULL; |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
332 } |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
333 attrib = PyDict_Copy(attrib); |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
334 PyDict_DelItem(kwds, attrib_str); |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
335 } else { |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
336 attrib = PyDict_New(); |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
337 } |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
338 |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
339 Py_DECREF(attrib_str); |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
340 |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
341 if (attrib) |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
342 PyDict_Update(attrib, kwds); |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
343 return attrib; |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
344 } |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
345 |
|
75379
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
346 static int |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
347 element_init(PyObject *self, PyObject *args, PyObject *kwds) |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
348 { |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
349 PyObject *tag; |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
350 PyObject *tmp; |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
351 PyObject *attrib = NULL; |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
352 ElementObject *self_elem; |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
353 |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
354 if (!PyArg_ParseTuple(args, "O|O!:Element", &tag, &PyDict_Type, &attrib)) |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
355 return -1; |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
356 |
|
77217
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
357 if (attrib) { |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
358 /* attrib passed as positional arg */ |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
359 attrib = PyDict_Copy(attrib); |
|
75379
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
360 if (!attrib) |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
361 return -1; |
|
77217
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
362 if (kwds) { |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
363 if (PyDict_Update(attrib, kwds) < 0) { |
|
79385
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
364 Py_DECREF(attrib); |
|
77217
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
365 return -1; |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
366 } |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
367 } |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
368 } else if (kwds) { |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
369 /* have keywords args */ |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
370 attrib = get_attrib_from_keywords(kwds); |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
371 if (!attrib) |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
372 return -1; |
|
75379
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
373 } |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
374 |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
375 self_elem = (ElementObject *)self; |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
376 |
|
79385
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
377 if (attrib != NULL && !is_empty_dict(attrib)) { |
|
75379
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
378 if (create_extra(self_elem, attrib) < 0) { |
|
79385
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
379 Py_DECREF(attrib); |
|
75379
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
380 return -1; |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
381 } |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
382 } |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
383 |
|
77246
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
384 /* We own a reference to attrib here and it's no longer needed. */ |
|
79385
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
385 Py_XDECREF(attrib); |
|
75379
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
386 |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
387 /* Replace the objects already pointed to by tag, text and tail. */ |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
388 tmp = self_elem->tag; |
|
79385
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
389 Py_INCREF(tag); |
|
75379
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
390 self_elem->tag = tag; |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
391 Py_DECREF(tmp); |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
392 |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
393 tmp = self_elem->text; |
|
79385
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
394 Py_INCREF(Py_None); |
|
75379
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
395 self_elem->text = Py_None; |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
396 Py_DECREF(JOIN_OBJ(tmp)); |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
397 |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
398 tmp = self_elem->tail; |
|
79385
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
399 Py_INCREF(Py_None); |
|
75379
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
400 self_elem->tail = Py_None; |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
401 Py_DECREF(JOIN_OBJ(tmp)); |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
402 |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
403 return 0; |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
404 } |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
405 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
406 LOCAL(int) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
407 element_resize(ElementObject* self, int extra) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
408 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
409 int size; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
410 PyObject* *children; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
411 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
412 /* make sure self->children can hold the given number of extra |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
413 elements. set an exception and return -1 if allocation failed */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
414 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
415 if (!self->extra) |
|
75379
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
416 create_extra(self, NULL); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
417 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
418 size = self->extra->length + extra; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
419 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
420 if (size > self->extra->allocated) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
421 /* use Python 2.4's list growth strategy */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
422 size = (size >> 3) + (size < 9 ? 3 : 6) + size; |
|
44742
14d4104976fc
Merged revisions 59985-60000,60002,60005-60007,60009-60042 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44351
diff
changeset
|
423 /* Coverity CID #182 size_error: Allocating 1 bytes to pointer "children" |
|
68804
d0fe7489c4cc
_elementtree.c: remove trailing spaces
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66799
diff
changeset
|
424 * which needs at least 4 bytes. |
|
d0fe7489c4cc
_elementtree.c: remove trailing spaces
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66799
diff
changeset
|
425 * Although it's a false alarm always assume at least one child to |
|
44742
14d4104976fc
Merged revisions 59985-60000,60002,60005-60007,60009-60042 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44351
diff
changeset
|
426 * be safe. |
|
14d4104976fc
Merged revisions 59985-60000,60002,60005-60007,60009-60042 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44351
diff
changeset
|
427 */ |
|
14d4104976fc
Merged revisions 59985-60000,60002,60005-60007,60009-60042 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44351
diff
changeset
|
428 size = size ? size : 1; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
429 if (self->extra->children != self->extra->_children) { |
|
44742
14d4104976fc
Merged revisions 59985-60000,60002,60005-60007,60009-60042 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44351
diff
changeset
|
430 /* Coverity CID #182 size_error: Allocating 1 bytes to pointer |
|
68804
d0fe7489c4cc
_elementtree.c: remove trailing spaces
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66799
diff
changeset
|
431 * "children", which needs at least 4 bytes. Although it's a |
|
44742
14d4104976fc
Merged revisions 59985-60000,60002,60005-60007,60009-60042 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44351
diff
changeset
|
432 * false alarm always assume at least one child to be safe. |
|
14d4104976fc
Merged revisions 59985-60000,60002,60005-60007,60009-60042 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44351
diff
changeset
|
433 */ |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
434 children = PyObject_Realloc(self->extra->children, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
435 size * sizeof(PyObject*)); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
436 if (!children) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
437 goto nomemory; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
438 } else { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
439 children = PyObject_Malloc(size * sizeof(PyObject*)); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
440 if (!children) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
441 goto nomemory; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
442 /* copy existing children from static area to malloc buffer */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
443 memcpy(children, self->extra->children, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
444 self->extra->length * sizeof(PyObject*)); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
445 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
446 self->extra->children = children; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
447 self->extra->allocated = size; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
448 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
449 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
450 return 0; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
451 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
452 nomemory: |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
453 PyErr_NoMemory(); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
454 return -1; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
455 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
456 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
457 LOCAL(int) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
458 element_add_subelement(ElementObject* self, PyObject* element) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
459 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
460 /* add a child element to a parent */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
461 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
462 if (element_resize(self, 1) < 0) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
463 return -1; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
464 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
465 Py_INCREF(element); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
466 self->extra->children[self->extra->length] = element; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
467 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
468 self->extra->length++; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
469 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
470 return 0; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
471 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
472 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
473 LOCAL(PyObject*) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
474 element_get_attrib(ElementObject* self) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
475 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
476 /* return borrowed reference to attrib dictionary */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
477 /* note: this function assumes that the extra section exists */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
478 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
479 PyObject* res = self->extra->attrib; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
480 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
481 if (res == Py_None) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
482 /* create missing dictionary */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
483 res = PyDict_New(); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
484 if (!res) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
485 return NULL; |
|
79385
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
486 Py_DECREF(Py_None); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
487 self->extra->attrib = res; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
488 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
489 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
490 return res; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
491 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
492 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
493 LOCAL(PyObject*) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
494 element_get_text(ElementObject* self) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
495 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
496 /* return borrowed reference to text attribute */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
497 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
498 PyObject* res = self->text; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
499 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
500 if (JOIN_GET(res)) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
501 res = JOIN_OBJ(res); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
502 if (PyList_CheckExact(res)) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
503 res = list_join(res); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
504 if (!res) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
505 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
506 self->text = res; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
507 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
508 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
509 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
510 return res; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
511 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
512 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
513 LOCAL(PyObject*) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
514 element_get_tail(ElementObject* self) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
515 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
516 /* return borrowed reference to text attribute */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
517 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
518 PyObject* res = self->tail; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
519 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
520 if (JOIN_GET(res)) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
521 res = JOIN_OBJ(res); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
522 if (PyList_CheckExact(res)) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
523 res = list_join(res); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
524 if (!res) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
525 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
526 self->tail = res; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
527 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
528 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
529 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
530 return res; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
531 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
532 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
533 static PyObject* |
|
77217
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
534 subelement(PyObject *self, PyObject *args, PyObject *kwds) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
535 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
536 PyObject* elem; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
537 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
538 ElementObject* parent; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
539 PyObject* tag; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
540 PyObject* attrib = NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
541 if (!PyArg_ParseTuple(args, "O!O|O!:SubElement", |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
542 &Element_Type, &parent, &tag, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
543 &PyDict_Type, &attrib)) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
544 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
545 |
|
77217
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
546 if (attrib) { |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
547 /* attrib passed as positional arg */ |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
548 attrib = PyDict_Copy(attrib); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
549 if (!attrib) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
550 return NULL; |
|
77217
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
551 if (kwds) { |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
552 if (PyDict_Update(attrib, kwds) < 0) { |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
553 return NULL; |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
554 } |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
555 } |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
556 } else if (kwds) { |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
557 /* have keyword args */ |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
558 attrib = get_attrib_from_keywords(kwds); |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
559 if (!attrib) |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
560 return NULL; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
561 } else { |
|
77217
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
562 /* no attrib arg, no kwds, so no attribute */ |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
563 Py_INCREF(Py_None); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
564 attrib = Py_None; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
565 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
566 |
|
75379
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
567 elem = create_new_element(tag, attrib); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
568 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
569 Py_DECREF(attrib); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
570 |
|
36954
db5e720b0cef
merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents:
36684
diff
changeset
|
571 if (element_add_subelement(parent, elem) < 0) { |
|
db5e720b0cef
merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents:
36684
diff
changeset
|
572 Py_DECREF(elem); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
573 return NULL; |
|
36954
db5e720b0cef
merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents:
36684
diff
changeset
|
574 } |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
575 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
576 return elem; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
577 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
578 |
|
75997
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
579 static int |
|
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
580 element_gc_traverse(ElementObject *self, visitproc visit, void *arg) |
|
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
581 { |
|
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
582 Py_VISIT(self->tag); |
|
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
583 Py_VISIT(JOIN_OBJ(self->text)); |
|
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
584 Py_VISIT(JOIN_OBJ(self->tail)); |
|
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
585 |
|
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
586 if (self->extra) { |
|
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
587 int i; |
|
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
588 Py_VISIT(self->extra->attrib); |
|
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
589 |
|
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
590 for (i = 0; i < self->extra->length; ++i) |
|
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
591 Py_VISIT(self->extra->children[i]); |
|
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
592 } |
|
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
593 return 0; |
|
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
594 } |
|
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
595 |
|
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
596 static int |
|
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
597 element_gc_clear(ElementObject *self) |
|
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
598 { |
|
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
599 Py_CLEAR(self->tag); |
|
76098
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
600 |
|
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
601 /* The following is like Py_CLEAR for self->text and self->tail, but |
|
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
602 * written explicitily because the real pointers hide behind access |
|
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
603 * macros. |
|
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
604 */ |
|
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
605 if (self->text) { |
|
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
606 PyObject *tmp = JOIN_OBJ(self->text); |
|
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
607 self->text = NULL; |
|
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
608 Py_DECREF(tmp); |
|
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
609 } |
|
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
610 |
|
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
611 if (self->tail) { |
|
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
612 PyObject *tmp = JOIN_OBJ(self->tail); |
|
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
613 self->tail = NULL; |
|
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
614 Py_DECREF(tmp); |
|
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
615 } |
|
75997
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
616 |
|
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
617 /* After dropping all references from extra, it's no longer valid anyway, |
|
76098
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
618 * so fully deallocate it. |
|
75997
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
619 */ |
|
76098
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
620 dealloc_extra(self); |
|
75997
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
621 return 0; |
|
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
622 } |
|
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
623 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
624 static void |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
625 element_dealloc(ElementObject* self) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
626 { |
|
75997
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
627 PyObject_GC_UnTrack(self); |
|
76098
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
628 |
|
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
629 if (self->weakreflist != NULL) |
|
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
630 PyObject_ClearWeakRefs((PyObject *) self); |
|
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
631 |
|
75997
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
632 /* element_gc_clear clears all references and deallocates extra |
|
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
633 */ |
|
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
634 element_gc_clear(self); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
635 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
636 RELEASE(sizeof(ElementObject), "destroy element"); |
|
75379
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
637 Py_TYPE(self)->tp_free((PyObject *)self); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
638 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
639 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
640 /* -------------------------------------------------------------------- */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
641 /* methods (in alphabetical order) */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
642 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
643 static PyObject* |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
644 element_append(ElementObject* self, PyObject* args) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
645 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
646 PyObject* element; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
647 if (!PyArg_ParseTuple(args, "O!:append", &Element_Type, &element)) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
648 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
649 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
650 if (element_add_subelement(self, element) < 0) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
651 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
652 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
653 Py_RETURN_NONE; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
654 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
655 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
656 static PyObject* |
|
75997
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
657 element_clearmethod(ElementObject* self, PyObject* args) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
658 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
659 if (!PyArg_ParseTuple(args, ":clear")) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
660 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
661 |
|
76098
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
662 dealloc_extra(self); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
663 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
664 Py_INCREF(Py_None); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
665 Py_DECREF(JOIN_OBJ(self->text)); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
666 self->text = Py_None; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
667 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
668 Py_INCREF(Py_None); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
669 Py_DECREF(JOIN_OBJ(self->tail)); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
670 self->tail = Py_None; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
671 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
672 Py_RETURN_NONE; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
673 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
674 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
675 static PyObject* |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
676 element_copy(ElementObject* self, PyObject* args) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
677 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
678 int i; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
679 ElementObject* element; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
680 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
681 if (!PyArg_ParseTuple(args, ":__copy__")) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
682 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
683 |
|
75379
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
684 element = (ElementObject*) create_new_element( |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
685 self->tag, (self->extra) ? self->extra->attrib : Py_None |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
686 ); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
687 if (!element) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
688 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
689 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
690 Py_DECREF(JOIN_OBJ(element->text)); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
691 element->text = self->text; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
692 Py_INCREF(JOIN_OBJ(element->text)); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
693 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
694 Py_DECREF(JOIN_OBJ(element->tail)); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
695 element->tail = self->tail; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
696 Py_INCREF(JOIN_OBJ(element->tail)); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
697 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
698 if (self->extra) { |
|
68804
d0fe7489c4cc
_elementtree.c: remove trailing spaces
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66799
diff
changeset
|
699 |
|
36954
db5e720b0cef
merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents:
36684
diff
changeset
|
700 if (element_resize(element, self->extra->length) < 0) { |
|
db5e720b0cef
merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents:
36684
diff
changeset
|
701 Py_DECREF(element); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
702 return NULL; |
|
36954
db5e720b0cef
merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents:
36684
diff
changeset
|
703 } |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
704 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
705 for (i = 0; i < self->extra->length; i++) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
706 Py_INCREF(self->extra->children[i]); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
707 element->extra->children[i] = self->extra->children[i]; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
708 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
709 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
710 element->extra->length = self->extra->length; |
|
68804
d0fe7489c4cc
_elementtree.c: remove trailing spaces
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66799
diff
changeset
|
711 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
712 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
713 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
714 return (PyObject*) element; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
715 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
716 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
717 static PyObject* |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
718 element_deepcopy(ElementObject* self, PyObject* args) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
719 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
720 int i; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
721 ElementObject* element; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
722 PyObject* tag; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
723 PyObject* attrib; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
724 PyObject* text; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
725 PyObject* tail; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
726 PyObject* id; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
727 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
728 PyObject* memo; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
729 if (!PyArg_ParseTuple(args, "O:__deepcopy__", &memo)) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
730 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
731 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
732 tag = deepcopy(self->tag, memo); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
733 if (!tag) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
734 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
735 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
736 if (self->extra) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
737 attrib = deepcopy(self->extra->attrib, memo); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
738 if (!attrib) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
739 Py_DECREF(tag); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
740 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
741 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
742 } else { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
743 Py_INCREF(Py_None); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
744 attrib = Py_None; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
745 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
746 |
|
75379
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
747 element = (ElementObject*) create_new_element(tag, attrib); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
748 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
749 Py_DECREF(tag); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
750 Py_DECREF(attrib); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
751 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
752 if (!element) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
753 return NULL; |
|
68804
d0fe7489c4cc
_elementtree.c: remove trailing spaces
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66799
diff
changeset
|
754 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
755 text = deepcopy(JOIN_OBJ(self->text), memo); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
756 if (!text) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
757 goto error; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
758 Py_DECREF(element->text); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
759 element->text = JOIN_SET(text, JOIN_GET(self->text)); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
760 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
761 tail = deepcopy(JOIN_OBJ(self->tail), memo); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
762 if (!tail) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
763 goto error; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
764 Py_DECREF(element->tail); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
765 element->tail = JOIN_SET(tail, JOIN_GET(self->tail)); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
766 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
767 if (self->extra) { |
|
68804
d0fe7489c4cc
_elementtree.c: remove trailing spaces
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66799
diff
changeset
|
768 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
769 if (element_resize(element, self->extra->length) < 0) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
770 goto error; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
771 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
772 for (i = 0; i < self->extra->length; i++) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
773 PyObject* child = deepcopy(self->extra->children[i], memo); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
774 if (!child) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
775 element->extra->length = i; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
776 goto error; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
777 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
778 element->extra->children[i] = child; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
779 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
780 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
781 element->extra->length = self->extra->length; |
|
68804
d0fe7489c4cc
_elementtree.c: remove trailing spaces
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66799
diff
changeset
|
782 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
783 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
784 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
785 /* add object to memo dictionary (so deepcopy won't visit it again) */ |
|
79385
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
786 id = PyLong_FromSsize_t((Py_uintptr_t) self); |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
787 if (!id) |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
788 goto error; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
789 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
790 i = PyDict_SetItem(memo, id, (PyObject*) element); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
791 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
792 Py_DECREF(id); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
793 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
794 if (i < 0) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
795 goto error; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
796 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
797 return (PyObject*) element; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
798 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
799 error: |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
800 Py_DECREF(element); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
801 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
802 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
803 |
|
77485
093dec81ea1f
Issue #14055: Add __sizeof__ support to _elementtree.
Martin v. Löwis <martin@v.loewis.de>
parents:
77432
diff
changeset
|
804 static PyObject* |
|
093dec81ea1f
Issue #14055: Add __sizeof__ support to _elementtree.
Martin v. Löwis <martin@v.loewis.de>
parents:
77432
diff
changeset
|
805 element_sizeof(PyObject* _self, PyObject* args) |
|
093dec81ea1f
Issue #14055: Add __sizeof__ support to _elementtree.
Martin v. Löwis <martin@v.loewis.de>
parents:
77432
diff
changeset
|
806 { |
|
093dec81ea1f
Issue #14055: Add __sizeof__ support to _elementtree.
Martin v. Löwis <martin@v.loewis.de>
parents:
77432
diff
changeset
|
807 ElementObject *self = (ElementObject*)_self; |
|
093dec81ea1f
Issue #14055: Add __sizeof__ support to _elementtree.
Martin v. Löwis <martin@v.loewis.de>
parents:
77432
diff
changeset
|
808 Py_ssize_t result = sizeof(ElementObject); |
|
093dec81ea1f
Issue #14055: Add __sizeof__ support to _elementtree.
Martin v. Löwis <martin@v.loewis.de>
parents:
77432
diff
changeset
|
809 if (self->extra) { |
|
093dec81ea1f
Issue #14055: Add __sizeof__ support to _elementtree.
Martin v. Löwis <martin@v.loewis.de>
parents:
77432
diff
changeset
|
810 result += sizeof(ElementObjectExtra); |
|
093dec81ea1f
Issue #14055: Add __sizeof__ support to _elementtree.
Martin v. Löwis <martin@v.loewis.de>
parents:
77432
diff
changeset
|
811 if (self->extra->children != self->extra->_children) |
|
093dec81ea1f
Issue #14055: Add __sizeof__ support to _elementtree.
Martin v. Löwis <martin@v.loewis.de>
parents:
77432
diff
changeset
|
812 result += sizeof(PyObject*) * self->extra->allocated; |
|
093dec81ea1f
Issue #14055: Add __sizeof__ support to _elementtree.
Martin v. Löwis <martin@v.loewis.de>
parents:
77432
diff
changeset
|
813 } |
|
093dec81ea1f
Issue #14055: Add __sizeof__ support to _elementtree.
Martin v. Löwis <martin@v.loewis.de>
parents:
77432
diff
changeset
|
814 return PyLong_FromSsize_t(result); |
|
093dec81ea1f
Issue #14055: Add __sizeof__ support to _elementtree.
Martin v. Löwis <martin@v.loewis.de>
parents:
77432
diff
changeset
|
815 } |
|
093dec81ea1f
Issue #14055: Add __sizeof__ support to _elementtree.
Martin v. Löwis <martin@v.loewis.de>
parents:
77432
diff
changeset
|
816 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
817 LOCAL(int) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
818 checkpath(PyObject* tag) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
819 { |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
820 Py_ssize_t i; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
821 int check = 1; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
822 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
823 /* check if a tag contains an xpath character */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
824 |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
825 #define PATHCHAR(ch) \ |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
826 (ch == '/' || ch == '*' || ch == '[' || ch == '@' || ch == '.') |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
827 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
828 if (PyUnicode_Check(tag)) { |
| 72475 | 829 const Py_ssize_t len = PyUnicode_GET_LENGTH(tag); |
| 830 void *data = PyUnicode_DATA(tag); | |
| 831 unsigned int kind = PyUnicode_KIND(tag); | |
| 832 for (i = 0; i < len; i++) { | |
| 833 Py_UCS4 ch = PyUnicode_READ(kind, data, i); | |
| 834 if (ch == '{') | |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
835 check = 0; |
| 72475 | 836 else if (ch == '}') |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
837 check = 1; |
| 72475 | 838 else if (check && PATHCHAR(ch)) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
839 return 1; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
840 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
841 return 0; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
842 } |
|
47301
23ab586c427a
Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents:
44742
diff
changeset
|
843 if (PyBytes_Check(tag)) { |
|
23ab586c427a
Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents:
44742
diff
changeset
|
844 char *p = PyBytes_AS_STRING(tag); |
|
23ab586c427a
Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents:
44742
diff
changeset
|
845 for (i = 0; i < PyBytes_GET_SIZE(tag); i++) { |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
846 if (p[i] == '{') |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
847 check = 0; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
848 else if (p[i] == '}') |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
849 check = 1; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
850 else if (check && PATHCHAR(p[i])) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
851 return 1; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
852 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
853 return 0; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
854 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
855 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
856 return 1; /* unknown type; might be path expression */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
857 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
858 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
859 static PyObject* |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
860 element_extend(ElementObject* self, PyObject* args) |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
861 { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
862 PyObject* seq; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
863 Py_ssize_t i, seqlen = 0; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
864 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
865 PyObject* seq_in; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
866 if (!PyArg_ParseTuple(args, "O:extend", &seq_in)) |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
867 return NULL; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
868 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
869 seq = PySequence_Fast(seq_in, ""); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
870 if (!seq) { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
871 PyErr_Format( |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
872 PyExc_TypeError, |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
873 "expected sequence, not \"%.200s\"", Py_TYPE(seq_in)->tp_name |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
874 ); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
875 return NULL; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
876 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
877 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
878 seqlen = PySequence_Size(seq); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
879 for (i = 0; i < seqlen; i++) { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
880 PyObject* element = PySequence_Fast_GET_ITEM(seq, i); |
|
75894
75268a773455
Issue #13782: streamline argument type-checking in ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75722
diff
changeset
|
881 if (!PyObject_IsInstance(element, (PyObject *)&Element_Type)) { |
|
75268a773455
Issue #13782: streamline argument type-checking in ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75722
diff
changeset
|
882 Py_DECREF(seq); |
|
75268a773455
Issue #13782: streamline argument type-checking in ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75722
diff
changeset
|
883 PyErr_Format( |
|
75268a773455
Issue #13782: streamline argument type-checking in ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75722
diff
changeset
|
884 PyExc_TypeError, |
|
75268a773455
Issue #13782: streamline argument type-checking in ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75722
diff
changeset
|
885 "expected an Element, not \"%.200s\"", |
|
75268a773455
Issue #13782: streamline argument type-checking in ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75722
diff
changeset
|
886 Py_TYPE(element)->tp_name); |
|
75268a773455
Issue #13782: streamline argument type-checking in ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75722
diff
changeset
|
887 return NULL; |
|
75268a773455
Issue #13782: streamline argument type-checking in ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75722
diff
changeset
|
888 } |
|
75268a773455
Issue #13782: streamline argument type-checking in ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75722
diff
changeset
|
889 |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
890 if (element_add_subelement(self, element) < 0) { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
891 Py_DECREF(seq); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
892 return NULL; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
893 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
894 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
895 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
896 Py_DECREF(seq); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
897 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
898 Py_RETURN_NONE; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
899 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
900 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
901 static PyObject* |
|
77217
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
902 element_find(ElementObject *self, PyObject *args, PyObject *kwds) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
903 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
904 int i; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
905 PyObject* tag; |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
906 PyObject* namespaces = Py_None; |
|
77217
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
907 static char *kwlist[] = {"path", "namespaces", 0}; |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
908 |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
909 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:find", kwlist, |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
910 &tag, &namespaces)) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
911 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
912 |
|
72835
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
72475
diff
changeset
|
913 if (checkpath(tag) || namespaces != Py_None) { |
|
72925
7109f31300fb
Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents:
72835
diff
changeset
|
914 _Py_IDENTIFIER(find); |
|
72835
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
72475
diff
changeset
|
915 return _PyObject_CallMethodId( |
|
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
72475
diff
changeset
|
916 elementpath_obj, &PyId_find, "OOO", self, tag, namespaces |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
917 ); |
|
72835
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
72475
diff
changeset
|
918 } |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
919 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
920 if (!self->extra) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
921 Py_RETURN_NONE; |
|
68804
d0fe7489c4cc
_elementtree.c: remove trailing spaces
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66799
diff
changeset
|
922 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
923 for (i = 0; i < self->extra->length; i++) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
924 PyObject* item = self->extra->children[i]; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
925 if (Element_CheckExact(item) && |
|
51244
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
48660
diff
changeset
|
926 PyObject_RichCompareBool(((ElementObject*)item)->tag, tag, Py_EQ) == 1) { |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
927 Py_INCREF(item); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
928 return item; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
929 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
930 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
931 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
932 Py_RETURN_NONE; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
933 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
934 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
935 static PyObject* |
|
77217
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
936 element_findtext(ElementObject *self, PyObject *args, PyObject *kwds) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
937 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
938 int i; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
939 PyObject* tag; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
940 PyObject* default_value = Py_None; |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
941 PyObject* namespaces = Py_None; |
|
72925
7109f31300fb
Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents:
72835
diff
changeset
|
942 _Py_IDENTIFIER(findtext); |
|
77217
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
943 static char *kwlist[] = {"path", "default", "namespaces", 0}; |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
944 |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
945 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OO:findtext", kwlist, |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
946 &tag, &default_value, &namespaces)) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
947 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
948 |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
949 if (checkpath(tag) || namespaces != Py_None) |
|
72835
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
72475
diff
changeset
|
950 return _PyObject_CallMethodId( |
|
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
72475
diff
changeset
|
951 elementpath_obj, &PyId_findtext, "OOOO", self, tag, default_value, namespaces |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
952 ); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
953 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
954 if (!self->extra) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
955 Py_INCREF(default_value); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
956 return default_value; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
957 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
958 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
959 for (i = 0; i < self->extra->length; i++) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
960 ElementObject* item = (ElementObject*) self->extra->children[i]; |
|
51244
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
48660
diff
changeset
|
961 if (Element_CheckExact(item) && (PyObject_RichCompareBool(item->tag, tag, Py_EQ) == 1)) { |
|
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
48660
diff
changeset
|
962 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
963 PyObject* text = element_get_text(item); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
964 if (text == Py_None) |
|
47301
23ab586c427a
Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents:
44742
diff
changeset
|
965 return PyBytes_FromString(""); |
|
39610
3674f20ac781
Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents:
39442
diff
changeset
|
966 Py_XINCREF(text); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
967 return text; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
968 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
969 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
970 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
971 Py_INCREF(default_value); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
972 return default_value; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
973 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
974 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
975 static PyObject* |
|
77217
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
976 element_findall(ElementObject *self, PyObject *args, PyObject *kwds) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
977 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
978 int i; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
979 PyObject* out; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
980 PyObject* tag; |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
981 PyObject* namespaces = Py_None; |
|
77217
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
982 static char *kwlist[] = {"path", "namespaces", 0}; |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
983 |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
984 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:findall", kwlist, |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
985 &tag, &namespaces)) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
986 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
987 |
|
72835
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
72475
diff
changeset
|
988 if (checkpath(tag) || namespaces != Py_None) { |
|
72925
7109f31300fb
Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents:
72835
diff
changeset
|
989 _Py_IDENTIFIER(findall); |
|
72835
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
72475
diff
changeset
|
990 return _PyObject_CallMethodId( |
|
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
72475
diff
changeset
|
991 elementpath_obj, &PyId_findall, "OOO", self, tag, namespaces |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
992 ); |
|
72835
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
72475
diff
changeset
|
993 } |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
994 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
995 out = PyList_New(0); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
996 if (!out) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
997 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
998 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
999 if (!self->extra) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1000 return out; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1001 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1002 for (i = 0; i < self->extra->length; i++) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1003 PyObject* item = self->extra->children[i]; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1004 if (Element_CheckExact(item) && |
|
51244
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
48660
diff
changeset
|
1005 PyObject_RichCompareBool(((ElementObject*)item)->tag, tag, Py_EQ) == 1) { |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1006 if (PyList_Append(out, item) < 0) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1007 Py_DECREF(out); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1008 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1009 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1010 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1011 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1012 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1013 return out; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1014 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1015 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1016 static PyObject* |
|
77217
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
1017 element_iterfind(ElementObject *self, PyObject *args, PyObject *kwds) |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1018 { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1019 PyObject* tag; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1020 PyObject* namespaces = Py_None; |
|
72925
7109f31300fb
Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents:
72835
diff
changeset
|
1021 _Py_IDENTIFIER(iterfind); |
|
77217
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
1022 static char *kwlist[] = {"path", "namespaces", 0}; |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
1023 |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
1024 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:iterfind", kwlist, |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
1025 &tag, &namespaces)) |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1026 return NULL; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1027 |
|
72835
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
72475
diff
changeset
|
1028 return _PyObject_CallMethodId( |
|
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
72475
diff
changeset
|
1029 elementpath_obj, &PyId_iterfind, "OOO", self, tag, namespaces |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1030 ); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1031 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1032 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1033 static PyObject* |
|
81296
c1fc6b6d1cfc
The get() and iter() are now able to accept keyword arguments.
Eli Bendersky <eliben@gmail.com>
parents:
79460
diff
changeset
|
1034 element_get(ElementObject* self, PyObject* args, PyObject* kwds) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1035 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1036 PyObject* value; |
|
81296
c1fc6b6d1cfc
The get() and iter() are now able to accept keyword arguments.
Eli Bendersky <eliben@gmail.com>
parents:
79460
diff
changeset
|
1037 static char* kwlist[] = {"key", "default", 0}; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1038 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1039 PyObject* key; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1040 PyObject* default_value = Py_None; |
|
81296
c1fc6b6d1cfc
The get() and iter() are now able to accept keyword arguments.
Eli Bendersky <eliben@gmail.com>
parents:
79460
diff
changeset
|
1041 |
|
c1fc6b6d1cfc
The get() and iter() are now able to accept keyword arguments.
Eli Bendersky <eliben@gmail.com>
parents:
79460
diff
changeset
|
1042 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:get", kwlist, &key, |
|
c1fc6b6d1cfc
The get() and iter() are now able to accept keyword arguments.
Eli Bendersky <eliben@gmail.com>
parents:
79460
diff
changeset
|
1043 &default_value)) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1044 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1045 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1046 if (!self->extra || self->extra->attrib == Py_None) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1047 value = default_value; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1048 else { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1049 value = PyDict_GetItem(self->extra->attrib, key); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1050 if (!value) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1051 value = default_value; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1052 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1053 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1054 Py_INCREF(value); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1055 return value; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1056 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1057 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1058 static PyObject* |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1059 element_getchildren(ElementObject* self, PyObject* args) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1060 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1061 int i; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1062 PyObject* list; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1063 |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1064 /* FIXME: report as deprecated? */ |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1065 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1066 if (!PyArg_ParseTuple(args, ":getchildren")) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1067 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1068 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1069 if (!self->extra) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1070 return PyList_New(0); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1071 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1072 list = PyList_New(self->extra->length); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1073 if (!list) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1074 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1075 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1076 for (i = 0; i < self->extra->length; i++) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1077 PyObject* item = self->extra->children[i]; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1078 Py_INCREF(item); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1079 PyList_SET_ITEM(list, i, item); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1080 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1081 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1082 return list; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1083 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1084 |
|
77431
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1085 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1086 static PyObject * |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1087 create_elementiter(ElementObject *self, PyObject *tag, int gettext); |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1088 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1089 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1090 static PyObject * |
|
81296
c1fc6b6d1cfc
The get() and iter() are now able to accept keyword arguments.
Eli Bendersky <eliben@gmail.com>
parents:
79460
diff
changeset
|
1091 element_iter(ElementObject *self, PyObject *args, PyObject *kwds) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1092 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1093 PyObject* tag = Py_None; |
|
81296
c1fc6b6d1cfc
The get() and iter() are now able to accept keyword arguments.
Eli Bendersky <eliben@gmail.com>
parents:
79460
diff
changeset
|
1094 static char* kwlist[] = {"tag", 0}; |
|
c1fc6b6d1cfc
The get() and iter() are now able to accept keyword arguments.
Eli Bendersky <eliben@gmail.com>
parents:
79460
diff
changeset
|
1095 |
|
c1fc6b6d1cfc
The get() and iter() are now able to accept keyword arguments.
Eli Bendersky <eliben@gmail.com>
parents:
79460
diff
changeset
|
1096 if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O:iter", kwlist, &tag)) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1097 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1098 |
|
77431
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1099 return create_elementiter(self, tag, 0); |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1100 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1101 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1102 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1103 static PyObject* |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1104 element_itertext(ElementObject* self, PyObject* args) |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1105 { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1106 if (!PyArg_ParseTuple(args, ":itertext")) |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1107 return NULL; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1108 |
|
77431
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1109 return create_elementiter(self, Py_None, 1); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1110 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1111 |
|
77431
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1112 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1113 static PyObject* |
|
36954
db5e720b0cef
merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents:
36684
diff
changeset
|
1114 element_getitem(PyObject* self_, Py_ssize_t index) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1115 { |
|
36954
db5e720b0cef
merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents:
36684
diff
changeset
|
1116 ElementObject* self = (ElementObject*) self_; |
|
db5e720b0cef
merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents:
36684
diff
changeset
|
1117 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1118 if (!self->extra || index < 0 || index >= self->extra->length) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1119 PyErr_SetString( |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1120 PyExc_IndexError, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1121 "child index out of range" |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1122 ); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1123 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1124 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1125 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1126 Py_INCREF(self->extra->children[index]); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1127 return self->extra->children[index]; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1128 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1129 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1130 static PyObject* |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1131 element_insert(ElementObject* self, PyObject* args) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1132 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1133 int i; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1134 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1135 int index; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1136 PyObject* element; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1137 if (!PyArg_ParseTuple(args, "iO!:insert", &index, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1138 &Element_Type, &element)) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1139 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1140 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1141 if (!self->extra) |
|
75379
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
1142 create_extra(self, NULL); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1143 |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1144 if (index < 0) { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1145 index += self->extra->length; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1146 if (index < 0) |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1147 index = 0; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1148 } |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1149 if (index > self->extra->length) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1150 index = self->extra->length; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1151 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1152 if (element_resize(self, 1) < 0) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1153 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1154 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1155 for (i = self->extra->length; i > index; i--) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1156 self->extra->children[i] = self->extra->children[i-1]; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1157 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1158 Py_INCREF(element); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1159 self->extra->children[index] = element; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1160 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1161 self->extra->length++; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1162 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1163 Py_RETURN_NONE; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1164 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1165 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1166 static PyObject* |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1167 element_items(ElementObject* self, PyObject* args) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1168 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1169 if (!PyArg_ParseTuple(args, ":items")) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1170 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1171 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1172 if (!self->extra || self->extra->attrib == Py_None) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1173 return PyList_New(0); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1174 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1175 return PyDict_Items(self->extra->attrib); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1176 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1177 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1178 static PyObject* |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1179 element_keys(ElementObject* self, PyObject* args) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1180 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1181 if (!PyArg_ParseTuple(args, ":keys")) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1182 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1183 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1184 if (!self->extra || self->extra->attrib == Py_None) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1185 return PyList_New(0); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1186 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1187 return PyDict_Keys(self->extra->attrib); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1188 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1189 |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36450
diff
changeset
|
1190 static Py_ssize_t |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1191 element_length(ElementObject* self) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1192 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1193 if (!self->extra) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1194 return 0; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1195 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1196 return self->extra->length; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1197 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1198 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1199 static PyObject* |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1200 element_makeelement(PyObject* self, PyObject* args, PyObject* kw) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1201 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1202 PyObject* elem; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1203 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1204 PyObject* tag; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1205 PyObject* attrib; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1206 if (!PyArg_ParseTuple(args, "OO:makeelement", &tag, &attrib)) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1207 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1208 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1209 attrib = PyDict_Copy(attrib); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1210 if (!attrib) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1211 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1212 |
|
75379
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
1213 elem = create_new_element(tag, attrib); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1214 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1215 Py_DECREF(attrib); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1216 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1217 return elem; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1218 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1219 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1220 static PyObject* |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1221 element_remove(ElementObject* self, PyObject* args) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1222 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1223 int i; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1224 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1225 PyObject* element; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1226 if (!PyArg_ParseTuple(args, "O!:remove", &Element_Type, &element)) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1227 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1228 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1229 if (!self->extra) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1230 /* element has no children, so raise exception */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1231 PyErr_SetString( |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1232 PyExc_ValueError, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1233 "list.remove(x): x not in list" |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1234 ); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1235 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1236 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1237 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1238 for (i = 0; i < self->extra->length; i++) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1239 if (self->extra->children[i] == element) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1240 break; |
|
51244
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
48660
diff
changeset
|
1241 if (PyObject_RichCompareBool(self->extra->children[i], element, Py_EQ) == 1) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1242 break; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1243 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1244 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1245 if (i == self->extra->length) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1246 /* element is not in children, so raise exception */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1247 PyErr_SetString( |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1248 PyExc_ValueError, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1249 "list.remove(x): x not in list" |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1250 ); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1251 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1252 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1253 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1254 Py_DECREF(self->extra->children[i]); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1255 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1256 self->extra->length--; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1257 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1258 for (; i < self->extra->length; i++) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1259 self->extra->children[i] = self->extra->children[i+1]; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1260 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1261 Py_RETURN_NONE; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1262 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1263 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1264 static PyObject* |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1265 element_repr(ElementObject* self) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1266 { |
|
75379
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
1267 if (self->tag) |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
1268 return PyUnicode_FromFormat("<Element %R at %p>", self->tag, self); |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
1269 else |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
1270 return PyUnicode_FromFormat("<Element at %p>", self); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1271 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1272 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1273 static PyObject* |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1274 element_set(ElementObject* self, PyObject* args) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1275 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1276 PyObject* attrib; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1277 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1278 PyObject* key; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1279 PyObject* value; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1280 if (!PyArg_ParseTuple(args, "OO:set", &key, &value)) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1281 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1282 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1283 if (!self->extra) |
|
75379
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
1284 create_extra(self, NULL); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1285 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1286 attrib = element_get_attrib(self); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1287 if (!attrib) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1288 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1289 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1290 if (PyDict_SetItem(attrib, key, value) < 0) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1291 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1292 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1293 Py_RETURN_NONE; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1294 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1295 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1296 static int |
|
36954
db5e720b0cef
merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents:
36684
diff
changeset
|
1297 element_setitem(PyObject* self_, Py_ssize_t index, PyObject* item) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1298 { |
|
36954
db5e720b0cef
merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents:
36684
diff
changeset
|
1299 ElementObject* self = (ElementObject*) self_; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1300 int i; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1301 PyObject* old; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1302 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1303 if (!self->extra || index < 0 || index >= self->extra->length) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1304 PyErr_SetString( |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1305 PyExc_IndexError, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1306 "child assignment index out of range"); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1307 return -1; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1308 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1309 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1310 old = self->extra->children[index]; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1311 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1312 if (item) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1313 Py_INCREF(item); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1314 self->extra->children[index] = item; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1315 } else { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1316 self->extra->length--; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1317 for (i = index; i < self->extra->length; i++) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1318 self->extra->children[i] = self->extra->children[i+1]; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1319 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1320 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1321 Py_DECREF(old); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1322 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1323 return 0; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1324 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1325 |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1326 static PyObject* |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1327 element_subscr(PyObject* self_, PyObject* item) |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1328 { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1329 ElementObject* self = (ElementObject*) self_; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1330 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1331 if (PyIndex_Check(item)) { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1332 Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1333 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1334 if (i == -1 && PyErr_Occurred()) { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1335 return NULL; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1336 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1337 if (i < 0 && self->extra) |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1338 i += self->extra->length; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1339 return element_getitem(self_, i); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1340 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1341 else if (PySlice_Check(item)) { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1342 Py_ssize_t start, stop, step, slicelen, cur, i; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1343 PyObject* list; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1344 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1345 if (!self->extra) |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1346 return PyList_New(0); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1347 |
|
66664
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65707
diff
changeset
|
1348 if (PySlice_GetIndicesEx(item, |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1349 self->extra->length, |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1350 &start, &stop, &step, &slicelen) < 0) { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1351 return NULL; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1352 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1353 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1354 if (slicelen <= 0) |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1355 return PyList_New(0); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1356 else { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1357 list = PyList_New(slicelen); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1358 if (!list) |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1359 return NULL; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1360 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1361 for (cur = start, i = 0; i < slicelen; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1362 cur += step, i++) { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1363 PyObject* item = self->extra->children[cur]; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1364 Py_INCREF(item); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1365 PyList_SET_ITEM(list, i, item); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1366 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1367 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1368 return list; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1369 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1370 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1371 else { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1372 PyErr_SetString(PyExc_TypeError, |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1373 "element indices must be integers"); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1374 return NULL; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1375 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1376 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1377 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1378 static int |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1379 element_ass_subscr(PyObject* self_, PyObject* item, PyObject* value) |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1380 { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1381 ElementObject* self = (ElementObject*) self_; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1382 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1383 if (PyIndex_Check(item)) { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1384 Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1385 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1386 if (i == -1 && PyErr_Occurred()) { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1387 return -1; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1388 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1389 if (i < 0 && self->extra) |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1390 i += self->extra->length; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1391 return element_setitem(self_, i, value); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1392 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1393 else if (PySlice_Check(item)) { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1394 Py_ssize_t start, stop, step, slicelen, newlen, cur, i; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1395 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1396 PyObject* recycle = NULL; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1397 PyObject* seq = NULL; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1398 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1399 if (!self->extra) |
|
75379
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
1400 create_extra(self, NULL); |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1401 |
|
66664
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65707
diff
changeset
|
1402 if (PySlice_GetIndicesEx(item, |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1403 self->extra->length, |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1404 &start, &stop, &step, &slicelen) < 0) { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1405 return -1; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1406 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1407 |
|
75505
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1408 if (value == NULL) { |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1409 /* Delete slice */ |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1410 size_t cur; |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1411 Py_ssize_t i; |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1412 |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1413 if (slicelen <= 0) |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1414 return 0; |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1415 |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1416 /* Since we're deleting, the direction of the range doesn't matter, |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1417 * so for simplicity make it always ascending. |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1418 */ |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1419 if (step < 0) { |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1420 stop = start + 1; |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1421 start = stop + step * (slicelen - 1) - 1; |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1422 step = -step; |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1423 } |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1424 |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1425 assert((size_t)slicelen <= PY_SIZE_MAX / sizeof(PyObject *)); |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1426 |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1427 /* recycle is a list that will contain all the children |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1428 * scheduled for removal. |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1429 */ |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1430 if (!(recycle = PyList_New(slicelen))) { |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1431 PyErr_NoMemory(); |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1432 return -1; |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1433 } |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1434 |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1435 /* This loop walks over all the children that have to be deleted, |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1436 * with cur pointing at them. num_moved is the amount of children |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1437 * until the next deleted child that have to be "shifted down" to |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1438 * occupy the deleted's places. |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1439 * Note that in the ith iteration, shifting is done i+i places down |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1440 * because i children were already removed. |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1441 */ |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1442 for (cur = start, i = 0; cur < (size_t)stop; cur += step, ++i) { |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1443 /* Compute how many children have to be moved, clipping at the |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1444 * list end. |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1445 */ |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1446 Py_ssize_t num_moved = step - 1; |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1447 if (cur + step >= (size_t)self->extra->length) { |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1448 num_moved = self->extra->length - cur - 1; |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1449 } |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1450 |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1451 PyList_SET_ITEM(recycle, i, self->extra->children[cur]); |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1452 |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1453 memmove( |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1454 self->extra->children + cur - i, |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1455 self->extra->children + cur + 1, |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1456 num_moved * sizeof(PyObject *)); |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1457 } |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1458 |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1459 /* Leftover "tail" after the last removed child */ |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1460 cur = start + (size_t)slicelen * step; |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1461 if (cur < (size_t)self->extra->length) { |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1462 memmove( |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1463 self->extra->children + cur - slicelen, |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1464 self->extra->children + cur, |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1465 (self->extra->length - cur) * sizeof(PyObject *)); |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1466 } |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1467 |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1468 self->extra->length -= slicelen; |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1469 |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1470 /* Discard the recycle list with all the deleted sub-elements */ |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1471 Py_XDECREF(recycle); |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1472 return 0; |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1473 } |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1474 else { |
|
75505
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1475 /* A new slice is actually being assigned */ |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1476 seq = PySequence_Fast(value, ""); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1477 if (!seq) { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1478 PyErr_Format( |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1479 PyExc_TypeError, |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1480 "expected sequence, not \"%.200s\"", Py_TYPE(value)->tp_name |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1481 ); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1482 return -1; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1483 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1484 newlen = PySequence_Size(seq); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1485 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1486 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1487 if (step != 1 && newlen != slicelen) |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1488 { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1489 PyErr_Format(PyExc_ValueError, |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1490 "attempt to assign sequence of size %zd " |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1491 "to extended slice of size %zd", |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1492 newlen, slicelen |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1493 ); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1494 return -1; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1495 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1496 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1497 /* Resize before creating the recycle bin, to prevent refleaks. */ |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1498 if (newlen > slicelen) { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1499 if (element_resize(self, newlen - slicelen) < 0) { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1500 if (seq) { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1501 Py_DECREF(seq); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1502 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1503 return -1; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1504 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1505 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1506 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1507 if (slicelen > 0) { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1508 /* to avoid recursive calls to this method (via decref), move |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1509 old items to the recycle bin here, and get rid of them when |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1510 we're done modifying the element */ |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1511 recycle = PyList_New(slicelen); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1512 if (!recycle) { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1513 if (seq) { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1514 Py_DECREF(seq); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1515 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1516 return -1; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1517 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1518 for (cur = start, i = 0; i < slicelen; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1519 cur += step, i++) |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1520 PyList_SET_ITEM(recycle, i, self->extra->children[cur]); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1521 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1522 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1523 if (newlen < slicelen) { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1524 /* delete slice */ |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1525 for (i = stop; i < self->extra->length; i++) |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1526 self->extra->children[i + newlen - slicelen] = self->extra->children[i]; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1527 } else if (newlen > slicelen) { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1528 /* insert slice */ |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1529 for (i = self->extra->length-1; i >= stop; i--) |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1530 self->extra->children[i + newlen - slicelen] = self->extra->children[i]; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1531 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1532 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1533 /* replace the slice */ |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1534 for (cur = start, i = 0; i < newlen; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1535 cur += step, i++) { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1536 PyObject* element = PySequence_Fast_GET_ITEM(seq, i); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1537 Py_INCREF(element); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1538 self->extra->children[cur] = element; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1539 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1540 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1541 self->extra->length += newlen - slicelen; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1542 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1543 if (seq) { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1544 Py_DECREF(seq); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1545 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1546 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1547 /* discard the recycle bin, and everything in it */ |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1548 Py_XDECREF(recycle); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1549 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1550 return 0; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1551 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1552 else { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1553 PyErr_SetString(PyExc_TypeError, |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1554 "element indices must be integers"); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1555 return -1; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1556 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1557 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1558 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1559 static PyMethodDef element_methods[] = { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1560 |
|
75997
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
1561 {"clear", (PyCFunction) element_clearmethod, METH_VARARGS}, |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1562 |
|
81296
c1fc6b6d1cfc
The get() and iter() are now able to accept keyword arguments.
Eli Bendersky <eliben@gmail.com>
parents:
79460
diff
changeset
|
1563 {"get", (PyCFunction) element_get, METH_VARARGS | METH_KEYWORDS}, |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1564 {"set", (PyCFunction) element_set, METH_VARARGS}, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1565 |
|
77217
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
1566 {"find", (PyCFunction) element_find, METH_VARARGS | METH_KEYWORDS}, |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
1567 {"findtext", (PyCFunction) element_findtext, METH_VARARGS | METH_KEYWORDS}, |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
1568 {"findall", (PyCFunction) element_findall, METH_VARARGS | METH_KEYWORDS}, |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1569 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1570 {"append", (PyCFunction) element_append, METH_VARARGS}, |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1571 {"extend", (PyCFunction) element_extend, METH_VARARGS}, |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1572 {"insert", (PyCFunction) element_insert, METH_VARARGS}, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1573 {"remove", (PyCFunction) element_remove, METH_VARARGS}, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1574 |
|
81296
c1fc6b6d1cfc
The get() and iter() are now able to accept keyword arguments.
Eli Bendersky <eliben@gmail.com>
parents:
79460
diff
changeset
|
1575 {"iter", (PyCFunction) element_iter, METH_VARARGS | METH_KEYWORDS}, |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1576 {"itertext", (PyCFunction) element_itertext, METH_VARARGS}, |
|
77217
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
1577 {"iterfind", (PyCFunction) element_iterfind, METH_VARARGS | METH_KEYWORDS}, |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1578 |
|
81296
c1fc6b6d1cfc
The get() and iter() are now able to accept keyword arguments.
Eli Bendersky <eliben@gmail.com>
parents:
79460
diff
changeset
|
1579 {"getiterator", (PyCFunction) element_iter, METH_VARARGS | METH_KEYWORDS}, |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1580 {"getchildren", (PyCFunction) element_getchildren, METH_VARARGS}, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1581 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1582 {"items", (PyCFunction) element_items, METH_VARARGS}, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1583 {"keys", (PyCFunction) element_keys, METH_VARARGS}, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1584 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1585 {"makeelement", (PyCFunction) element_makeelement, METH_VARARGS}, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1586 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1587 {"__copy__", (PyCFunction) element_copy, METH_VARARGS}, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1588 {"__deepcopy__", (PyCFunction) element_deepcopy, METH_VARARGS}, |
|
77485
093dec81ea1f
Issue #14055: Add __sizeof__ support to _elementtree.
Martin v. Löwis <martin@v.loewis.de>
parents:
77432
diff
changeset
|
1589 {"__sizeof__", element_sizeof, METH_NOARGS}, |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1590 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1591 {NULL, NULL} |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1592 }; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1593 |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1594 static PyObject* |
|
48414
4025f638911f
#3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1595 element_getattro(ElementObject* self, PyObject* nameobj) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1596 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1597 PyObject* res; |
|
48414
4025f638911f
#3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1598 char *name = ""; |
|
4025f638911f
#3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1599 |
|
4025f638911f
#3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1600 if (PyUnicode_Check(nameobj)) |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1601 name = _PyUnicode_AsString(nameobj); |
|
68804
d0fe7489c4cc
_elementtree.c: remove trailing spaces
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66799
diff
changeset
|
1602 |
|
66799
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66664
diff
changeset
|
1603 if (name == NULL) |
|
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66664
diff
changeset
|
1604 return NULL; |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1605 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1606 /* handle common attributes first */ |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1607 if (strcmp(name, "tag") == 0) { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1608 res = self->tag; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1609 Py_INCREF(res); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1610 return res; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1611 } else if (strcmp(name, "text") == 0) { |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1612 res = element_get_text(self); |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1613 Py_INCREF(res); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1614 return res; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1615 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1616 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1617 /* methods */ |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1618 res = PyObject_GenericGetAttr((PyObject*) self, nameobj); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1619 if (res) |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1620 return res; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1621 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1622 /* less common attributes */ |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1623 if (strcmp(name, "tail") == 0) { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1624 PyErr_Clear(); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1625 res = element_get_tail(self); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1626 } else if (strcmp(name, "attrib") == 0) { |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1627 PyErr_Clear(); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1628 if (!self->extra) |
|
75379
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
1629 create_extra(self, NULL); |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1630 res = element_get_attrib(self); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1631 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1632 |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1633 if (!res) |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1634 return NULL; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1635 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1636 Py_INCREF(res); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1637 return res; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1638 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1639 |
|
77062
41a9d24d075e
Issue #14849: setup Element data members to be assignable in subclasses
Eli Bendersky <eliben@gmail.com>
parents:
76110
diff
changeset
|
1640 static PyObject* |
|
41a9d24d075e
Issue #14849: setup Element data members to be assignable in subclasses
Eli Bendersky <eliben@gmail.com>
parents:
76110
diff
changeset
|
1641 element_setattro(ElementObject* self, PyObject* nameobj, PyObject* value) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1642 { |
|
77062
41a9d24d075e
Issue #14849: setup Element data members to be assignable in subclasses
Eli Bendersky <eliben@gmail.com>
parents:
76110
diff
changeset
|
1643 char *name = ""; |
|
41a9d24d075e
Issue #14849: setup Element data members to be assignable in subclasses
Eli Bendersky <eliben@gmail.com>
parents:
76110
diff
changeset
|
1644 if (PyUnicode_Check(nameobj)) |
|
41a9d24d075e
Issue #14849: setup Element data members to be assignable in subclasses
Eli Bendersky <eliben@gmail.com>
parents:
76110
diff
changeset
|
1645 name = _PyUnicode_AsString(nameobj); |
|
41a9d24d075e
Issue #14849: setup Element data members to be assignable in subclasses
Eli Bendersky <eliben@gmail.com>
parents:
76110
diff
changeset
|
1646 |
|
41a9d24d075e
Issue #14849: setup Element data members to be assignable in subclasses
Eli Bendersky <eliben@gmail.com>
parents:
76110
diff
changeset
|
1647 if (name == NULL) |
|
41a9d24d075e
Issue #14849: setup Element data members to be assignable in subclasses
Eli Bendersky <eliben@gmail.com>
parents:
76110
diff
changeset
|
1648 return NULL; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1649 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1650 if (strcmp(name, "tag") == 0) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1651 Py_DECREF(self->tag); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1652 self->tag = value; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1653 Py_INCREF(self->tag); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1654 } else if (strcmp(name, "text") == 0) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1655 Py_DECREF(JOIN_OBJ(self->text)); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1656 self->text = value; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1657 Py_INCREF(self->text); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1658 } else if (strcmp(name, "tail") == 0) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1659 Py_DECREF(JOIN_OBJ(self->tail)); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1660 self->tail = value; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1661 Py_INCREF(self->tail); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1662 } else if (strcmp(name, "attrib") == 0) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1663 if (!self->extra) |
|
75379
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
1664 create_extra(self, NULL); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1665 Py_DECREF(self->extra->attrib); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1666 self->extra->attrib = value; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1667 Py_INCREF(self->extra->attrib); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1668 } else { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1669 PyErr_SetString(PyExc_AttributeError, name); |
|
77062
41a9d24d075e
Issue #14849: setup Element data members to be assignable in subclasses
Eli Bendersky <eliben@gmail.com>
parents:
76110
diff
changeset
|
1670 return NULL; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1671 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1672 |
|
77062
41a9d24d075e
Issue #14849: setup Element data members to be assignable in subclasses
Eli Bendersky <eliben@gmail.com>
parents:
76110
diff
changeset
|
1673 return NULL; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1674 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1675 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1676 static PySequenceMethods element_as_sequence = { |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36450
diff
changeset
|
1677 (lenfunc) element_length, |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1678 0, /* sq_concat */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1679 0, /* sq_repeat */ |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36450
diff
changeset
|
1680 element_getitem, |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1681 0, |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36450
diff
changeset
|
1682 element_setitem, |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1683 0, |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1684 }; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1685 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1686 static PyMappingMethods element_as_mapping = { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1687 (lenfunc) element_length, |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1688 (binaryfunc) element_subscr, |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1689 (objobjargproc) element_ass_subscr, |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1690 }; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1691 |
|
37144
91dd4d44d3bc
Finish getting rid of statichere/staticforward
Neal Norwitz <nnorwitz@gmail.com>
parents:
36954
diff
changeset
|
1692 static PyTypeObject Element_Type = { |
|
42334
e70cdce0e8b2
Merged revisions 56467-56482 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
41782
diff
changeset
|
1693 PyVarObject_HEAD_INIT(NULL, 0) |
|
e70cdce0e8b2
Merged revisions 56467-56482 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
41782
diff
changeset
|
1694 "Element", sizeof(ElementObject), 0, |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1695 /* methods */ |
|
75379
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
1696 (destructor)element_dealloc, /* tp_dealloc */ |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
1697 0, /* tp_print */ |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
1698 0, /* tp_getattr */ |
|
77062
41a9d24d075e
Issue #14849: setup Element data members to be assignable in subclasses
Eli Bendersky <eliben@gmail.com>
parents:
76110
diff
changeset
|
1699 0, /* tp_setattr */ |
|
75379
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
1700 0, /* tp_reserved */ |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
1701 (reprfunc)element_repr, /* tp_repr */ |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
1702 0, /* tp_as_number */ |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
1703 &element_as_sequence, /* tp_as_sequence */ |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
1704 &element_as_mapping, /* tp_as_mapping */ |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
1705 0, /* tp_hash */ |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
1706 0, /* tp_call */ |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
1707 0, /* tp_str */ |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
1708 (getattrofunc)element_getattro, /* tp_getattro */ |
|
77062
41a9d24d075e
Issue #14849: setup Element data members to be assignable in subclasses
Eli Bendersky <eliben@gmail.com>
parents:
76110
diff
changeset
|
1709 (setattrofunc)element_setattro, /* tp_setattro */ |
|
75379
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
1710 0, /* tp_as_buffer */ |
|
75997
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
1711 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, |
|
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
1712 /* tp_flags */ |
|
75379
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
1713 0, /* tp_doc */ |
|
75997
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
1714 (traverseproc)element_gc_traverse, /* tp_traverse */ |
|
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
1715 (inquiry)element_gc_clear, /* tp_clear */ |
|
75379
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
1716 0, /* tp_richcompare */ |
|
76098
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
1717 offsetof(ElementObject, weakreflist), /* tp_weaklistoffset */ |
|
75379
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
1718 0, /* tp_iter */ |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
1719 0, /* tp_iternext */ |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
1720 element_methods, /* tp_methods */ |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
1721 0, /* tp_members */ |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
1722 0, /* tp_getset */ |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
1723 0, /* tp_base */ |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
1724 0, /* tp_dict */ |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
1725 0, /* tp_descr_get */ |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
1726 0, /* tp_descr_set */ |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
1727 0, /* tp_dictoffset */ |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
1728 (initproc)element_init, /* tp_init */ |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
1729 PyType_GenericAlloc, /* tp_alloc */ |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
1730 element_new, /* tp_new */ |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
1731 0, /* tp_free */ |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1732 }; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1733 |
|
77431
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1734 /******************************* Element iterator ****************************/ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1735 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1736 /* ElementIterObject represents the iteration state over an XML element in |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1737 * pre-order traversal. To keep track of which sub-element should be returned |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1738 * next, a stack of parents is maintained. This is a standard stack-based |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1739 * iterative pre-order traversal of a tree. |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1740 * The stack is managed using a single-linked list starting at parent_stack. |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1741 * Each stack node contains the saved parent to which we should return after |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1742 * the current one is exhausted, and the next child to examine in that parent. |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1743 */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1744 typedef struct ParentLocator_t { |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1745 ElementObject *parent; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1746 Py_ssize_t child_index; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1747 struct ParentLocator_t *next; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1748 } ParentLocator; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1749 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1750 typedef struct { |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1751 PyObject_HEAD |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1752 ParentLocator *parent_stack; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1753 ElementObject *root_element; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1754 PyObject *sought_tag; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1755 int root_done; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1756 int gettext; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1757 } ElementIterObject; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1758 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1759 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1760 static void |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1761 elementiter_dealloc(ElementIterObject *it) |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1762 { |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1763 ParentLocator *p = it->parent_stack; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1764 while (p) { |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1765 ParentLocator *temp = p; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1766 Py_XDECREF(p->parent); |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1767 p = p->next; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1768 PyObject_Free(temp); |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1769 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1770 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1771 Py_XDECREF(it->sought_tag); |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1772 Py_XDECREF(it->root_element); |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1773 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1774 PyObject_GC_UnTrack(it); |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1775 PyObject_GC_Del(it); |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1776 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1777 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1778 static int |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1779 elementiter_traverse(ElementIterObject *it, visitproc visit, void *arg) |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1780 { |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1781 ParentLocator *p = it->parent_stack; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1782 while (p) { |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1783 Py_VISIT(p->parent); |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1784 p = p->next; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1785 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1786 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1787 Py_VISIT(it->root_element); |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1788 Py_VISIT(it->sought_tag); |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1789 return 0; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1790 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1791 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1792 /* Helper function for elementiter_next. Add a new parent to the parent stack. |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1793 */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1794 static ParentLocator * |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1795 parent_stack_push_new(ParentLocator *stack, ElementObject *parent) |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1796 { |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1797 ParentLocator *new_node = PyObject_Malloc(sizeof(ParentLocator)); |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1798 if (new_node) { |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1799 new_node->parent = parent; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1800 Py_INCREF(parent); |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1801 new_node->child_index = 0; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1802 new_node->next = stack; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1803 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1804 return new_node; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1805 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1806 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1807 static PyObject * |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1808 elementiter_next(ElementIterObject *it) |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1809 { |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1810 /* Sub-element iterator. |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1811 * |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1812 * A short note on gettext: this function serves both the iter() and |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1813 * itertext() methods to avoid code duplication. However, there are a few |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1814 * small differences in the way these iterations work. Namely: |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1815 * - itertext() only yields text from nodes that have it, and continues |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1816 * iterating when a node doesn't have text (so it doesn't return any |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1817 * node like iter()) |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1818 * - itertext() also has to handle tail, after finishing with all the |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1819 * children of a node. |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1820 */ |
|
77432
3c089edbf02c
Fix windows compilation problems caused by previous commit.
Eli Bendersky <eliben@gmail.com>
parents:
77431
diff
changeset
|
1821 ElementObject *cur_parent; |
|
3c089edbf02c
Fix windows compilation problems caused by previous commit.
Eli Bendersky <eliben@gmail.com>
parents:
77431
diff
changeset
|
1822 Py_ssize_t child_index; |
|
77431
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1823 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1824 while (1) { |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1825 /* Handle the case reached in the beginning and end of iteration, where |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1826 * the parent stack is empty. The root_done flag gives us indication |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1827 * whether we've just started iterating (so root_done is 0), in which |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1828 * case the root is returned. If root_done is 1 and we're here, the |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1829 * iterator is exhausted. |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1830 */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1831 if (!it->parent_stack->parent) { |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1832 if (it->root_done) { |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1833 PyErr_SetNone(PyExc_StopIteration); |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1834 return NULL; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1835 } else { |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1836 it->parent_stack = parent_stack_push_new(it->parent_stack, |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1837 it->root_element); |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1838 if (!it->parent_stack) { |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1839 PyErr_NoMemory(); |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1840 return NULL; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1841 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1842 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1843 it->root_done = 1; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1844 if (it->sought_tag == Py_None || |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1845 PyObject_RichCompareBool(it->root_element->tag, |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1846 it->sought_tag, Py_EQ) == 1) { |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1847 if (it->gettext) { |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1848 PyObject *text = JOIN_OBJ(it->root_element->text); |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1849 if (PyObject_IsTrue(text)) { |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1850 Py_INCREF(text); |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1851 return text; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1852 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1853 } else { |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1854 Py_INCREF(it->root_element); |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1855 return (PyObject *)it->root_element; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1856 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1857 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1858 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1859 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1860 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1861 /* See if there are children left to traverse in the current parent. If |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1862 * yes, visit the next child. If not, pop the stack and try again. |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1863 */ |
|
77432
3c089edbf02c
Fix windows compilation problems caused by previous commit.
Eli Bendersky <eliben@gmail.com>
parents:
77431
diff
changeset
|
1864 cur_parent = it->parent_stack->parent; |
|
3c089edbf02c
Fix windows compilation problems caused by previous commit.
Eli Bendersky <eliben@gmail.com>
parents:
77431
diff
changeset
|
1865 child_index = it->parent_stack->child_index; |
|
77431
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1866 if (cur_parent->extra && child_index < cur_parent->extra->length) { |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1867 ElementObject *child = (ElementObject *) |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1868 cur_parent->extra->children[child_index]; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1869 it->parent_stack->child_index++; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1870 it->parent_stack = parent_stack_push_new(it->parent_stack, |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1871 child); |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1872 if (!it->parent_stack) { |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1873 PyErr_NoMemory(); |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1874 return NULL; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1875 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1876 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1877 if (it->gettext) { |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1878 PyObject *text = JOIN_OBJ(child->text); |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1879 if (PyObject_IsTrue(text)) { |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1880 Py_INCREF(text); |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1881 return text; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1882 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1883 } else if (it->sought_tag == Py_None || |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1884 PyObject_RichCompareBool(child->tag, |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1885 it->sought_tag, Py_EQ) == 1) { |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1886 Py_INCREF(child); |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1887 return (PyObject *)child; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1888 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1889 else |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1890 continue; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1891 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1892 else { |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1893 PyObject *tail = it->gettext ? JOIN_OBJ(cur_parent->tail) : Py_None; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1894 ParentLocator *next = it->parent_stack->next; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1895 Py_XDECREF(it->parent_stack->parent); |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1896 PyObject_Free(it->parent_stack); |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1897 it->parent_stack = next; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1898 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1899 /* Note that extra condition on it->parent_stack->parent here; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1900 * this is because itertext() is supposed to only return *inner* |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1901 * text, not text following the element it began iteration with. |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1902 */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1903 if (it->parent_stack->parent && PyObject_IsTrue(tail)) { |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1904 Py_INCREF(tail); |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1905 return tail; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1906 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1907 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1908 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1909 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1910 return NULL; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1911 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1912 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1913 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1914 static PyTypeObject ElementIter_Type = { |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1915 PyVarObject_HEAD_INIT(NULL, 0) |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1916 "_elementtree._element_iterator", /* tp_name */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1917 sizeof(ElementIterObject), /* tp_basicsize */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1918 0, /* tp_itemsize */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1919 /* methods */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1920 (destructor)elementiter_dealloc, /* tp_dealloc */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1921 0, /* tp_print */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1922 0, /* tp_getattr */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1923 0, /* tp_setattr */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1924 0, /* tp_reserved */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1925 0, /* tp_repr */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1926 0, /* tp_as_number */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1927 0, /* tp_as_sequence */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1928 0, /* tp_as_mapping */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1929 0, /* tp_hash */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1930 0, /* tp_call */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1931 0, /* tp_str */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1932 0, /* tp_getattro */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1933 0, /* tp_setattro */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1934 0, /* tp_as_buffer */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1935 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1936 0, /* tp_doc */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1937 (traverseproc)elementiter_traverse, /* tp_traverse */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1938 0, /* tp_clear */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1939 0, /* tp_richcompare */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1940 0, /* tp_weaklistoffset */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1941 PyObject_SelfIter, /* tp_iter */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1942 (iternextfunc)elementiter_next, /* tp_iternext */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1943 0, /* tp_methods */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1944 0, /* tp_members */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1945 0, /* tp_getset */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1946 0, /* tp_base */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1947 0, /* tp_dict */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1948 0, /* tp_descr_get */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1949 0, /* tp_descr_set */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1950 0, /* tp_dictoffset */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1951 0, /* tp_init */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1952 0, /* tp_alloc */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1953 0, /* tp_new */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1954 }; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1955 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1956 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1957 static PyObject * |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1958 create_elementiter(ElementObject *self, PyObject *tag, int gettext) |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1959 { |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1960 ElementIterObject *it; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1961 PyObject *star = NULL; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1962 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1963 it = PyObject_GC_New(ElementIterObject, &ElementIter_Type); |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1964 if (!it) |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1965 return NULL; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1966 if (!(it->parent_stack = PyObject_Malloc(sizeof(ParentLocator)))) { |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1967 PyObject_GC_Del(it); |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1968 return NULL; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1969 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1970 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1971 it->parent_stack->parent = NULL; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1972 it->parent_stack->child_index = 0; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1973 it->parent_stack->next = NULL; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1974 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1975 if (PyUnicode_Check(tag)) |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1976 star = PyUnicode_FromString("*"); |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1977 else if (PyBytes_Check(tag)) |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1978 star = PyBytes_FromString("*"); |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1979 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1980 if (star && PyObject_RichCompareBool(tag, star, Py_EQ) == 1) |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1981 tag = Py_None; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1982 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1983 Py_XDECREF(star); |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1984 it->sought_tag = tag; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1985 it->root_done = 0; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1986 it->gettext = gettext; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1987 it->root_element = self; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1988 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1989 Py_INCREF(self); |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1990 Py_INCREF(tag); |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1991 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1992 PyObject_GC_Track(it); |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1993 return (PyObject *)it; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1994 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1995 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1996 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1997 /* ==================================================================== */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1998 /* the tree builder type */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1999 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2000 typedef struct { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2001 PyObject_HEAD |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2002 |
|
77226
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2003 PyObject *root; /* root node (first created node) */ |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2004 |
|
79460
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2005 PyObject *this; /* current node */ |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2006 PyObject *last; /* most recently created node */ |
|
77226
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2007 |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2008 PyObject *data; /* data collector (string or list), or NULL */ |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2009 |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2010 PyObject *stack; /* element stack */ |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2011 Py_ssize_t index; /* current stack size (0 means empty) */ |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2012 |
|
77246
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2013 PyObject *element_factory; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2014 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2015 /* element tracing */ |
|
77226
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2016 PyObject *events; /* list of events, or NULL if not collecting */ |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2017 PyObject *start_event_obj; /* event objects (NULL to ignore) */ |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2018 PyObject *end_event_obj; |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2019 PyObject *start_ns_event_obj; |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2020 PyObject *end_ns_event_obj; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2021 } TreeBuilderObject; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2022 |
|
37144
91dd4d44d3bc
Finish getting rid of statichere/staticforward
Neal Norwitz <nnorwitz@gmail.com>
parents:
36954
diff
changeset
|
2023 static PyTypeObject TreeBuilder_Type; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2024 |
|
44351
86a2679dca46
#1629: Renamed Py_Size, Py_Type and Py_Refcnt to Py_SIZE, Py_TYPE and Py_REFCNT.
Christian Heimes <christian@cheimes.de>
parents:
44099
diff
changeset
|
2025 #define TreeBuilder_CheckExact(op) (Py_TYPE(op) == &TreeBuilder_Type) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2026 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2027 /* -------------------------------------------------------------------- */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2028 /* constructor and destructor */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2029 |
|
77226
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2030 static PyObject * |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2031 treebuilder_new(PyTypeObject *type, PyObject *args, PyObject *kwds) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2032 { |
|
77226
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2033 TreeBuilderObject *t = (TreeBuilderObject *)type->tp_alloc(type, 0); |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2034 if (t != NULL) { |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2035 t->root = NULL; |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2036 |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2037 Py_INCREF(Py_None); |
|
79460
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2038 t->this = Py_None; |
|
77226
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2039 Py_INCREF(Py_None); |
|
79460
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2040 t->last = Py_None; |
|
77226
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2041 |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2042 t->data = NULL; |
|
77246
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2043 t->element_factory = NULL; |
|
77226
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2044 t->stack = PyList_New(20); |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2045 if (!t->stack) { |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2046 Py_DECREF(t->this); |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2047 Py_DECREF(t->last); |
|
79385
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
2048 Py_DECREF((PyObject *) t); |
|
77226
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2049 return NULL; |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2050 } |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2051 t->index = 0; |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2052 |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2053 t->events = NULL; |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2054 t->start_event_obj = t->end_event_obj = NULL; |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2055 t->start_ns_event_obj = t->end_ns_event_obj = NULL; |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2056 } |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2057 return (PyObject *)t; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2058 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2059 |
|
77226
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2060 static int |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2061 treebuilder_init(PyObject *self, PyObject *args, PyObject *kwds) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2062 { |
|
77313
eb1d633fe307
Fix unterminated keyword array passed to PyArg_ParseTupleAndKeywords
Eli Bendersky <eliben@gmail.com>
parents:
77279
diff
changeset
|
2063 static char *kwlist[] = {"element_factory", 0}; |
|
77246
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2064 PyObject *element_factory = NULL; |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2065 TreeBuilderObject *self_tb = (TreeBuilderObject *)self; |
|
79385
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
2066 PyObject *tmp; |
|
77246
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2067 |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2068 if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O:TreeBuilder", kwlist, |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2069 &element_factory)) { |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2070 return -1; |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2071 } |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2072 |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2073 if (element_factory) { |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2074 Py_INCREF(element_factory); |
|
79385
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
2075 tmp = self_tb->element_factory; |
|
77246
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2076 self_tb->element_factory = element_factory; |
|
79385
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
2077 Py_XDECREF(tmp); |
|
77246
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2078 } |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2079 |
|
77226
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2080 return 0; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2081 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2082 |
|
77246
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2083 static int |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2084 treebuilder_gc_traverse(TreeBuilderObject *self, visitproc visit, void *arg) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2085 { |
|
77246
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2086 Py_VISIT(self->root); |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2087 Py_VISIT(self->this); |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2088 Py_VISIT(self->last); |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2089 Py_VISIT(self->data); |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2090 Py_VISIT(self->stack); |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2091 Py_VISIT(self->element_factory); |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2092 return 0; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2093 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2094 |
|
77246
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2095 static int |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2096 treebuilder_gc_clear(TreeBuilderObject *self) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2097 { |
|
79385
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
2098 Py_CLEAR(self->end_ns_event_obj); |
|
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
2099 Py_CLEAR(self->start_ns_event_obj); |
|
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
2100 Py_CLEAR(self->end_event_obj); |
|
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
2101 Py_CLEAR(self->start_event_obj); |
|
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
2102 Py_CLEAR(self->events); |
|
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
2103 Py_CLEAR(self->stack); |
|
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
2104 Py_CLEAR(self->data); |
|
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
2105 Py_CLEAR(self->last); |
|
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
2106 Py_CLEAR(self->this); |
|
77246
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2107 Py_CLEAR(self->element_factory); |
|
79385
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
2108 Py_CLEAR(self->root); |
|
77246
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2109 return 0; |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2110 } |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2111 |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2112 static void |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2113 treebuilder_dealloc(TreeBuilderObject *self) |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2114 { |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2115 PyObject_GC_UnTrack(self); |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2116 treebuilder_gc_clear(self); |
|
77226
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2117 Py_TYPE(self)->tp_free((PyObject *)self); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2118 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2119 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2120 /* -------------------------------------------------------------------- */ |
|
79460
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2121 /* helpers for handling of arbitrary element-like objects */ |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2122 |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2123 static int |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2124 treebuilder_set_element_text_or_tail(PyObject *element, PyObject *data, |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2125 PyObject **dest, _Py_Identifier *name) |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2126 { |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2127 if (Element_CheckExact(element)) { |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2128 Py_DECREF(JOIN_OBJ(*dest)); |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2129 *dest = JOIN_SET(data, PyList_CheckExact(data)); |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2130 return 0; |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2131 } |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2132 else { |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2133 PyObject *joined = list_join(data); |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2134 int r; |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2135 if (joined == NULL) |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2136 return -1; |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2137 r = _PyObject_SetAttrId(element, name, joined); |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2138 Py_DECREF(joined); |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2139 return r; |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2140 } |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2141 } |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2142 |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2143 /* These two functions steal a reference to data */ |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2144 static int |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2145 treebuilder_set_element_text(PyObject *element, PyObject *data) |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2146 { |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2147 _Py_IDENTIFIER(text); |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2148 return treebuilder_set_element_text_or_tail( |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2149 element, data, &((ElementObject *) element)->text, &PyId_text); |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2150 } |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2151 |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2152 static int |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2153 treebuilder_set_element_tail(PyObject *element, PyObject *data) |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2154 { |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2155 _Py_IDENTIFIER(tail); |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2156 return treebuilder_set_element_text_or_tail( |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2157 element, data, &((ElementObject *) element)->tail, &PyId_tail); |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2158 } |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2159 |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2160 static int |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2161 treebuilder_add_subelement(PyObject *element, PyObject *child) |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2162 { |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2163 _Py_IDENTIFIER(append); |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2164 if (Element_CheckExact(element)) { |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2165 ElementObject *elem = (ElementObject *) element; |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2166 return element_add_subelement(elem, child); |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2167 } |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2168 else { |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2169 PyObject *res; |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2170 res = _PyObject_CallMethodId(element, &PyId_append, "O", child); |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2171 if (res == NULL) |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2172 return -1; |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2173 Py_DECREF(res); |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2174 return 0; |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2175 } |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2176 } |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2177 |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2178 /* -------------------------------------------------------------------- */ |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2179 /* handlers */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2180 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2181 LOCAL(PyObject*) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2182 treebuilder_handle_start(TreeBuilderObject* self, PyObject* tag, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2183 PyObject* attrib) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2184 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2185 PyObject* node; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2186 PyObject* this; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2187 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2188 if (self->data) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2189 if (self->this == self->last) { |
|
79460
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2190 if (treebuilder_set_element_text(self->last, self->data)) |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2191 return NULL; |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2192 } |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2193 else { |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2194 if (treebuilder_set_element_tail(self->last, self->data)) |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2195 return NULL; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2196 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2197 self->data = NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2198 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2199 |
|
77246
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2200 if (self->element_factory) { |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2201 node = PyObject_CallFunction(self->element_factory, "OO", tag, attrib); |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2202 } else { |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2203 node = create_new_element(tag, attrib); |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2204 } |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2205 if (!node) { |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2206 return NULL; |
|
77246
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2207 } |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2208 |
|
79460
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2209 this = self->this; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2210 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2211 if (this != Py_None) { |
|
79460
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2212 if (treebuilder_add_subelement(this, node) < 0) |
|
36954
db5e720b0cef
merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents:
36684
diff
changeset
|
2213 goto error; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2214 } else { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2215 if (self->root) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2216 PyErr_SetString( |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2217 elementtree_parseerror_obj, |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2218 "multiple elements on top level" |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2219 ); |
|
36954
db5e720b0cef
merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents:
36684
diff
changeset
|
2220 goto error; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2221 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2222 Py_INCREF(node); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2223 self->root = node; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2224 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2225 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2226 if (self->index < PyList_GET_SIZE(self->stack)) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2227 if (PyList_SetItem(self->stack, self->index, this) < 0) |
|
36954
db5e720b0cef
merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents:
36684
diff
changeset
|
2228 goto error; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2229 Py_INCREF(this); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2230 } else { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2231 if (PyList_Append(self->stack, this) < 0) |
|
36954
db5e720b0cef
merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents:
36684
diff
changeset
|
2232 goto error; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2233 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2234 self->index++; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2235 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2236 Py_DECREF(this); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2237 Py_INCREF(node); |
|
79460
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2238 self->this = node; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2239 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2240 Py_DECREF(self->last); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2241 Py_INCREF(node); |
|
79460
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2242 self->last = node; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2243 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2244 if (self->start_event_obj) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2245 PyObject* res; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2246 PyObject* action = self->start_event_obj; |
|
79385
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
2247 res = PyTuple_Pack(2, action, node); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2248 if (res) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2249 PyList_Append(self->events, res); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2250 Py_DECREF(res); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2251 } else |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2252 PyErr_Clear(); /* FIXME: propagate error */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2253 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2254 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2255 return node; |
|
36954
db5e720b0cef
merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents:
36684
diff
changeset
|
2256 |
|
db5e720b0cef
merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents:
36684
diff
changeset
|
2257 error: |
|
db5e720b0cef
merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents:
36684
diff
changeset
|
2258 Py_DECREF(node); |
|
db5e720b0cef
merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents:
36684
diff
changeset
|
2259 return NULL; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2260 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2261 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2262 LOCAL(PyObject*) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2263 treebuilder_handle_data(TreeBuilderObject* self, PyObject* data) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2264 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2265 if (!self->data) { |
|
79460
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2266 if (self->last == Py_None) { |
|
39610
3674f20ac781
Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents:
39442
diff
changeset
|
2267 /* ignore calls to data before the first call to start */ |
|
3674f20ac781
Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents:
39442
diff
changeset
|
2268 Py_RETURN_NONE; |
|
3674f20ac781
Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents:
39442
diff
changeset
|
2269 } |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2270 /* store the first item as is */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2271 Py_INCREF(data); self->data = data; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2272 } else { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2273 /* more than one item; use a list to collect items */ |
|
47301
23ab586c427a
Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents:
44742
diff
changeset
|
2274 if (PyBytes_CheckExact(self->data) && Py_REFCNT(self->data) == 1 && |
|
23ab586c427a
Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents:
44742
diff
changeset
|
2275 PyBytes_CheckExact(data) && PyBytes_GET_SIZE(data) == 1) { |
|
79385
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
2276 /* XXX this code path unused in Python 3? */ |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2277 /* expat often generates single character data sections; handle |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2278 the most common case by resizing the existing string... */ |
|
47301
23ab586c427a
Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents:
44742
diff
changeset
|
2279 Py_ssize_t size = PyBytes_GET_SIZE(self->data); |
|
23ab586c427a
Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents:
44742
diff
changeset
|
2280 if (_PyBytes_Resize(&self->data, size + 1) < 0) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2281 return NULL; |
|
47301
23ab586c427a
Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents:
44742
diff
changeset
|
2282 PyBytes_AS_STRING(self->data)[size] = PyBytes_AS_STRING(data)[0]; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2283 } else if (PyList_CheckExact(self->data)) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2284 if (PyList_Append(self->data, data) < 0) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2285 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2286 } else { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2287 PyObject* list = PyList_New(2); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2288 if (!list) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2289 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2290 PyList_SET_ITEM(list, 0, self->data); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2291 Py_INCREF(data); PyList_SET_ITEM(list, 1, data); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2292 self->data = list; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2293 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2294 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2295 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2296 Py_RETURN_NONE; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2297 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2298 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2299 LOCAL(PyObject*) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2300 treebuilder_handle_end(TreeBuilderObject* self, PyObject* tag) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2301 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2302 PyObject* item; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2303 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2304 if (self->data) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2305 if (self->this == self->last) { |
|
79460
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2306 if (treebuilder_set_element_text(self->last, self->data)) |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2307 return NULL; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2308 } else { |
|
79460
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2309 if (treebuilder_set_element_tail(self->last, self->data)) |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2310 return NULL; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2311 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2312 self->data = NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2313 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2314 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2315 if (self->index == 0) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2316 PyErr_SetString( |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2317 PyExc_IndexError, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2318 "pop from empty stack" |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2319 ); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2320 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2321 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2322 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2323 self->index--; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2324 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2325 item = PyList_GET_ITEM(self->stack, self->index); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2326 Py_INCREF(item); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2327 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2328 Py_DECREF(self->last); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2329 |
|
79460
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2330 self->last = self->this; |
|
7bd9626d8b4f
Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79385
diff
changeset
|
2331 self->this = item; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2332 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2333 if (self->end_event_obj) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2334 PyObject* res; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2335 PyObject* action = self->end_event_obj; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2336 PyObject* node = (PyObject*) self->last; |
|
79385
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
2337 res = PyTuple_Pack(2, action, node); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2338 if (res) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2339 PyList_Append(self->events, res); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2340 Py_DECREF(res); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2341 } else |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2342 PyErr_Clear(); /* FIXME: propagate error */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2343 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2344 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2345 Py_INCREF(self->last); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2346 return (PyObject*) self->last; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2347 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2348 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2349 LOCAL(void) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2350 treebuilder_handle_namespace(TreeBuilderObject* self, int start, |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2351 PyObject *prefix, PyObject *uri) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2352 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2353 PyObject* res; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2354 PyObject* action; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2355 PyObject* parcel; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2356 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2357 if (!self->events) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2358 return; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2359 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2360 if (start) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2361 if (!self->start_ns_event_obj) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2362 return; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2363 action = self->start_ns_event_obj; |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2364 parcel = Py_BuildValue("OO", prefix, uri); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2365 if (!parcel) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2366 return; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2367 Py_INCREF(action); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2368 } else { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2369 if (!self->end_ns_event_obj) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2370 return; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2371 action = self->end_ns_event_obj; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2372 Py_INCREF(action); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2373 parcel = Py_None; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2374 Py_INCREF(parcel); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2375 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2376 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2377 res = PyTuple_New(2); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2378 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2379 if (res) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2380 PyTuple_SET_ITEM(res, 0, action); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2381 PyTuple_SET_ITEM(res, 1, parcel); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2382 PyList_Append(self->events, res); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2383 Py_DECREF(res); |
|
79385
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
2384 } |
|
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
2385 else { |
|
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
2386 Py_DECREF(action); |
|
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
2387 Py_DECREF(parcel); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2388 PyErr_Clear(); /* FIXME: propagate error */ |
|
79385
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
2389 } |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2390 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2391 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2392 /* -------------------------------------------------------------------- */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2393 /* methods (in alphabetical order) */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2394 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2395 static PyObject* |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2396 treebuilder_data(TreeBuilderObject* self, PyObject* args) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2397 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2398 PyObject* data; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2399 if (!PyArg_ParseTuple(args, "O:data", &data)) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2400 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2401 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2402 return treebuilder_handle_data(self, data); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2403 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2404 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2405 static PyObject* |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2406 treebuilder_end(TreeBuilderObject* self, PyObject* args) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2407 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2408 PyObject* tag; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2409 if (!PyArg_ParseTuple(args, "O:end", &tag)) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2410 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2411 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2412 return treebuilder_handle_end(self, tag); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2413 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2414 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2415 LOCAL(PyObject*) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2416 treebuilder_done(TreeBuilderObject* self) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2417 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2418 PyObject* res; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2419 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2420 /* FIXME: check stack size? */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2421 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2422 if (self->root) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2423 res = self->root; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2424 else |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2425 res = Py_None; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2426 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2427 Py_INCREF(res); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2428 return res; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2429 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2430 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2431 static PyObject* |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2432 treebuilder_close(TreeBuilderObject* self, PyObject* args) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2433 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2434 if (!PyArg_ParseTuple(args, ":close")) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2435 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2436 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2437 return treebuilder_done(self); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2438 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2439 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2440 static PyObject* |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2441 treebuilder_start(TreeBuilderObject* self, PyObject* args) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2442 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2443 PyObject* tag; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2444 PyObject* attrib = Py_None; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2445 if (!PyArg_ParseTuple(args, "O|O:start", &tag, &attrib)) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2446 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2447 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2448 return treebuilder_handle_start(self, tag, attrib); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2449 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2450 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2451 static PyMethodDef treebuilder_methods[] = { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2452 {"data", (PyCFunction) treebuilder_data, METH_VARARGS}, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2453 {"start", (PyCFunction) treebuilder_start, METH_VARARGS}, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2454 {"end", (PyCFunction) treebuilder_end, METH_VARARGS}, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2455 {"close", (PyCFunction) treebuilder_close, METH_VARARGS}, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2456 {NULL, NULL} |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2457 }; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2458 |
|
37144
91dd4d44d3bc
Finish getting rid of statichere/staticforward
Neal Norwitz <nnorwitz@gmail.com>
parents:
36954
diff
changeset
|
2459 static PyTypeObject TreeBuilder_Type = { |
|
42334
e70cdce0e8b2
Merged revisions 56467-56482 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
41782
diff
changeset
|
2460 PyVarObject_HEAD_INIT(NULL, 0) |
|
e70cdce0e8b2
Merged revisions 56467-56482 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
41782
diff
changeset
|
2461 "TreeBuilder", sizeof(TreeBuilderObject), 0, |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2462 /* methods */ |
|
77226
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2463 (destructor)treebuilder_dealloc, /* tp_dealloc */ |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2464 0, /* tp_print */ |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2465 0, /* tp_getattr */ |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2466 0, /* tp_setattr */ |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2467 0, /* tp_reserved */ |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2468 0, /* tp_repr */ |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2469 0, /* tp_as_number */ |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2470 0, /* tp_as_sequence */ |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2471 0, /* tp_as_mapping */ |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2472 0, /* tp_hash */ |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2473 0, /* tp_call */ |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2474 0, /* tp_str */ |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2475 0, /* tp_getattro */ |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2476 0, /* tp_setattro */ |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2477 0, /* tp_as_buffer */ |
|
77246
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2478 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2479 /* tp_flags */ |
|
77226
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2480 0, /* tp_doc */ |
|
77246
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2481 (traverseproc)treebuilder_gc_traverse, /* tp_traverse */ |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2482 (inquiry)treebuilder_gc_clear, /* tp_clear */ |
|
77226
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2483 0, /* tp_richcompare */ |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2484 0, /* tp_weaklistoffset */ |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2485 0, /* tp_iter */ |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2486 0, /* tp_iternext */ |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2487 treebuilder_methods, /* tp_methods */ |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2488 0, /* tp_members */ |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2489 0, /* tp_getset */ |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2490 0, /* tp_base */ |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2491 0, /* tp_dict */ |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2492 0, /* tp_descr_get */ |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2493 0, /* tp_descr_set */ |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2494 0, /* tp_dictoffset */ |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2495 (initproc)treebuilder_init, /* tp_init */ |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2496 PyType_GenericAlloc, /* tp_alloc */ |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2497 treebuilder_new, /* tp_new */ |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2498 0, /* tp_free */ |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2499 }; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2500 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2501 /* ==================================================================== */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2502 /* the expat interface */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2503 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2504 #if defined(USE_EXPAT) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2505 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2506 #include "expat.h" |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2507 #include "pyexpat.h" |
|
77278
cf9c379a9859
We're always building _elementtree with USE_PYEXPAT_CAPI, so the #ifdefs in
Eli Bendersky <eliben@gmail.com>
parents:
77275
diff
changeset
|
2508 static struct PyExpat_CAPI *expat_capi; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2509 #define EXPAT(func) (expat_capi->func) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2510 |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
2511 static XML_Memory_Handling_Suite ExpatMemoryHandler = { |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
2512 PyObject_Malloc, PyObject_Realloc, PyObject_Free}; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2513 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2514 typedef struct { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2515 PyObject_HEAD |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2516 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2517 XML_Parser parser; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2518 |
|
77279
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2519 PyObject *target; |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2520 PyObject *entity; |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2521 |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2522 PyObject *names; |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2523 |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2524 PyObject *handle_start; |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2525 PyObject *handle_data; |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2526 PyObject *handle_end; |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2527 |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2528 PyObject *handle_comment; |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2529 PyObject *handle_pi; |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2530 PyObject *handle_doctype; |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2531 |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2532 PyObject *handle_close; |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2533 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2534 } XMLParserObject; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2535 |
|
37144
91dd4d44d3bc
Finish getting rid of statichere/staticforward
Neal Norwitz <nnorwitz@gmail.com>
parents:
36954
diff
changeset
|
2536 static PyTypeObject XMLParser_Type; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2537 |
|
77279
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2538 #define XMLParser_CheckExact(op) (Py_TYPE(op) == &XMLParser_Type) |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2539 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2540 /* helpers */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2541 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2542 LOCAL(PyObject*) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2543 makeuniversal(XMLParserObject* self, const char* string) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2544 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2545 /* convert a UTF-8 tag/attribute name from the expat parser |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2546 to a universal name string */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2547 |
|
79385
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
2548 Py_ssize_t size = (Py_ssize_t) strlen(string); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2549 PyObject* key; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2550 PyObject* value; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2551 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2552 /* look the 'raw' name up in the names dictionary */ |
|
47301
23ab586c427a
Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents:
44742
diff
changeset
|
2553 key = PyBytes_FromStringAndSize(string, size); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2554 if (!key) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2555 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2556 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2557 value = PyDict_GetItem(self->names, key); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2558 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2559 if (value) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2560 Py_INCREF(value); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2561 } else { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2562 /* new name. convert to universal name, and decode as |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2563 necessary */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2564 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2565 PyObject* tag; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2566 char* p; |
|
79385
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
2567 Py_ssize_t i; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2568 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2569 /* look for namespace separator */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2570 for (i = 0; i < size; i++) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2571 if (string[i] == '}') |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2572 break; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2573 if (i != size) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2574 /* convert to universal name */ |
|
47301
23ab586c427a
Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents:
44742
diff
changeset
|
2575 tag = PyBytes_FromStringAndSize(NULL, size+1); |
|
23ab586c427a
Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents:
44742
diff
changeset
|
2576 p = PyBytes_AS_STRING(tag); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2577 p[0] = '{'; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2578 memcpy(p+1, string, size); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2579 size++; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2580 } else { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2581 /* plain name; use key as tag */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2582 Py_INCREF(key); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2583 tag = key; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2584 } |
|
68804
d0fe7489c4cc
_elementtree.c: remove trailing spaces
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66799
diff
changeset
|
2585 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2586 /* decode universal name */ |
|
47301
23ab586c427a
Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents:
44742
diff
changeset
|
2587 p = PyBytes_AS_STRING(tag); |
|
42491
a8f13a43eaa1
SF patch # 1769767, get test_xml_etree_c working. More conversions are probably needed.
Neal Norwitz <nnorwitz@gmail.com>
parents:
42334
diff
changeset
|
2588 value = PyUnicode_DecodeUTF8(p, size, "strict"); |
|
a8f13a43eaa1
SF patch # 1769767, get test_xml_etree_c working. More conversions are probably needed.
Neal Norwitz <nnorwitz@gmail.com>
parents:
42334
diff
changeset
|
2589 Py_DECREF(tag); |
|
a8f13a43eaa1
SF patch # 1769767, get test_xml_etree_c working. More conversions are probably needed.
Neal Norwitz <nnorwitz@gmail.com>
parents:
42334
diff
changeset
|
2590 if (!value) { |
|
a8f13a43eaa1
SF patch # 1769767, get test_xml_etree_c working. More conversions are probably needed.
Neal Norwitz <nnorwitz@gmail.com>
parents:
42334
diff
changeset
|
2591 Py_DECREF(key); |
|
a8f13a43eaa1
SF patch # 1769767, get test_xml_etree_c working. More conversions are probably needed.
Neal Norwitz <nnorwitz@gmail.com>
parents:
42334
diff
changeset
|
2592 return NULL; |
|
a8f13a43eaa1
SF patch # 1769767, get test_xml_etree_c working. More conversions are probably needed.
Neal Norwitz <nnorwitz@gmail.com>
parents:
42334
diff
changeset
|
2593 } |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2594 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2595 /* add to names dictionary */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2596 if (PyDict_SetItem(self->names, key, value) < 0) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2597 Py_DECREF(key); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2598 Py_DECREF(value); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2599 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2600 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2601 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2602 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2603 Py_DECREF(key); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2604 return value; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2605 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2606 |
|
75722
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
2607 /* Set the ParseError exception with the given parameters. |
|
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
2608 * If message is not NULL, it's used as the error string. Otherwise, the |
|
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
2609 * message string is the default for the given error_code. |
|
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
2610 */ |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2611 static void |
|
75722
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
2612 expat_set_error(enum XML_Error error_code, int line, int column, char *message) |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2613 { |
|
75722
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
2614 PyObject *errmsg, *error, *position, *code; |
|
68805
74d3dc78f0db
Issue #10833: Use PyUnicode_FromFormat() and PyErr_Format() instead of
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68804
diff
changeset
|
2615 |
|
74d3dc78f0db
Issue #10833: Use PyUnicode_FromFormat() and PyErr_Format() instead of
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68804
diff
changeset
|
2616 errmsg = PyUnicode_FromFormat("%s: line %d, column %d", |
|
75722
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
2617 message ? message : EXPAT(ErrorString)(error_code), |
|
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
2618 line, column); |
|
68805
74d3dc78f0db
Issue #10833: Use PyUnicode_FromFormat() and PyErr_Format() instead of
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68804
diff
changeset
|
2619 if (errmsg == NULL) |
|
74d3dc78f0db
Issue #10833: Use PyUnicode_FromFormat() and PyErr_Format() instead of
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68804
diff
changeset
|
2620 return; |
|
74d3dc78f0db
Issue #10833: Use PyUnicode_FromFormat() and PyErr_Format() instead of
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68804
diff
changeset
|
2621 |
|
74d3dc78f0db
Issue #10833: Use PyUnicode_FromFormat() and PyErr_Format() instead of
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68804
diff
changeset
|
2622 error = PyObject_CallFunction(elementtree_parseerror_obj, "O", errmsg); |
|
74d3dc78f0db
Issue #10833: Use PyUnicode_FromFormat() and PyErr_Format() instead of
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68804
diff
changeset
|
2623 Py_DECREF(errmsg); |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2624 if (!error) |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2625 return; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2626 |
|
75722
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
2627 /* Add code and position attributes */ |
|
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
2628 code = PyLong_FromLong((long)error_code); |
|
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
2629 if (!code) { |
|
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
2630 Py_DECREF(error); |
|
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
2631 return; |
|
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
2632 } |
|
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
2633 if (PyObject_SetAttrString(error, "code", code) == -1) { |
|
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
2634 Py_DECREF(error); |
|
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
2635 Py_DECREF(code); |
|
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
2636 return; |
|
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
2637 } |
|
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
2638 Py_DECREF(code); |
|
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
2639 |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2640 position = Py_BuildValue("(ii)", line, column); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2641 if (!position) { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2642 Py_DECREF(error); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2643 return; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2644 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2645 if (PyObject_SetAttrString(error, "position", position) == -1) { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2646 Py_DECREF(error); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2647 Py_DECREF(position); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2648 return; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2649 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2650 Py_DECREF(position); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2651 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2652 PyErr_SetObject(elementtree_parseerror_obj, error); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2653 Py_DECREF(error); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2654 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2655 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2656 /* -------------------------------------------------------------------- */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2657 /* handlers */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2658 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2659 static void |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2660 expat_default_handler(XMLParserObject* self, const XML_Char* data_in, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2661 int data_len) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2662 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2663 PyObject* key; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2664 PyObject* value; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2665 PyObject* res; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2666 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2667 if (data_len < 2 || data_in[0] != '&') |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2668 return; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2669 |
|
42491
a8f13a43eaa1
SF patch # 1769767, get test_xml_etree_c working. More conversions are probably needed.
Neal Norwitz <nnorwitz@gmail.com>
parents:
42334
diff
changeset
|
2670 key = PyUnicode_DecodeUTF8(data_in + 1, data_len - 2, "strict"); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2671 if (!key) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2672 return; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2673 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2674 value = PyDict_GetItem(self->entity, key); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2675 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2676 if (value) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2677 if (TreeBuilder_CheckExact(self->target)) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2678 res = treebuilder_handle_data( |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2679 (TreeBuilderObject*) self->target, value |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2680 ); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2681 else if (self->handle_data) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2682 res = PyObject_CallFunction(self->handle_data, "O", value); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2683 else |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2684 res = NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2685 Py_XDECREF(res); |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2686 } else if (!PyErr_Occurred()) { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2687 /* Report the first error, not the last */ |
|
66799
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66664
diff
changeset
|
2688 char message[128] = "undefined entity "; |
|
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66664
diff
changeset
|
2689 strncat(message, data_in, data_len < 100?data_len:100); |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2690 expat_set_error( |
|
75722
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
2691 XML_ERROR_UNDEFINED_ENTITY, |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2692 EXPAT(GetErrorLineNumber)(self->parser), |
|
75722
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
2693 EXPAT(GetErrorColumnNumber)(self->parser), |
|
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
2694 message |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2695 ); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2696 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2697 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2698 Py_DECREF(key); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2699 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2700 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2701 static void |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2702 expat_start_handler(XMLParserObject* self, const XML_Char* tag_in, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2703 const XML_Char **attrib_in) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2704 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2705 PyObject* res; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2706 PyObject* tag; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2707 PyObject* attrib; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2708 int ok; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2709 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2710 /* tag name */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2711 tag = makeuniversal(self, tag_in); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2712 if (!tag) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2713 return; /* parser will look for errors */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2714 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2715 /* attributes */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2716 if (attrib_in[0]) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2717 attrib = PyDict_New(); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2718 if (!attrib) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2719 return; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2720 while (attrib_in[0] && attrib_in[1]) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2721 PyObject* key = makeuniversal(self, attrib_in[0]); |
|
42491
a8f13a43eaa1
SF patch # 1769767, get test_xml_etree_c working. More conversions are probably needed.
Neal Norwitz <nnorwitz@gmail.com>
parents:
42334
diff
changeset
|
2722 PyObject* value = PyUnicode_DecodeUTF8(attrib_in[1], strlen(attrib_in[1]), "strict"); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2723 if (!key || !value) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2724 Py_XDECREF(value); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2725 Py_XDECREF(key); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2726 Py_DECREF(attrib); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2727 return; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2728 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2729 ok = PyDict_SetItem(attrib, key, value); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2730 Py_DECREF(value); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2731 Py_DECREF(key); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2732 if (ok < 0) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2733 Py_DECREF(attrib); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2734 return; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2735 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2736 attrib_in += 2; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2737 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2738 } else { |
|
79385
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
2739 /* Pass an empty dictionary on */ |
|
77246
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2740 attrib = PyDict_New(); |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2741 if (!attrib) |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2742 return; |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2743 } |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2744 |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2745 if (TreeBuilder_CheckExact(self->target)) { |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2746 /* shortcut */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2747 res = treebuilder_handle_start((TreeBuilderObject*) self->target, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2748 tag, attrib); |
|
77246
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2749 } |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2750 else if (self->handle_start) { |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2751 res = PyObject_CallFunction(self->handle_start, "OO", tag, attrib); |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2752 } else |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2753 res = NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2754 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2755 Py_DECREF(tag); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2756 Py_DECREF(attrib); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2757 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2758 Py_XDECREF(res); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2759 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2760 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2761 static void |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2762 expat_data_handler(XMLParserObject* self, const XML_Char* data_in, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2763 int data_len) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2764 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2765 PyObject* data; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2766 PyObject* res; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2767 |
|
42491
a8f13a43eaa1
SF patch # 1769767, get test_xml_etree_c working. More conversions are probably needed.
Neal Norwitz <nnorwitz@gmail.com>
parents:
42334
diff
changeset
|
2768 data = PyUnicode_DecodeUTF8(data_in, data_len, "strict"); |
|
36954
db5e720b0cef
merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents:
36684
diff
changeset
|
2769 if (!data) |
|
db5e720b0cef
merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents:
36684
diff
changeset
|
2770 return; /* parser will look for errors */ |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2771 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2772 if (TreeBuilder_CheckExact(self->target)) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2773 /* shortcut */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2774 res = treebuilder_handle_data((TreeBuilderObject*) self->target, data); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2775 else if (self->handle_data) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2776 res = PyObject_CallFunction(self->handle_data, "O", data); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2777 else |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2778 res = NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2779 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2780 Py_DECREF(data); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2781 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2782 Py_XDECREF(res); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2783 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2784 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2785 static void |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2786 expat_end_handler(XMLParserObject* self, const XML_Char* tag_in) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2787 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2788 PyObject* tag; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2789 PyObject* res = NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2790 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2791 if (TreeBuilder_CheckExact(self->target)) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2792 /* shortcut */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2793 /* the standard tree builder doesn't look at the end tag */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2794 res = treebuilder_handle_end( |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2795 (TreeBuilderObject*) self->target, Py_None |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2796 ); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2797 else if (self->handle_end) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2798 tag = makeuniversal(self, tag_in); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2799 if (tag) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2800 res = PyObject_CallFunction(self->handle_end, "O", tag); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2801 Py_DECREF(tag); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2802 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2803 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2804 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2805 Py_XDECREF(res); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2806 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2807 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2808 static void |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2809 expat_start_ns_handler(XMLParserObject* self, const XML_Char* prefix, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2810 const XML_Char *uri) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2811 { |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2812 PyObject* sprefix = NULL; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2813 PyObject* suri = NULL; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2814 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2815 suri = PyUnicode_DecodeUTF8(uri, strlen(uri), "strict"); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2816 if (!suri) |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2817 return; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2818 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2819 if (prefix) |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2820 sprefix = PyUnicode_DecodeUTF8(prefix, strlen(prefix), "strict"); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2821 else |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2822 sprefix = PyUnicode_FromString(""); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2823 if (!sprefix) { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2824 Py_DECREF(suri); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2825 return; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2826 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2827 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2828 treebuilder_handle_namespace( |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2829 (TreeBuilderObject*) self->target, 1, sprefix, suri |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2830 ); |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2831 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2832 Py_DECREF(sprefix); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2833 Py_DECREF(suri); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2834 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2835 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2836 static void |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2837 expat_end_ns_handler(XMLParserObject* self, const XML_Char* prefix_in) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2838 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2839 treebuilder_handle_namespace( |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2840 (TreeBuilderObject*) self->target, 0, NULL, NULL |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2841 ); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2842 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2843 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2844 static void |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2845 expat_comment_handler(XMLParserObject* self, const XML_Char* comment_in) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2846 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2847 PyObject* comment; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2848 PyObject* res; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2849 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2850 if (self->handle_comment) { |
|
42491
a8f13a43eaa1
SF patch # 1769767, get test_xml_etree_c working. More conversions are probably needed.
Neal Norwitz <nnorwitz@gmail.com>
parents:
42334
diff
changeset
|
2851 comment = PyUnicode_DecodeUTF8(comment_in, strlen(comment_in), "strict"); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2852 if (comment) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2853 res = PyObject_CallFunction(self->handle_comment, "O", comment); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2854 Py_XDECREF(res); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2855 Py_DECREF(comment); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2856 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2857 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2858 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2859 |
|
77279
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2860 static void |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2861 expat_start_doctype_handler(XMLParserObject *self, |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2862 const XML_Char *doctype_name, |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2863 const XML_Char *sysid, |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2864 const XML_Char *pubid, |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2865 int has_internal_subset) |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2866 { |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2867 PyObject *self_pyobj = (PyObject *)self; |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2868 PyObject *doctype_name_obj, *sysid_obj, *pubid_obj; |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2869 PyObject *parser_doctype = NULL; |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2870 PyObject *res = NULL; |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2871 |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2872 doctype_name_obj = makeuniversal(self, doctype_name); |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2873 if (!doctype_name_obj) |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2874 return; |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2875 |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2876 if (sysid) { |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2877 sysid_obj = makeuniversal(self, sysid); |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2878 if (!sysid_obj) { |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2879 Py_DECREF(doctype_name_obj); |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2880 return; |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2881 } |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2882 } else { |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2883 Py_INCREF(Py_None); |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2884 sysid_obj = Py_None; |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2885 } |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2886 |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2887 if (pubid) { |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2888 pubid_obj = makeuniversal(self, pubid); |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2889 if (!pubid_obj) { |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2890 Py_DECREF(doctype_name_obj); |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2891 Py_DECREF(sysid_obj); |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2892 return; |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2893 } |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2894 } else { |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2895 Py_INCREF(Py_None); |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2896 pubid_obj = Py_None; |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2897 } |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2898 |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2899 /* If the target has a handler for doctype, call it. */ |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2900 if (self->handle_doctype) { |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2901 res = PyObject_CallFunction(self->handle_doctype, "OOO", |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2902 doctype_name_obj, pubid_obj, sysid_obj); |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2903 Py_CLEAR(res); |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2904 } |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2905 |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2906 /* Now see if the parser itself has a doctype method. If yes and it's |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2907 * a subclass, call it but warn about deprecation. If it's not a subclass |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2908 * (i.e. vanilla XMLParser), do nothing. |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2909 */ |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2910 parser_doctype = PyObject_GetAttrString(self_pyobj, "doctype"); |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2911 if (parser_doctype) { |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2912 if (!XMLParser_CheckExact(self_pyobj)) { |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2913 if (PyErr_WarnEx(PyExc_DeprecationWarning, |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2914 "This method of XMLParser is deprecated. Define" |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2915 " doctype() method on the TreeBuilder target.", |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2916 1) < 0) { |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2917 goto clear; |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2918 } |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2919 res = PyObject_CallFunction(parser_doctype, "OOO", |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2920 doctype_name_obj, pubid_obj, sysid_obj); |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2921 Py_CLEAR(res); |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2922 } |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2923 } |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2924 |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2925 clear: |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2926 Py_XDECREF(parser_doctype); |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2927 Py_DECREF(doctype_name_obj); |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2928 Py_DECREF(pubid_obj); |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2929 Py_DECREF(sysid_obj); |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2930 } |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2931 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2932 static void |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2933 expat_pi_handler(XMLParserObject* self, const XML_Char* target_in, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2934 const XML_Char* data_in) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2935 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2936 PyObject* target; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2937 PyObject* data; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2938 PyObject* res; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2939 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2940 if (self->handle_pi) { |
|
42491
a8f13a43eaa1
SF patch # 1769767, get test_xml_etree_c working. More conversions are probably needed.
Neal Norwitz <nnorwitz@gmail.com>
parents:
42334
diff
changeset
|
2941 target = PyUnicode_DecodeUTF8(target_in, strlen(target_in), "strict"); |
|
a8f13a43eaa1
SF patch # 1769767, get test_xml_etree_c working. More conversions are probably needed.
Neal Norwitz <nnorwitz@gmail.com>
parents:
42334
diff
changeset
|
2942 data = PyUnicode_DecodeUTF8(data_in, strlen(data_in), "strict"); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2943 if (target && data) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2944 res = PyObject_CallFunction(self->handle_pi, "OO", target, data); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2945 Py_XDECREF(res); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2946 Py_DECREF(data); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2947 Py_DECREF(target); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2948 } else { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2949 Py_XDECREF(data); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2950 Py_XDECREF(target); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2951 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2952 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2953 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2954 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2955 static int |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2956 expat_unknown_encoding_handler(XMLParserObject *self, const XML_Char *name, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2957 XML_Encoding *info) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2958 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2959 PyObject* u; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2960 unsigned char s[256]; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2961 int i; |
| 72475 | 2962 void *data; |
| 2963 unsigned int kind; | |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2964 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2965 memset(info, 0, sizeof(XML_Encoding)); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2966 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2967 for (i = 0; i < 256; i++) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2968 s[i] = i; |
|
68804
d0fe7489c4cc
_elementtree.c: remove trailing spaces
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66799
diff
changeset
|
2969 |
| 36117 | 2970 u = PyUnicode_Decode((char*) s, 256, name, "replace"); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2971 if (!u) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2972 return XML_STATUS_ERROR; |
| 72475 | 2973 if (PyUnicode_READY(u)) |
| 2974 return XML_STATUS_ERROR; | |
| 2975 | |
| 2976 if (PyUnicode_GET_LENGTH(u) != 256) { | |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2977 Py_DECREF(u); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2978 return XML_STATUS_ERROR; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2979 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2980 |
| 72475 | 2981 kind = PyUnicode_KIND(u); |
| 2982 data = PyUnicode_DATA(u); | |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2983 for (i = 0; i < 256; i++) { |
| 72475 | 2984 Py_UCS4 ch = PyUnicode_READ(kind, data, i); |
| 2985 if (ch != Py_UNICODE_REPLACEMENT_CHARACTER) | |
| 2986 info->map[i] = ch; | |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2987 else |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2988 info->map[i] = -1; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2989 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2990 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2991 Py_DECREF(u); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2992 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2993 return XML_STATUS_OK; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2994 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2995 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2996 /* -------------------------------------------------------------------- */ |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
2997 |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
2998 static PyObject * |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
2999 xmlparser_new(PyTypeObject *type, PyObject *args, PyObject *kwds) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3000 { |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3001 XMLParserObject *self = (XMLParserObject *)type->tp_alloc(type, 0); |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3002 if (self) { |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3003 self->parser = NULL; |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3004 self->target = self->entity = self->names = NULL; |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3005 self->handle_start = self->handle_data = self->handle_end = NULL; |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3006 self->handle_comment = self->handle_pi = self->handle_close = NULL; |
|
77279
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3007 self->handle_doctype = NULL; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3008 } |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3009 return (PyObject *)self; |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3010 } |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3011 |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3012 static int |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3013 xmlparser_init(PyObject *self, PyObject *args, PyObject *kwds) |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3014 { |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3015 XMLParserObject *self_xp = (XMLParserObject *)self; |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3016 PyObject *target = NULL, *html = NULL; |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3017 char *encoding = NULL; |
|
77313
eb1d633fe307
Fix unterminated keyword array passed to PyArg_ParseTupleAndKeywords
Eli Bendersky <eliben@gmail.com>
parents:
77279
diff
changeset
|
3018 static char *kwlist[] = {"html", "target", "encoding", 0}; |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3019 |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3020 if (!PyArg_ParseTupleAndKeywords(args, kwds, "|OOz:XMLParser", kwlist, |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3021 &html, &target, &encoding)) { |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3022 return -1; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3023 } |
|
68804
d0fe7489c4cc
_elementtree.c: remove trailing spaces
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66799
diff
changeset
|
3024 |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3025 self_xp->entity = PyDict_New(); |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3026 if (!self_xp->entity) |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3027 return -1; |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3028 |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3029 self_xp->names = PyDict_New(); |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3030 if (!self_xp->names) { |
|
79385
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
3031 Py_CLEAR(self_xp->entity); |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3032 return -1; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3033 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3034 |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3035 self_xp->parser = EXPAT(ParserCreate_MM)(encoding, &ExpatMemoryHandler, "}"); |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3036 if (!self_xp->parser) { |
|
79385
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
3037 Py_CLEAR(self_xp->entity); |
|
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
3038 Py_CLEAR(self_xp->names); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3039 PyErr_NoMemory(); |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3040 return -1; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3041 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3042 |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3043 if (target) { |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3044 Py_INCREF(target); |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3045 } else { |
|
77226
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
3046 target = treebuilder_new(&TreeBuilder_Type, NULL, NULL); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3047 if (!target) { |
|
79385
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
3048 Py_CLEAR(self_xp->entity); |
|
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
3049 Py_CLEAR(self_xp->names); |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3050 EXPAT(ParserFree)(self_xp->parser); |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3051 return -1; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3052 } |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3053 } |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3054 self_xp->target = target; |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3055 |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3056 self_xp->handle_start = PyObject_GetAttrString(target, "start"); |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3057 self_xp->handle_data = PyObject_GetAttrString(target, "data"); |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3058 self_xp->handle_end = PyObject_GetAttrString(target, "end"); |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3059 self_xp->handle_comment = PyObject_GetAttrString(target, "comment"); |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3060 self_xp->handle_pi = PyObject_GetAttrString(target, "pi"); |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3061 self_xp->handle_close = PyObject_GetAttrString(target, "close"); |
|
77279
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3062 self_xp->handle_doctype = PyObject_GetAttrString(target, "doctype"); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3063 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3064 PyErr_Clear(); |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3065 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3066 /* configure parser */ |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3067 EXPAT(SetUserData)(self_xp->parser, self_xp); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3068 EXPAT(SetElementHandler)( |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3069 self_xp->parser, |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3070 (XML_StartElementHandler) expat_start_handler, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3071 (XML_EndElementHandler) expat_end_handler |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3072 ); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3073 EXPAT(SetDefaultHandlerExpand)( |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3074 self_xp->parser, |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3075 (XML_DefaultHandler) expat_default_handler |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3076 ); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3077 EXPAT(SetCharacterDataHandler)( |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3078 self_xp->parser, |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3079 (XML_CharacterDataHandler) expat_data_handler |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3080 ); |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3081 if (self_xp->handle_comment) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3082 EXPAT(SetCommentHandler)( |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3083 self_xp->parser, |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3084 (XML_CommentHandler) expat_comment_handler |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3085 ); |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3086 if (self_xp->handle_pi) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3087 EXPAT(SetProcessingInstructionHandler)( |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3088 self_xp->parser, |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3089 (XML_ProcessingInstructionHandler) expat_pi_handler |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3090 ); |
|
77279
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3091 EXPAT(SetStartDoctypeDeclHandler)( |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3092 self_xp->parser, |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3093 (XML_StartDoctypeDeclHandler) expat_start_doctype_handler |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3094 ); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3095 EXPAT(SetUnknownEncodingHandler)( |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3096 self_xp->parser, |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3097 (XML_UnknownEncodingHandler) expat_unknown_encoding_handler, NULL |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3098 ); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3099 |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3100 return 0; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3101 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3102 |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3103 static int |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3104 xmlparser_gc_traverse(XMLParserObject *self, visitproc visit, void *arg) |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3105 { |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3106 Py_VISIT(self->handle_close); |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3107 Py_VISIT(self->handle_pi); |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3108 Py_VISIT(self->handle_comment); |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3109 Py_VISIT(self->handle_end); |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3110 Py_VISIT(self->handle_data); |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3111 Py_VISIT(self->handle_start); |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3112 |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3113 Py_VISIT(self->target); |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3114 Py_VISIT(self->entity); |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3115 Py_VISIT(self->names); |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3116 |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3117 return 0; |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3118 } |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3119 |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3120 static int |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3121 xmlparser_gc_clear(XMLParserObject *self) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3122 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3123 EXPAT(ParserFree)(self->parser); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3124 |
|
79385
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
3125 Py_CLEAR(self->handle_close); |
|
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
3126 Py_CLEAR(self->handle_pi); |
|
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
3127 Py_CLEAR(self->handle_comment); |
|
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
3128 Py_CLEAR(self->handle_end); |
|
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
3129 Py_CLEAR(self->handle_data); |
|
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
3130 Py_CLEAR(self->handle_start); |
|
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
3131 Py_CLEAR(self->handle_doctype); |
|
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
3132 |
|
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
3133 Py_CLEAR(self->target); |
|
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
3134 Py_CLEAR(self->entity); |
|
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
3135 Py_CLEAR(self->names); |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3136 |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3137 return 0; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3138 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3139 |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3140 static void |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3141 xmlparser_dealloc(XMLParserObject* self) |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3142 { |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3143 PyObject_GC_UnTrack(self); |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3144 xmlparser_gc_clear(self); |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3145 Py_TYPE(self)->tp_free((PyObject *)self); |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3146 } |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3147 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3148 LOCAL(PyObject*) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3149 expat_parse(XMLParserObject* self, char* data, int data_len, int final) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3150 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3151 int ok; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3152 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3153 ok = EXPAT(Parse)(self->parser, data, data_len, final); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3154 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3155 if (PyErr_Occurred()) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3156 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3157 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3158 if (!ok) { |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3159 expat_set_error( |
|
75722
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
3160 EXPAT(GetErrorCode)(self->parser), |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3161 EXPAT(GetErrorLineNumber)(self->parser), |
|
75722
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
3162 EXPAT(GetErrorColumnNumber)(self->parser), |
|
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
3163 NULL |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3164 ); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3165 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3166 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3167 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3168 Py_RETURN_NONE; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3169 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3170 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3171 static PyObject* |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3172 xmlparser_close(XMLParserObject* self, PyObject* args) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3173 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3174 /* end feeding data to parser */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3175 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3176 PyObject* res; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3177 if (!PyArg_ParseTuple(args, ":close")) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3178 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3179 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3180 res = expat_parse(self, "", 0, 1); |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3181 if (!res) |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3182 return NULL; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3183 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3184 if (TreeBuilder_CheckExact(self->target)) { |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3185 Py_DECREF(res); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3186 return treebuilder_done((TreeBuilderObject*) self->target); |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3187 } if (self->handle_close) { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3188 Py_DECREF(res); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3189 return PyObject_CallFunction(self->handle_close, ""); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3190 } else |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3191 return res; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3192 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3193 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3194 static PyObject* |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3195 xmlparser_feed(XMLParserObject* self, PyObject* args) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3196 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3197 /* feed data to parser */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3198 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3199 char* data; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3200 int data_len; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3201 if (!PyArg_ParseTuple(args, "s#:feed", &data, &data_len)) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3202 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3203 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3204 return expat_parse(self, data, data_len, 0); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3205 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3206 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3207 static PyObject* |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3208 xmlparser_parse(XMLParserObject* self, PyObject* args) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3209 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3210 /* (internal) parse until end of input stream */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3211 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3212 PyObject* reader; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3213 PyObject* buffer; |
|
75721
7bdf5c96fdc0
Closes Issue #14246: _elementtree parser will now handle io.StringIO
Eli Bendersky <eliben@gmail.com>
parents:
75505
diff
changeset
|
3214 PyObject* temp; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3215 PyObject* res; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3216 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3217 PyObject* fileobj; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3218 if (!PyArg_ParseTuple(args, "O:_parse", &fileobj)) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3219 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3220 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3221 reader = PyObject_GetAttrString(fileobj, "read"); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3222 if (!reader) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3223 return NULL; |
|
68804
d0fe7489c4cc
_elementtree.c: remove trailing spaces
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66799
diff
changeset
|
3224 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3225 /* read from open file object */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3226 for (;;) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3227 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3228 buffer = PyObject_CallFunction(reader, "i", 64*1024); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3229 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3230 if (!buffer) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3231 /* read failed (e.g. due to KeyboardInterrupt) */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3232 Py_DECREF(reader); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3233 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3234 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3235 |
|
75721
7bdf5c96fdc0
Closes Issue #14246: _elementtree parser will now handle io.StringIO
Eli Bendersky <eliben@gmail.com>
parents:
75505
diff
changeset
|
3236 if (PyUnicode_CheckExact(buffer)) { |
|
7bdf5c96fdc0
Closes Issue #14246: _elementtree parser will now handle io.StringIO
Eli Bendersky <eliben@gmail.com>
parents:
75505
diff
changeset
|
3237 /* A unicode object is encoded into bytes using UTF-8 */ |
|
7bdf5c96fdc0
Closes Issue #14246: _elementtree parser will now handle io.StringIO
Eli Bendersky <eliben@gmail.com>
parents:
75505
diff
changeset
|
3238 if (PyUnicode_GET_SIZE(buffer) == 0) { |
|
7bdf5c96fdc0
Closes Issue #14246: _elementtree parser will now handle io.StringIO
Eli Bendersky <eliben@gmail.com>
parents:
75505
diff
changeset
|
3239 Py_DECREF(buffer); |
|
7bdf5c96fdc0
Closes Issue #14246: _elementtree parser will now handle io.StringIO
Eli Bendersky <eliben@gmail.com>
parents:
75505
diff
changeset
|
3240 break; |
|
7bdf5c96fdc0
Closes Issue #14246: _elementtree parser will now handle io.StringIO
Eli Bendersky <eliben@gmail.com>
parents:
75505
diff
changeset
|
3241 } |
|
7bdf5c96fdc0
Closes Issue #14246: _elementtree parser will now handle io.StringIO
Eli Bendersky <eliben@gmail.com>
parents:
75505
diff
changeset
|
3242 temp = PyUnicode_AsEncodedString(buffer, "utf-8", "surrogatepass"); |
|
79385
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
3243 Py_DECREF(buffer); |
|
75721
7bdf5c96fdc0
Closes Issue #14246: _elementtree parser will now handle io.StringIO
Eli Bendersky <eliben@gmail.com>
parents:
75505
diff
changeset
|
3244 if (!temp) { |
|
7bdf5c96fdc0
Closes Issue #14246: _elementtree parser will now handle io.StringIO
Eli Bendersky <eliben@gmail.com>
parents:
75505
diff
changeset
|
3245 /* Propagate exception from PyUnicode_AsEncodedString */ |
|
7bdf5c96fdc0
Closes Issue #14246: _elementtree parser will now handle io.StringIO
Eli Bendersky <eliben@gmail.com>
parents:
75505
diff
changeset
|
3246 Py_DECREF(reader); |
|
7bdf5c96fdc0
Closes Issue #14246: _elementtree parser will now handle io.StringIO
Eli Bendersky <eliben@gmail.com>
parents:
75505
diff
changeset
|
3247 return NULL; |
|
7bdf5c96fdc0
Closes Issue #14246: _elementtree parser will now handle io.StringIO
Eli Bendersky <eliben@gmail.com>
parents:
75505
diff
changeset
|
3248 } |
|
7bdf5c96fdc0
Closes Issue #14246: _elementtree parser will now handle io.StringIO
Eli Bendersky <eliben@gmail.com>
parents:
75505
diff
changeset
|
3249 buffer = temp; |
|
7bdf5c96fdc0
Closes Issue #14246: _elementtree parser will now handle io.StringIO
Eli Bendersky <eliben@gmail.com>
parents:
75505
diff
changeset
|
3250 } |
|
7bdf5c96fdc0
Closes Issue #14246: _elementtree parser will now handle io.StringIO
Eli Bendersky <eliben@gmail.com>
parents:
75505
diff
changeset
|
3251 else if (!PyBytes_CheckExact(buffer) || PyBytes_GET_SIZE(buffer) == 0) { |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3252 Py_DECREF(buffer); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3253 break; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3254 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3255 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3256 res = expat_parse( |
|
47301
23ab586c427a
Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents:
44742
diff
changeset
|
3257 self, PyBytes_AS_STRING(buffer), PyBytes_GET_SIZE(buffer), 0 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3258 ); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3259 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3260 Py_DECREF(buffer); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3261 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3262 if (!res) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3263 Py_DECREF(reader); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3264 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3265 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3266 Py_DECREF(res); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3267 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3268 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3269 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3270 Py_DECREF(reader); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3271 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3272 res = expat_parse(self, "", 0, 1); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3273 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3274 if (res && TreeBuilder_CheckExact(self->target)) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3275 Py_DECREF(res); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3276 return treebuilder_done((TreeBuilderObject*) self->target); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3277 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3278 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3279 return res; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3280 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3281 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3282 static PyObject* |
|
77279
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3283 xmlparser_doctype(XMLParserObject *self, PyObject *args) |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3284 { |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3285 Py_RETURN_NONE; |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3286 } |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3287 |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3288 static PyObject* |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3289 xmlparser_setevents(XMLParserObject *self, PyObject* args) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3290 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3291 /* activate element event reporting */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3292 |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
3293 Py_ssize_t i; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3294 TreeBuilderObject* target; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3295 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3296 PyObject* events; /* event collector */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3297 PyObject* event_set = Py_None; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3298 if (!PyArg_ParseTuple(args, "O!|O:_setevents", &PyList_Type, &events, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3299 &event_set)) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3300 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3301 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3302 if (!TreeBuilder_CheckExact(self->target)) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3303 PyErr_SetString( |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3304 PyExc_TypeError, |
|
74903
65fc79fb4eb2
Issue #13988: cElementTree is deprecated and the _elementtree accelerator is automatically used whenever available.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
74870
diff
changeset
|
3305 "event handling only supported for ElementTree.TreeBuilder " |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3306 "targets" |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3307 ); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3308 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3309 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3310 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3311 target = (TreeBuilderObject*) self->target; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3312 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3313 Py_INCREF(events); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3314 Py_XDECREF(target->events); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3315 target->events = events; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3316 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3317 /* clear out existing events */ |
|
79385
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
3318 Py_CLEAR(target->start_event_obj); |
|
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
3319 Py_CLEAR(target->end_event_obj); |
|
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
3320 Py_CLEAR(target->start_ns_event_obj); |
|
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
3321 Py_CLEAR(target->end_ns_event_obj); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3322 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3323 if (event_set == Py_None) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3324 /* default is "end" only */ |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3325 target->end_event_obj = PyUnicode_FromString("end"); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3326 Py_RETURN_NONE; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3327 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3328 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3329 if (!PyTuple_Check(event_set)) /* FIXME: handle arbitrary sequences */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3330 goto error; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3331 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3332 for (i = 0; i < PyTuple_GET_SIZE(event_set); i++) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3333 PyObject* item = PyTuple_GET_ITEM(event_set, i); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3334 char* event; |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3335 if (PyUnicode_Check(item)) { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3336 event = _PyUnicode_AsString(item); |
|
59893
2d6178480cc7
Fix a crash in _elementtree related to lone unicode surrogates.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
59601
diff
changeset
|
3337 if (event == NULL) |
|
2d6178480cc7
Fix a crash in _elementtree related to lone unicode surrogates.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
59601
diff
changeset
|
3338 goto error; |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3339 } else if (PyBytes_Check(item)) |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3340 event = PyBytes_AS_STRING(item); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3341 else { |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3342 goto error; |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3343 } |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3344 if (strcmp(event, "start") == 0) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3345 Py_INCREF(item); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3346 target->start_event_obj = item; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3347 } else if (strcmp(event, "end") == 0) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3348 Py_INCREF(item); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3349 Py_XDECREF(target->end_event_obj); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3350 target->end_event_obj = item; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3351 } else if (strcmp(event, "start-ns") == 0) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3352 Py_INCREF(item); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3353 Py_XDECREF(target->start_ns_event_obj); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3354 target->start_ns_event_obj = item; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3355 EXPAT(SetNamespaceDeclHandler)( |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3356 self->parser, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3357 (XML_StartNamespaceDeclHandler) expat_start_ns_handler, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3358 (XML_EndNamespaceDeclHandler) expat_end_ns_handler |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3359 ); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3360 } else if (strcmp(event, "end-ns") == 0) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3361 Py_INCREF(item); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3362 Py_XDECREF(target->end_ns_event_obj); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3363 target->end_ns_event_obj = item; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3364 EXPAT(SetNamespaceDeclHandler)( |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3365 self->parser, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3366 (XML_StartNamespaceDeclHandler) expat_start_ns_handler, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3367 (XML_EndNamespaceDeclHandler) expat_end_ns_handler |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3368 ); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3369 } else { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3370 PyErr_Format( |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3371 PyExc_ValueError, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3372 "unknown event '%s'", event |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3373 ); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3374 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3375 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3376 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3377 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3378 Py_RETURN_NONE; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3379 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3380 error: |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3381 PyErr_SetString( |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3382 PyExc_TypeError, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3383 "invalid event tuple" |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3384 ); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3385 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3386 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3387 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3388 static PyMethodDef xmlparser_methods[] = { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3389 {"feed", (PyCFunction) xmlparser_feed, METH_VARARGS}, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3390 {"close", (PyCFunction) xmlparser_close, METH_VARARGS}, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3391 {"_parse", (PyCFunction) xmlparser_parse, METH_VARARGS}, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3392 {"_setevents", (PyCFunction) xmlparser_setevents, METH_VARARGS}, |
|
77279
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3393 {"doctype", (PyCFunction) xmlparser_doctype, METH_VARARGS}, |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3394 {NULL, NULL} |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3395 }; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3396 |
|
68804
d0fe7489c4cc
_elementtree.c: remove trailing spaces
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66799
diff
changeset
|
3397 static PyObject* |
|
48414
4025f638911f
#3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3398 xmlparser_getattro(XMLParserObject* self, PyObject* nameobj) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3399 { |
|
66799
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66664
diff
changeset
|
3400 if (PyUnicode_Check(nameobj)) { |
|
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66664
diff
changeset
|
3401 PyObject* res; |
|
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66664
diff
changeset
|
3402 if (PyUnicode_CompareWithASCIIString(nameobj, "entity") == 0) |
|
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66664
diff
changeset
|
3403 res = self->entity; |
|
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66664
diff
changeset
|
3404 else if (PyUnicode_CompareWithASCIIString(nameobj, "target") == 0) |
|
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66664
diff
changeset
|
3405 res = self->target; |
|
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66664
diff
changeset
|
3406 else if (PyUnicode_CompareWithASCIIString(nameobj, "version") == 0) { |
|
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66664
diff
changeset
|
3407 return PyUnicode_FromFormat( |
|
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66664
diff
changeset
|
3408 "Expat %d.%d.%d", XML_MAJOR_VERSION, |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3409 XML_MINOR_VERSION, XML_MICRO_VERSION); |
|
66799
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66664
diff
changeset
|
3410 } |
|
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66664
diff
changeset
|
3411 else |
|
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66664
diff
changeset
|
3412 goto generic; |
|
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66664
diff
changeset
|
3413 |
|
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66664
diff
changeset
|
3414 Py_INCREF(res); |
|
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66664
diff
changeset
|
3415 return res; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3416 } |
|
66799
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66664
diff
changeset
|
3417 generic: |
|
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66664
diff
changeset
|
3418 return PyObject_GenericGetAttr((PyObject*) self, nameobj); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3419 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3420 |
|
37144
91dd4d44d3bc
Finish getting rid of statichere/staticforward
Neal Norwitz <nnorwitz@gmail.com>
parents:
36954
diff
changeset
|
3421 static PyTypeObject XMLParser_Type = { |
|
42334
e70cdce0e8b2
Merged revisions 56467-56482 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
41782
diff
changeset
|
3422 PyVarObject_HEAD_INIT(NULL, 0) |
|
e70cdce0e8b2
Merged revisions 56467-56482 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
41782
diff
changeset
|
3423 "XMLParser", sizeof(XMLParserObject), 0, |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3424 /* methods */ |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3425 (destructor)xmlparser_dealloc, /* tp_dealloc */ |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3426 0, /* tp_print */ |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3427 0, /* tp_getattr */ |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3428 0, /* tp_setattr */ |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3429 0, /* tp_reserved */ |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3430 0, /* tp_repr */ |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3431 0, /* tp_as_number */ |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3432 0, /* tp_as_sequence */ |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3433 0, /* tp_as_mapping */ |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3434 0, /* tp_hash */ |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3435 0, /* tp_call */ |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3436 0, /* tp_str */ |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3437 (getattrofunc)xmlparser_getattro, /* tp_getattro */ |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3438 0, /* tp_setattro */ |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3439 0, /* tp_as_buffer */ |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3440 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3441 /* tp_flags */ |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3442 0, /* tp_doc */ |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3443 (traverseproc)xmlparser_gc_traverse, /* tp_traverse */ |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3444 (inquiry)xmlparser_gc_clear, /* tp_clear */ |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3445 0, /* tp_richcompare */ |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3446 0, /* tp_weaklistoffset */ |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3447 0, /* tp_iter */ |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3448 0, /* tp_iternext */ |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3449 xmlparser_methods, /* tp_methods */ |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3450 0, /* tp_members */ |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3451 0, /* tp_getset */ |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3452 0, /* tp_base */ |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3453 0, /* tp_dict */ |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3454 0, /* tp_descr_get */ |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3455 0, /* tp_descr_set */ |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3456 0, /* tp_dictoffset */ |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3457 (initproc)xmlparser_init, /* tp_init */ |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3458 PyType_GenericAlloc, /* tp_alloc */ |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3459 xmlparser_new, /* tp_new */ |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3460 0, /* tp_free */ |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3461 }; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3462 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3463 #endif |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3464 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3465 /* ==================================================================== */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3466 /* python module interface */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3467 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3468 static PyMethodDef _functions[] = { |
|
81296
c1fc6b6d1cfc
The get() and iter() are now able to accept keyword arguments.
Eli Bendersky <eliben@gmail.com>
parents:
79460
diff
changeset
|
3469 {"SubElement", (PyCFunction) subelement, METH_VARARGS | METH_KEYWORDS}, |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3470 {NULL, NULL} |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3471 }; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3472 |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
3473 |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
3474 static struct PyModuleDef _elementtreemodule = { |
|
63924
9108e7dcd7d8
Issue #2443: Added a new macro, Py_VA_COPY, which is equivalent to C99
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
59893
diff
changeset
|
3475 PyModuleDef_HEAD_INIT, |
|
9108e7dcd7d8
Issue #2443: Added a new macro, Py_VA_COPY, which is equivalent to C99
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
59893
diff
changeset
|
3476 "_elementtree", |
|
9108e7dcd7d8
Issue #2443: Added a new macro, Py_VA_COPY, which is equivalent to C99
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
59893
diff
changeset
|
3477 NULL, |
|
9108e7dcd7d8
Issue #2443: Added a new macro, Py_VA_COPY, which is equivalent to C99
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
59893
diff
changeset
|
3478 -1, |
|
9108e7dcd7d8
Issue #2443: Added a new macro, Py_VA_COPY, which is equivalent to C99
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
59893
diff
changeset
|
3479 _functions, |
|
9108e7dcd7d8
Issue #2443: Added a new macro, Py_VA_COPY, which is equivalent to C99
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
59893
diff
changeset
|
3480 NULL, |
|
9108e7dcd7d8
Issue #2443: Added a new macro, Py_VA_COPY, which is equivalent to C99
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
59893
diff
changeset
|
3481 NULL, |
|
9108e7dcd7d8
Issue #2443: Added a new macro, Py_VA_COPY, which is equivalent to C99
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
59893
diff
changeset
|
3482 NULL, |
|
9108e7dcd7d8
Issue #2443: Added a new macro, Py_VA_COPY, which is equivalent to C99
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
59893
diff
changeset
|
3483 NULL |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
3484 }; |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
3485 |
| 40528 | 3486 PyMODINIT_FUNC |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
3487 PyInit__elementtree(void) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3488 { |
|
77431
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
3489 PyObject *m, *temp; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3490 |
|
48414
4025f638911f
#3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3491 /* Initialize object types */ |
|
4025f638911f
#3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3492 if (PyType_Ready(&TreeBuilder_Type) < 0) |
|
63924
9108e7dcd7d8
Issue #2443: Added a new macro, Py_VA_COPY, which is equivalent to C99
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
59893
diff
changeset
|
3493 return NULL; |
|
48414
4025f638911f
#3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3494 if (PyType_Ready(&Element_Type) < 0) |
|
63924
9108e7dcd7d8
Issue #2443: Added a new macro, Py_VA_COPY, which is equivalent to C99
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
59893
diff
changeset
|
3495 return NULL; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3496 #if defined(USE_EXPAT) |
|
48414
4025f638911f
#3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3497 if (PyType_Ready(&XMLParser_Type) < 0) |
|
63924
9108e7dcd7d8
Issue #2443: Added a new macro, Py_VA_COPY, which is equivalent to C99
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
59893
diff
changeset
|
3498 return NULL; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3499 #endif |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3500 |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
3501 m = PyModule_Create(&_elementtreemodule); |
|
36954
db5e720b0cef
merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents:
36684
diff
changeset
|
3502 if (!m) |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
3503 return NULL; |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
3504 |
|
76110
1ddf58262706
Replace bootstrap imports with real C API calls.
Eli Bendersky <eliben@gmail.com>
parents:
76101
diff
changeset
|
3505 if (!(temp = PyImport_ImportModule("copy"))) |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
3506 return NULL; |
|
76110
1ddf58262706
Replace bootstrap imports with real C API calls.
Eli Bendersky <eliben@gmail.com>
parents:
76101
diff
changeset
|
3507 elementtree_deepcopy_obj = PyObject_GetAttrString(temp, "deepcopy"); |
|
1ddf58262706
Replace bootstrap imports with real C API calls.
Eli Bendersky <eliben@gmail.com>
parents:
76101
diff
changeset
|
3508 Py_XDECREF(temp); |
|
1ddf58262706
Replace bootstrap imports with real C API calls.
Eli Bendersky <eliben@gmail.com>
parents:
76101
diff
changeset
|
3509 |
|
1ddf58262706
Replace bootstrap imports with real C API calls.
Eli Bendersky <eliben@gmail.com>
parents:
76101
diff
changeset
|
3510 if (!(elementpath_obj = PyImport_ImportModule("xml.etree.ElementPath"))) |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3511 return NULL; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3512 |
|
77278
cf9c379a9859
We're always building _elementtree with USE_PYEXPAT_CAPI, so the #ifdefs in
Eli Bendersky <eliben@gmail.com>
parents:
77275
diff
changeset
|
3513 /* link against pyexpat */ |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3514 expat_capi = PyCapsule_Import(PyExpat_CAPSULE_NAME, 0); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3515 if (expat_capi) { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3516 /* check that it's usable */ |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3517 if (strcmp(expat_capi->magic, PyExpat_CAPI_MAGIC) != 0 || |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3518 expat_capi->size < sizeof(struct PyExpat_CAPI) || |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3519 expat_capi->MAJOR_VERSION != XML_MAJOR_VERSION || |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3520 expat_capi->MINOR_VERSION != XML_MINOR_VERSION || |
|
78220
c8534d55c5e6
Raise ImportError if pyexpat's version is incompatible
Eli Bendersky <eliben@gmail.com>
parents:
78152
diff
changeset
|
3521 expat_capi->MICRO_VERSION != XML_MICRO_VERSION) { |
|
c8534d55c5e6
Raise ImportError if pyexpat's version is incompatible
Eli Bendersky <eliben@gmail.com>
parents:
78152
diff
changeset
|
3522 PyErr_SetString(PyExc_ImportError, |
|
c8534d55c5e6
Raise ImportError if pyexpat's version is incompatible
Eli Bendersky <eliben@gmail.com>
parents:
78152
diff
changeset
|
3523 "pyexpat version is incompatible"); |
|
c8534d55c5e6
Raise ImportError if pyexpat's version is incompatible
Eli Bendersky <eliben@gmail.com>
parents:
78152
diff
changeset
|
3524 return NULL; |
|
c8534d55c5e6
Raise ImportError if pyexpat's version is incompatible
Eli Bendersky <eliben@gmail.com>
parents:
78152
diff
changeset
|
3525 } |
|
c8534d55c5e6
Raise ImportError if pyexpat's version is incompatible
Eli Bendersky <eliben@gmail.com>
parents:
78152
diff
changeset
|
3526 } else { |
|
c8534d55c5e6
Raise ImportError if pyexpat's version is incompatible
Eli Bendersky <eliben@gmail.com>
parents:
78152
diff
changeset
|
3527 return NULL; |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3528 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3529 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3530 elementtree_parseerror_obj = PyErr_NewException( |
|
74903
65fc79fb4eb2
Issue #13988: cElementTree is deprecated and the _elementtree accelerator is automatically used whenever available.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
74870
diff
changeset
|
3531 "xml.etree.ElementTree.ParseError", PyExc_SyntaxError, NULL |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3532 ); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3533 Py_INCREF(elementtree_parseerror_obj); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3534 PyModule_AddObject(m, "ParseError", elementtree_parseerror_obj); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3535 |
|
75379
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
3536 Py_INCREF((PyObject *)&Element_Type); |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
3537 PyModule_AddObject(m, "Element", (PyObject *)&Element_Type); |
|
ce1c26cbe5fb
Issue #14128: Exposing Element as an actual type from _elementtree, rather than a factory function.
Eli Bendersky <eliben@gmail.com>
parents:
74903
diff
changeset
|
3538 |
|
77226
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
3539 Py_INCREF((PyObject *)&TreeBuilder_Type); |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
3540 PyModule_AddObject(m, "TreeBuilder", (PyObject *)&TreeBuilder_Type); |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
3541 |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3542 #if defined(USE_EXPAT) |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3543 Py_INCREF((PyObject *)&XMLParser_Type); |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3544 PyModule_AddObject(m, "XMLParser", (PyObject *)&XMLParser_Type); |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3545 #endif |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3546 |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
3547 return m; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3548 } |
