Mercurial > cpython-lru_cache-weakref
annotate Modules/_elementtree.c @ 81922:4ab386b00aaf
Fix tests for issue #11159.
| author | Serhiy Storchaka <storchaka@gmail.com> |
|---|---|
| date | Sat, 02 Feb 2013 12:17:50 +0200 |
| parents | 6323e5f1ed81 |
| children | 041960bf92fe 56b70b557a23 |
| 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 |
|
81479
7e072816b197
Clean trailing whitespace in _elementtree.c
Eli Bendersky <eliben@gmail.com>
parents:
81447
diff
changeset
|
313 * either accept attrib as a keyword argument or all attributes splashed |
|
77217
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 |
|
81359
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
817 /* dict keys for getstate/setstate. */ |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
818 #define PICKLED_TAG "tag" |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
819 #define PICKLED_CHILDREN "_children" |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
820 #define PICKLED_ATTRIB "attrib" |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
821 #define PICKLED_TAIL "tail" |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
822 #define PICKLED_TEXT "text" |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
823 |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
824 /* __getstate__ returns a fabricated instance dict as in the pure-Python |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
825 * Element implementation, for interoperability/interchangeability. This |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
826 * makes the pure-Python implementation details an API, but (a) there aren't |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
827 * any unnecessary structures there; and (b) it buys compatibility with 3.2 |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
828 * pickles. See issue #16076. |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
829 */ |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
830 static PyObject * |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
831 element_getstate(ElementObject *self) |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
832 { |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
833 int i, noattrib; |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
834 PyObject *instancedict = NULL, *children; |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
835 |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
836 /* Build a list of children. */ |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
837 children = PyList_New(self->extra ? self->extra->length : 0); |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
838 if (!children) |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
839 return NULL; |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
840 for (i = 0; i < PyList_GET_SIZE(children); i++) { |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
841 PyObject *child = self->extra->children[i]; |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
842 Py_INCREF(child); |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
843 PyList_SET_ITEM(children, i, child); |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
844 } |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
845 |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
846 /* Construct the state object. */ |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
847 noattrib = (self->extra == NULL || self->extra->attrib == Py_None); |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
848 if (noattrib) |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
849 instancedict = Py_BuildValue("{sOsOs{}sOsO}", |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
850 PICKLED_TAG, self->tag, |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
851 PICKLED_CHILDREN, children, |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
852 PICKLED_ATTRIB, |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
853 PICKLED_TEXT, self->text, |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
854 PICKLED_TAIL, self->tail); |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
855 else |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
856 instancedict = Py_BuildValue("{sOsOsOsOsO}", |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
857 PICKLED_TAG, self->tag, |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
858 PICKLED_CHILDREN, children, |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
859 PICKLED_ATTRIB, self->extra->attrib, |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
860 PICKLED_TEXT, self->text, |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
861 PICKLED_TAIL, self->tail); |
|
81445
5b36768b9a11
Issue #16076: fix refleak in pickling of Element.
Eli Bendersky <eliben@gmail.com>
parents:
81363
diff
changeset
|
862 if (instancedict) { |
|
5b36768b9a11
Issue #16076: fix refleak in pickling of Element.
Eli Bendersky <eliben@gmail.com>
parents:
81363
diff
changeset
|
863 Py_DECREF(children); |
|
81359
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
864 return instancedict; |
|
81445
5b36768b9a11
Issue #16076: fix refleak in pickling of Element.
Eli Bendersky <eliben@gmail.com>
parents:
81363
diff
changeset
|
865 } |
|
81359
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
866 else { |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
867 for (i = 0; i < PyList_GET_SIZE(children); i++) |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
868 Py_DECREF(PyList_GET_ITEM(children, i)); |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
869 Py_DECREF(children); |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
870 |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
871 return NULL; |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
872 } |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
873 } |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
874 |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
875 static PyObject * |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
876 element_setstate_from_attributes(ElementObject *self, |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
877 PyObject *tag, |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
878 PyObject *attrib, |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
879 PyObject *text, |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
880 PyObject *tail, |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
881 PyObject *children) |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
882 { |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
883 Py_ssize_t i, nchildren; |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
884 |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
885 if (!tag) { |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
886 PyErr_SetString(PyExc_TypeError, "tag may not be NULL"); |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
887 return NULL; |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
888 } |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
889 |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
890 Py_CLEAR(self->tag); |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
891 self->tag = tag; |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
892 Py_INCREF(self->tag); |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
893 |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
894 Py_CLEAR(self->text); |
|
81445
5b36768b9a11
Issue #16076: fix refleak in pickling of Element.
Eli Bendersky <eliben@gmail.com>
parents:
81363
diff
changeset
|
895 self->text = text ? text : Py_None; |
|
81359
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
896 Py_INCREF(self->text); |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
897 |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
898 Py_CLEAR(self->tail); |
|
81445
5b36768b9a11
Issue #16076: fix refleak in pickling of Element.
Eli Bendersky <eliben@gmail.com>
parents:
81363
diff
changeset
|
899 self->tail = tail ? tail : Py_None; |
|
81359
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
900 Py_INCREF(self->tail); |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
901 |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
902 /* Handle ATTRIB and CHILDREN. */ |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
903 if (!children && !attrib) |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
904 Py_RETURN_NONE; |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
905 |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
906 /* Compute 'nchildren'. */ |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
907 if (children) { |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
908 if (!PyList_Check(children)) { |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
909 PyErr_SetString(PyExc_TypeError, "'_children' is not a list"); |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
910 return NULL; |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
911 } |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
912 nchildren = PyList_Size(children); |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
913 } |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
914 else { |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
915 nchildren = 0; |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
916 } |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
917 |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
918 /* Allocate 'extra'. */ |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
919 if (element_resize(self, nchildren)) { |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
920 return NULL; |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
921 } |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
922 assert(self->extra && self->extra->allocated >= nchildren); |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
923 |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
924 /* Copy children */ |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
925 for (i = 0; i < nchildren; i++) { |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
926 self->extra->children[i] = PyList_GET_ITEM(children, i); |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
927 Py_INCREF(self->extra->children[i]); |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
928 } |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
929 |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
930 self->extra->length = nchildren; |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
931 self->extra->allocated = nchildren; |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
932 |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
933 /* Stash attrib. */ |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
934 if (attrib) { |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
935 Py_CLEAR(self->extra->attrib); |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
936 self->extra->attrib = attrib; |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
937 Py_INCREF(attrib); |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
938 } |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
939 |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
940 Py_RETURN_NONE; |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
941 } |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
942 |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
943 /* __setstate__ for Element instance from the Python implementation. |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
944 * 'state' should be the instance dict. |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
945 */ |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
946 static PyObject * |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
947 element_setstate_from_Python(ElementObject *self, PyObject *state) |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
948 { |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
949 static char *kwlist[] = {PICKLED_TAG, PICKLED_ATTRIB, PICKLED_TEXT, |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
950 PICKLED_TAIL, PICKLED_CHILDREN, 0}; |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
951 PyObject *args; |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
952 PyObject *tag, *attrib, *text, *tail, *children; |
|
81447
4501813ea676
Issue #16076: check for return value of PyTuple_New for args (following
Eli Bendersky <eliben@gmail.com>
parents:
81445
diff
changeset
|
953 PyObject *retval; |
|
4501813ea676
Issue #16076: check for return value of PyTuple_New for args (following
Eli Bendersky <eliben@gmail.com>
parents:
81445
diff
changeset
|
954 |
|
81359
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
955 tag = attrib = text = tail = children = NULL; |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
956 args = PyTuple_New(0); |
|
81447
4501813ea676
Issue #16076: check for return value of PyTuple_New for args (following
Eli Bendersky <eliben@gmail.com>
parents:
81445
diff
changeset
|
957 if (!args) |
|
4501813ea676
Issue #16076: check for return value of PyTuple_New for args (following
Eli Bendersky <eliben@gmail.com>
parents:
81445
diff
changeset
|
958 return NULL; |
|
4501813ea676
Issue #16076: check for return value of PyTuple_New for args (following
Eli Bendersky <eliben@gmail.com>
parents:
81445
diff
changeset
|
959 |
|
4501813ea676
Issue #16076: check for return value of PyTuple_New for args (following
Eli Bendersky <eliben@gmail.com>
parents:
81445
diff
changeset
|
960 if (PyArg_ParseTupleAndKeywords(args, state, "|$OOOOO", kwlist, &tag, |
|
4501813ea676
Issue #16076: check for return value of PyTuple_New for args (following
Eli Bendersky <eliben@gmail.com>
parents:
81445
diff
changeset
|
961 &attrib, &text, &tail, &children)) |
|
4501813ea676
Issue #16076: check for return value of PyTuple_New for args (following
Eli Bendersky <eliben@gmail.com>
parents:
81445
diff
changeset
|
962 retval = element_setstate_from_attributes(self, tag, attrib, text, |
|
4501813ea676
Issue #16076: check for return value of PyTuple_New for args (following
Eli Bendersky <eliben@gmail.com>
parents:
81445
diff
changeset
|
963 tail, children); |
|
4501813ea676
Issue #16076: check for return value of PyTuple_New for args (following
Eli Bendersky <eliben@gmail.com>
parents:
81445
diff
changeset
|
964 else |
|
4501813ea676
Issue #16076: check for return value of PyTuple_New for args (following
Eli Bendersky <eliben@gmail.com>
parents:
81445
diff
changeset
|
965 retval = NULL; |
|
4501813ea676
Issue #16076: check for return value of PyTuple_New for args (following
Eli Bendersky <eliben@gmail.com>
parents:
81445
diff
changeset
|
966 |
|
81359
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
967 Py_DECREF(args); |
|
81447
4501813ea676
Issue #16076: check for return value of PyTuple_New for args (following
Eli Bendersky <eliben@gmail.com>
parents:
81445
diff
changeset
|
968 return retval; |
|
81359
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
969 } |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
970 |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
971 static PyObject * |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
972 element_setstate(ElementObject *self, PyObject *state) |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
973 { |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
974 if (!PyDict_CheckExact(state)) { |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
975 PyErr_Format(PyExc_TypeError, |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
976 "Don't know how to unpickle \"%.200R\" as an Element", |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
977 state); |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
978 return NULL; |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
979 } |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
980 else |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
981 return element_setstate_from_Python(self, state); |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
982 } |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
983 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
984 LOCAL(int) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
985 checkpath(PyObject* tag) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
986 { |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
987 Py_ssize_t i; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
988 int check = 1; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
989 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
990 /* 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
|
991 |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
992 #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
|
993 (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
|
994 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
995 if (PyUnicode_Check(tag)) { |
| 72475 | 996 const Py_ssize_t len = PyUnicode_GET_LENGTH(tag); |
| 997 void *data = PyUnicode_DATA(tag); | |
| 998 unsigned int kind = PyUnicode_KIND(tag); | |
| 999 for (i = 0; i < len; i++) { | |
| 1000 Py_UCS4 ch = PyUnicode_READ(kind, data, i); | |
| 1001 if (ch == '{') | |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1002 check = 0; |
| 72475 | 1003 else if (ch == '}') |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1004 check = 1; |
| 72475 | 1005 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
|
1006 return 1; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1007 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1008 return 0; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1009 } |
|
47301
23ab586c427a
Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents:
44742
diff
changeset
|
1010 if (PyBytes_Check(tag)) { |
|
23ab586c427a
Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents:
44742
diff
changeset
|
1011 char *p = PyBytes_AS_STRING(tag); |
|
23ab586c427a
Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents:
44742
diff
changeset
|
1012 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
|
1013 if (p[i] == '{') |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1014 check = 0; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1015 else if (p[i] == '}') |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1016 check = 1; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1017 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
|
1018 return 1; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1019 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1020 return 0; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1021 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1022 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1023 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
|
1024 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1025 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1026 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
|
1027 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
|
1028 { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1029 PyObject* seq; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1030 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
|
1031 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1032 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
|
1033 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
|
1034 return NULL; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1035 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1036 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
|
1037 if (!seq) { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1038 PyErr_Format( |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1039 PyExc_TypeError, |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1040 "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
|
1041 ); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1042 return NULL; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1043 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1044 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1045 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
|
1046 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
|
1047 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
|
1048 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
|
1049 Py_DECREF(seq); |
|
75268a773455
Issue #13782: streamline argument type-checking in ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75722
diff
changeset
|
1050 PyErr_Format( |
|
75268a773455
Issue #13782: streamline argument type-checking in ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75722
diff
changeset
|
1051 PyExc_TypeError, |
|
75268a773455
Issue #13782: streamline argument type-checking in ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75722
diff
changeset
|
1052 "expected an Element, not \"%.200s\"", |
|
75268a773455
Issue #13782: streamline argument type-checking in ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75722
diff
changeset
|
1053 Py_TYPE(element)->tp_name); |
|
75268a773455
Issue #13782: streamline argument type-checking in ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75722
diff
changeset
|
1054 return NULL; |
|
75268a773455
Issue #13782: streamline argument type-checking in ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75722
diff
changeset
|
1055 } |
|
75268a773455
Issue #13782: streamline argument type-checking in ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75722
diff
changeset
|
1056 |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1057 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
|
1058 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
|
1059 return NULL; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1060 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1061 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1062 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1063 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
|
1064 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1065 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
|
1066 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1067 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1068 static PyObject* |
|
77217
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
1069 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
|
1070 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1071 int i; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1072 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
|
1073 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
|
1074 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
|
1075 |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
1076 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
|
1077 &tag, &namespaces)) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1078 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1079 |
|
72835
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
72475
diff
changeset
|
1080 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
|
1081 _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
|
1082 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
|
1083 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
|
1084 ); |
|
72835
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
72475
diff
changeset
|
1085 } |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1086 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1087 if (!self->extra) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1088 Py_RETURN_NONE; |
|
68804
d0fe7489c4cc
_elementtree.c: remove trailing spaces
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66799
diff
changeset
|
1089 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1090 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
|
1091 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
|
1092 if (Element_CheckExact(item) && |
|
51244
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
48660
diff
changeset
|
1093 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
|
1094 Py_INCREF(item); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1095 return item; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1096 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1097 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1098 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1099 Py_RETURN_NONE; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1100 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1101 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1102 static PyObject* |
|
77217
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
1103 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
|
1104 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1105 int i; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1106 PyObject* tag; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1107 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
|
1108 PyObject* namespaces = Py_None; |
|
72925
7109f31300fb
Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents:
72835
diff
changeset
|
1109 _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
|
1110 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
|
1111 |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
1112 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
|
1113 &tag, &default_value, &namespaces)) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1114 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1115 |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1116 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
|
1117 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
|
1118 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
|
1119 ); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1120 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1121 if (!self->extra) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1122 Py_INCREF(default_value); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1123 return default_value; |
|
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 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
|
1127 ElementObject* item = (ElementObject*) self->extra->children[i]; |
|
51244
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
48660
diff
changeset
|
1128 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
|
1129 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1130 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
|
1131 if (text == Py_None) |
|
81486
6323e5f1ed81
Issue #16922: fixed findtext() to return empty Unicode string instead of empty bytes object when there's no text.
Eli Bendersky <eliben@gmail.com>
parents:
81485
diff
changeset
|
1132 return PyUnicode_New(0, 0); |
|
39610
3674f20ac781
Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents:
39442
diff
changeset
|
1133 Py_XINCREF(text); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1134 return text; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1135 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1136 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1137 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1138 Py_INCREF(default_value); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1139 return default_value; |
|
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 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1142 static PyObject* |
|
77217
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
1143 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
|
1144 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1145 int i; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1146 PyObject* out; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1147 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
|
1148 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
|
1149 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
|
1150 |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
1151 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
|
1152 &tag, &namespaces)) |
|
36050
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 |
|
72835
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
72475
diff
changeset
|
1155 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
|
1156 _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
|
1157 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
|
1158 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
|
1159 ); |
|
72835
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
72475
diff
changeset
|
1160 } |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1161 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1162 out = PyList_New(0); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1163 if (!out) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1164 return NULL; |
|
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 if (!self->extra) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1167 return out; |
|
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 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
|
1170 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
|
1171 if (Element_CheckExact(item) && |
|
51244
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
48660
diff
changeset
|
1172 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
|
1173 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
|
1174 Py_DECREF(out); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1175 return NULL; |
|
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 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1179 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1180 return out; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1181 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1182 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1183 static PyObject* |
|
77217
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
1184 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
|
1185 { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1186 PyObject* tag; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1187 PyObject* namespaces = Py_None; |
|
72925
7109f31300fb
Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents:
72835
diff
changeset
|
1188 _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
|
1189 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
|
1190 |
|
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
1191 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
|
1192 &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
|
1193 return NULL; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1194 |
|
72835
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
72475
diff
changeset
|
1195 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
|
1196 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
|
1197 ); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1198 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1199 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1200 static PyObject* |
|
81296
c1fc6b6d1cfc
The get() and iter() are now able to accept keyword arguments.
Eli Bendersky <eliben@gmail.com>
parents:
79460
diff
changeset
|
1201 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
|
1202 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1203 PyObject* value; |
|
81296
c1fc6b6d1cfc
The get() and iter() are now able to accept keyword arguments.
Eli Bendersky <eliben@gmail.com>
parents:
79460
diff
changeset
|
1204 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
|
1205 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1206 PyObject* key; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1207 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
|
1208 |
|
c1fc6b6d1cfc
The get() and iter() are now able to accept keyword arguments.
Eli Bendersky <eliben@gmail.com>
parents:
79460
diff
changeset
|
1209 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
|
1210 &default_value)) |
|
36050
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 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1213 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
|
1214 value = default_value; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1215 else { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1216 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
|
1217 if (!value) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1218 value = default_value; |
|
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 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1221 Py_INCREF(value); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1222 return value; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1223 } |
|
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 static PyObject* |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1226 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
|
1227 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1228 int i; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1229 PyObject* list; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1230 |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1231 /* 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
|
1232 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1233 if (!PyArg_ParseTuple(args, ":getchildren")) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1234 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1235 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1236 if (!self->extra) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1237 return PyList_New(0); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1238 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1239 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
|
1240 if (!list) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1241 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1242 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1243 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
|
1244 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
|
1245 Py_INCREF(item); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1246 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
|
1247 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1248 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1249 return 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 |
|
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
|
1252 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1253 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
|
1254 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
|
1255 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1256 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
1257 static PyObject * |
|
81296
c1fc6b6d1cfc
The get() and iter() are now able to accept keyword arguments.
Eli Bendersky <eliben@gmail.com>
parents:
79460
diff
changeset
|
1258 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
|
1259 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1260 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
|
1261 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
|
1262 |
|
c1fc6b6d1cfc
The get() and iter() are now able to accept keyword arguments.
Eli Bendersky <eliben@gmail.com>
parents:
79460
diff
changeset
|
1263 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
|
1264 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1265 |
|
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
|
1266 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
|
1267 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1268 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1269 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1270 static PyObject* |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1271 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
|
1272 { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1273 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
|
1274 return NULL; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1275 |
|
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
|
1276 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
|
1277 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1278 |
|
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
|
1279 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1280 static PyObject* |
|
36954
db5e720b0cef
merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents:
36684
diff
changeset
|
1281 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
|
1282 { |
|
36954
db5e720b0cef
merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents:
36684
diff
changeset
|
1283 ElementObject* self = (ElementObject*) self_; |
|
db5e720b0cef
merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents:
36684
diff
changeset
|
1284 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1285 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
|
1286 PyErr_SetString( |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1287 PyExc_IndexError, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1288 "child index out of range" |
|
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 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1291 } |
|
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_INCREF(self->extra->children[index]); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1294 return self->extra->children[index]; |
|
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 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1297 static PyObject* |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1298 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
|
1299 { |
|
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 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1302 int index; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1303 PyObject* element; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1304 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
|
1305 &Element_Type, &element)) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1306 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1307 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1308 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
|
1309 create_extra(self, NULL); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1310 |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1311 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
|
1312 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
|
1313 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
|
1314 index = 0; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1315 } |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1316 if (index > self->extra->length) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1317 index = self->extra->length; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1318 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1319 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
|
1320 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1321 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1322 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
|
1323 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
|
1324 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1325 Py_INCREF(element); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1326 self->extra->children[index] = element; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1327 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1328 self->extra->length++; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1329 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1330 Py_RETURN_NONE; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1331 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1332 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1333 static PyObject* |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1334 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
|
1335 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1336 if (!PyArg_ParseTuple(args, ":items")) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1337 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1338 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1339 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
|
1340 return PyList_New(0); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1341 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1342 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
|
1343 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1344 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1345 static PyObject* |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1346 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
|
1347 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1348 if (!PyArg_ParseTuple(args, ":keys")) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1349 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1350 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1351 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
|
1352 return PyList_New(0); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1353 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1354 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
|
1355 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1356 |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36450
diff
changeset
|
1357 static Py_ssize_t |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1358 element_length(ElementObject* self) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1359 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1360 if (!self->extra) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1361 return 0; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1362 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1363 return self->extra->length; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1364 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1365 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1366 static PyObject* |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1367 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
|
1368 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1369 PyObject* elem; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1370 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1371 PyObject* tag; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1372 PyObject* attrib; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1373 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
|
1374 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1375 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1376 attrib = PyDict_Copy(attrib); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1377 if (!attrib) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1378 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1379 |
|
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
|
1380 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
|
1381 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1382 Py_DECREF(attrib); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1383 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1384 return elem; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1385 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1386 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1387 static PyObject* |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1388 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
|
1389 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1390 int i; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1391 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1392 PyObject* element; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1393 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
|
1394 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1395 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1396 if (!self->extra) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1397 /* 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
|
1398 PyErr_SetString( |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1399 PyExc_ValueError, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1400 "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
|
1401 ); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1402 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1403 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1404 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1405 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
|
1406 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
|
1407 break; |
|
51244
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
48660
diff
changeset
|
1408 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
|
1409 break; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1410 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1411 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1412 if (i == self->extra->length) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1413 /* 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
|
1414 PyErr_SetString( |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1415 PyExc_ValueError, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1416 "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
|
1417 ); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1418 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1419 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1420 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1421 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
|
1422 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1423 self->extra->length--; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1424 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1425 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
|
1426 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
|
1427 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1428 Py_RETURN_NONE; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1429 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1430 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1431 static PyObject* |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1432 element_repr(ElementObject* self) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1433 { |
|
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
|
1434 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
|
1435 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
|
1436 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
|
1437 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
|
1438 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1439 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1440 static PyObject* |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1441 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
|
1442 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1443 PyObject* attrib; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1444 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1445 PyObject* key; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1446 PyObject* value; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1447 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
|
1448 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1449 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1450 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
|
1451 create_extra(self, NULL); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1452 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1453 attrib = element_get_attrib(self); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1454 if (!attrib) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1455 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1456 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1457 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
|
1458 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1459 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1460 Py_RETURN_NONE; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1461 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1462 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1463 static int |
|
36954
db5e720b0cef
merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents:
36684
diff
changeset
|
1464 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
|
1465 { |
|
36954
db5e720b0cef
merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents:
36684
diff
changeset
|
1466 ElementObject* self = (ElementObject*) self_; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1467 int i; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1468 PyObject* old; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1469 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1470 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
|
1471 PyErr_SetString( |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1472 PyExc_IndexError, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1473 "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
|
1474 return -1; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1475 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1476 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1477 old = self->extra->children[index]; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1478 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1479 if (item) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1480 Py_INCREF(item); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1481 self->extra->children[index] = item; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1482 } else { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1483 self->extra->length--; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1484 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
|
1485 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
|
1486 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1487 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1488 Py_DECREF(old); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1489 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1490 return 0; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1491 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1492 |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1493 static PyObject* |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1494 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
|
1495 { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1496 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
|
1497 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1498 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
|
1499 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
|
1500 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1501 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
|
1502 return NULL; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1503 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1504 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
|
1505 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
|
1506 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
|
1507 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1508 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
|
1509 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
|
1510 PyObject* list; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1511 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1512 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
|
1513 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
|
1514 |
|
66664
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65707
diff
changeset
|
1515 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
|
1516 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
|
1517 &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
|
1518 return NULL; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1519 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1520 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1521 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
|
1522 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
|
1523 else { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1524 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
|
1525 if (!list) |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1526 return NULL; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1527 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1528 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
|
1529 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
|
1530 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
|
1531 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
|
1532 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
|
1533 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1534 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1535 return list; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1536 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1537 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1538 else { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1539 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
|
1540 "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
|
1541 return NULL; |
|
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 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1544 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1545 static int |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1546 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
|
1547 { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1548 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
|
1549 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1550 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
|
1551 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
|
1552 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1553 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
|
1554 return -1; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1555 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1556 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
|
1557 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
|
1558 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
|
1559 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1560 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
|
1561 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
|
1562 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1563 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
|
1564 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
|
1565 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1566 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
|
1567 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
|
1568 |
|
66664
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65707
diff
changeset
|
1569 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
|
1570 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
|
1571 &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
|
1572 return -1; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1573 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1574 |
|
75505
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1575 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
|
1576 /* Delete slice */ |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1577 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
|
1578 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
|
1579 |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1580 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
|
1581 return 0; |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1582 |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1583 /* 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
|
1584 * 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
|
1585 */ |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1586 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
|
1587 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
|
1588 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
|
1589 step = -step; |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1590 } |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1591 |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1592 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
|
1593 |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1594 /* 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
|
1595 * 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
|
1596 */ |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1597 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
|
1598 PyErr_NoMemory(); |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1599 return -1; |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1600 } |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1601 |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1602 /* 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
|
1603 * 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
|
1604 * 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
|
1605 * 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
|
1606 * 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
|
1607 * 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
|
1608 */ |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1609 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
|
1610 /* 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
|
1611 * list end. |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1612 */ |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1613 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
|
1614 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
|
1615 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
|
1616 } |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1617 |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1618 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
|
1619 |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1620 memmove( |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1621 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
|
1622 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
|
1623 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
|
1624 } |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1625 |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1626 /* 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
|
1627 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
|
1628 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
|
1629 memmove( |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1630 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
|
1631 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
|
1632 (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
|
1633 } |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1634 |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1635 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
|
1636 |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1637 /* 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
|
1638 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
|
1639 return 0; |
|
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1640 } |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1641 else { |
|
75505
1a721b9a4039
Issue #14178: Problem deleting slices with steps != +1 in the _elementtree module.
Eli Bendersky <eliben@gmail.com>
parents:
75410
diff
changeset
|
1642 /* 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
|
1643 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
|
1644 if (!seq) { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1645 PyErr_Format( |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1646 PyExc_TypeError, |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1647 "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
|
1648 ); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1649 return -1; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1650 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1651 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
|
1652 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1653 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1654 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
|
1655 { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1656 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
|
1657 "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
|
1658 "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
|
1659 newlen, slicelen |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1660 ); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1661 return -1; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1662 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1663 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1664 /* 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
|
1665 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
|
1666 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
|
1667 if (seq) { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1668 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
|
1669 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1670 return -1; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1671 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1672 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1673 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1674 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
|
1675 /* 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
|
1676 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
|
1677 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
|
1678 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
|
1679 if (!recycle) { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1680 if (seq) { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1681 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
|
1682 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1683 return -1; |
|
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 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
|
1686 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
|
1687 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
|
1688 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1689 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1690 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
|
1691 /* delete slice */ |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1692 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
|
1693 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
|
1694 } 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
|
1695 /* insert slice */ |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1696 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
|
1697 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
|
1698 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1699 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1700 /* 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
|
1701 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
|
1702 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
|
1703 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
|
1704 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
|
1705 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
|
1706 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1707 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1708 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
|
1709 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1710 if (seq) { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1711 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
|
1712 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1713 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1714 /* 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
|
1715 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
|
1716 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1717 return 0; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1718 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1719 else { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1720 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
|
1721 "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
|
1722 return -1; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1723 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1724 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1725 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1726 static PyMethodDef element_methods[] = { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1727 |
|
75997
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
1728 {"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
|
1729 |
|
81296
c1fc6b6d1cfc
The get() and iter() are now able to accept keyword arguments.
Eli Bendersky <eliben@gmail.com>
parents:
79460
diff
changeset
|
1730 {"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
|
1731 {"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
|
1732 |
|
77217
7d252dbfbee3
Issue 14814: Add namespaces keyword arg to find(*) methods in _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77062
diff
changeset
|
1733 {"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
|
1734 {"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
|
1735 {"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
|
1736 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1737 {"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
|
1738 {"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
|
1739 {"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
|
1740 {"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
|
1741 |
|
81296
c1fc6b6d1cfc
The get() and iter() are now able to accept keyword arguments.
Eli Bendersky <eliben@gmail.com>
parents:
79460
diff
changeset
|
1742 {"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
|
1743 {"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
|
1744 {"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
|
1745 |
|
81296
c1fc6b6d1cfc
The get() and iter() are now able to accept keyword arguments.
Eli Bendersky <eliben@gmail.com>
parents:
79460
diff
changeset
|
1746 {"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
|
1747 {"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
|
1748 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1749 {"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
|
1750 {"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
|
1751 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1752 {"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
|
1753 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1754 {"__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
|
1755 {"__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
|
1756 {"__sizeof__", element_sizeof, METH_NOARGS}, |
|
81359
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
1757 {"__getstate__", (PyCFunction)element_getstate, METH_NOARGS}, |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
1758 {"__setstate__", (PyCFunction)element_setstate, METH_O}, |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1759 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1760 {NULL, NULL} |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1761 }; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1762 |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1763 static PyObject* |
|
48414
4025f638911f
#3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1764 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
|
1765 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1766 PyObject* res; |
|
48414
4025f638911f
#3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1767 char *name = ""; |
|
4025f638911f
#3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1768 |
|
4025f638911f
#3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1769 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
|
1770 name = _PyUnicode_AsString(nameobj); |
|
68804
d0fe7489c4cc
_elementtree.c: remove trailing spaces
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66799
diff
changeset
|
1771 |
|
66799
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66664
diff
changeset
|
1772 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
|
1773 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
|
1774 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1775 /* 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
|
1776 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
|
1777 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
|
1778 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
|
1779 return res; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1780 } 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
|
1781 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
|
1782 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
|
1783 return res; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1784 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1785 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1786 /* methods */ |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1787 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
|
1788 if (res) |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1789 return res; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1790 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1791 /* 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
|
1792 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
|
1793 PyErr_Clear(); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1794 res = element_get_tail(self); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1795 } 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
|
1796 PyErr_Clear(); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1797 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
|
1798 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
|
1799 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
|
1800 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1801 |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1802 if (!res) |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1803 return NULL; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1804 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1805 Py_INCREF(res); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1806 return res; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1807 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1808 |
|
77062
41a9d24d075e
Issue #14849: setup Element data members to be assignable in subclasses
Eli Bendersky <eliben@gmail.com>
parents:
76110
diff
changeset
|
1809 static PyObject* |
|
41a9d24d075e
Issue #14849: setup Element data members to be assignable in subclasses
Eli Bendersky <eliben@gmail.com>
parents:
76110
diff
changeset
|
1810 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
|
1811 { |
|
77062
41a9d24d075e
Issue #14849: setup Element data members to be assignable in subclasses
Eli Bendersky <eliben@gmail.com>
parents:
76110
diff
changeset
|
1812 char *name = ""; |
|
41a9d24d075e
Issue #14849: setup Element data members to be assignable in subclasses
Eli Bendersky <eliben@gmail.com>
parents:
76110
diff
changeset
|
1813 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
|
1814 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
|
1815 |
|
41a9d24d075e
Issue #14849: setup Element data members to be assignable in subclasses
Eli Bendersky <eliben@gmail.com>
parents:
76110
diff
changeset
|
1816 if (name == NULL) |
|
41a9d24d075e
Issue #14849: setup Element data members to be assignable in subclasses
Eli Bendersky <eliben@gmail.com>
parents:
76110
diff
changeset
|
1817 return NULL; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1818 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1819 if (strcmp(name, "tag") == 0) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1820 Py_DECREF(self->tag); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1821 self->tag = value; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1822 Py_INCREF(self->tag); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1823 } 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
|
1824 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
|
1825 self->text = value; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1826 Py_INCREF(self->text); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1827 } 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
|
1828 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
|
1829 self->tail = value; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1830 Py_INCREF(self->tail); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1831 } 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
|
1832 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
|
1833 create_extra(self, NULL); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1834 Py_DECREF(self->extra->attrib); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1835 self->extra->attrib = value; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1836 Py_INCREF(self->extra->attrib); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1837 } else { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1838 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
|
1839 return NULL; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1840 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1841 |
|
77062
41a9d24d075e
Issue #14849: setup Element data members to be assignable in subclasses
Eli Bendersky <eliben@gmail.com>
parents:
76110
diff
changeset
|
1842 return NULL; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1843 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1844 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1845 static PySequenceMethods element_as_sequence = { |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36450
diff
changeset
|
1846 (lenfunc) element_length, |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1847 0, /* sq_concat */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1848 0, /* sq_repeat */ |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36450
diff
changeset
|
1849 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
|
1850 0, |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36450
diff
changeset
|
1851 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
|
1852 0, |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1853 }; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1854 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
1855 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
|
1856 (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
|
1857 (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
|
1858 (objobjargproc) element_ass_subscr, |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1859 }; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1860 |
|
37144
91dd4d44d3bc
Finish getting rid of statichere/staticforward
Neal Norwitz <nnorwitz@gmail.com>
parents:
36954
diff
changeset
|
1861 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
|
1862 PyVarObject_HEAD_INIT(NULL, 0) |
|
81359
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
1863 "xml.etree.ElementTree.Element", sizeof(ElementObject), 0, |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1864 /* 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
|
1865 (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
|
1866 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
|
1867 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
|
1868 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
|
1869 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
|
1870 (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
|
1871 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
|
1872 &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
|
1873 &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
|
1874 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
|
1875 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
|
1876 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
|
1877 (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
|
1878 (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
|
1879 0, /* tp_as_buffer */ |
|
75997
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
1880 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
|
1881 /* 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
|
1882 0, /* tp_doc */ |
|
75997
0ca32013d77e
Issue #14065: Added cyclic GC support to ET.Element
Eli Bendersky <eliben@gmail.com>
parents:
75894
diff
changeset
|
1883 (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
|
1884 (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
|
1885 0, /* tp_richcompare */ |
|
76098
14abfa27ff19
Fixes and enhancements to _elementtree:
Eli Bendersky <eliben@gmail.com>
parents:
75997
diff
changeset
|
1886 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
|
1887 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
|
1888 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
|
1889 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
|
1890 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
|
1891 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
|
1892 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
|
1893 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
|
1894 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
|
1895 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
|
1896 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
|
1897 (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
|
1898 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
|
1899 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
|
1900 0, /* tp_free */ |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1901 }; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1902 |
|
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
|
1903 /******************************* 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
|
1904 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the 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 /* 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
|
1906 * 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
|
1907 * 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
|
1908 * 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
|
1909 * 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
|
1910 * 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
|
1911 * 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
|
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 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
|
1914 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
|
1915 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
|
1916 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
|
1917 } 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
|
1918 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the 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 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
|
1920 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
|
1921 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
|
1922 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
|
1923 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
|
1924 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
|
1925 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
|
1926 } 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
|
1927 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the 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 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the 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 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
|
1930 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
|
1931 { |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the 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 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
|
1933 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
|
1934 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
|
1935 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
|
1936 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
|
1937 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
|
1938 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the 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 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the 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 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
|
1941 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
|
1942 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the 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 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
|
1944 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
|
1945 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the 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 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the 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 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
|
1948 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
|
1949 { |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the 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 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
|
1951 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
|
1952 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
|
1953 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
|
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 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
|
1957 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
|
1958 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
|
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 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the 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 /* 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
|
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 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
|
1964 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
|
1965 { |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the 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 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
|
1967 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
|
1968 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
|
1969 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
|
1970 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
|
1971 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
|
1972 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the 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 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
|
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 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the 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 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
|
1977 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
|
1978 { |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the 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 /* Sub-element iterator. |
|
81479
7e072816b197
Clean trailing whitespace in _elementtree.c
Eli Bendersky <eliben@gmail.com>
parents:
81447
diff
changeset
|
1980 * |
|
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
|
1981 * 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
|
1982 * 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
|
1983 * 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
|
1984 * - 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
|
1985 * 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
|
1986 * 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
|
1987 * - 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
|
1988 * 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
|
1989 */ |
|
77432
3c089edbf02c
Fix windows compilation problems caused by previous commit.
Eli Bendersky <eliben@gmail.com>
parents:
77431
diff
changeset
|
1990 ElementObject *cur_parent; |
|
3c089edbf02c
Fix windows compilation problems caused by previous commit.
Eli Bendersky <eliben@gmail.com>
parents:
77431
diff
changeset
|
1991 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
|
1992 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the 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 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
|
1994 /* 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
|
1995 * 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
|
1996 * 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
|
1997 * 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
|
1998 * 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
|
1999 */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
2000 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
|
2001 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
|
2002 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
|
2003 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
|
2004 } 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
|
2005 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
|
2006 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
|
2007 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
|
2008 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
|
2009 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
|
2010 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
2011 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
2012 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
|
2013 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
|
2014 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
|
2015 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
|
2016 if (it->gettext) { |
|
81363
d965ff47cf94
Issue #16913: Fix Element.itertext()'s handling of text with XML entities.
Eli Bendersky <eliben@gmail.com>
parents:
81359
diff
changeset
|
2017 PyObject *text = element_get_text(it->root_element); |
|
d965ff47cf94
Issue #16913: Fix Element.itertext()'s handling of text with XML entities.
Eli Bendersky <eliben@gmail.com>
parents:
81359
diff
changeset
|
2018 if (!text) |
|
d965ff47cf94
Issue #16913: Fix Element.itertext()'s handling of text with XML entities.
Eli Bendersky <eliben@gmail.com>
parents:
81359
diff
changeset
|
2019 return NULL; |
|
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
|
2020 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
|
2021 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
|
2022 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
|
2023 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
2024 } 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
|
2025 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
|
2026 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
|
2027 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
2028 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
2029 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
2030 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
2031 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
2032 /* 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
|
2033 * 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
|
2034 */ |
|
77432
3c089edbf02c
Fix windows compilation problems caused by previous commit.
Eli Bendersky <eliben@gmail.com>
parents:
77431
diff
changeset
|
2035 cur_parent = it->parent_stack->parent; |
|
3c089edbf02c
Fix windows compilation problems caused by previous commit.
Eli Bendersky <eliben@gmail.com>
parents:
77431
diff
changeset
|
2036 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
|
2037 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
|
2038 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
|
2039 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
|
2040 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
|
2041 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
|
2042 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
|
2043 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
|
2044 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
|
2045 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
|
2046 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
2047 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
2048 if (it->gettext) { |
|
81363
d965ff47cf94
Issue #16913: Fix Element.itertext()'s handling of text with XML entities.
Eli Bendersky <eliben@gmail.com>
parents:
81359
diff
changeset
|
2049 PyObject *text = element_get_text(child); |
|
d965ff47cf94
Issue #16913: Fix Element.itertext()'s handling of text with XML entities.
Eli Bendersky <eliben@gmail.com>
parents:
81359
diff
changeset
|
2050 if (!text) |
|
d965ff47cf94
Issue #16913: Fix Element.itertext()'s handling of text with XML entities.
Eli Bendersky <eliben@gmail.com>
parents:
81359
diff
changeset
|
2051 return NULL; |
|
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
|
2052 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
|
2053 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
|
2054 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
|
2055 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
2056 } 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
|
2057 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
|
2058 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
|
2059 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
|
2060 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
|
2061 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
2062 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
|
2063 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
|
2064 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
2065 else { |
|
81363
d965ff47cf94
Issue #16913: Fix Element.itertext()'s handling of text with XML entities.
Eli Bendersky <eliben@gmail.com>
parents:
81359
diff
changeset
|
2066 PyObject *tail; |
|
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
|
2067 ParentLocator *next = it->parent_stack->next; |
|
81363
d965ff47cf94
Issue #16913: Fix Element.itertext()'s handling of text with XML entities.
Eli Bendersky <eliben@gmail.com>
parents:
81359
diff
changeset
|
2068 if (it->gettext) { |
|
d965ff47cf94
Issue #16913: Fix Element.itertext()'s handling of text with XML entities.
Eli Bendersky <eliben@gmail.com>
parents:
81359
diff
changeset
|
2069 tail = element_get_tail(cur_parent); |
|
d965ff47cf94
Issue #16913: Fix Element.itertext()'s handling of text with XML entities.
Eli Bendersky <eliben@gmail.com>
parents:
81359
diff
changeset
|
2070 if (!tail) |
|
d965ff47cf94
Issue #16913: Fix Element.itertext()'s handling of text with XML entities.
Eli Bendersky <eliben@gmail.com>
parents:
81359
diff
changeset
|
2071 return NULL; |
|
d965ff47cf94
Issue #16913: Fix Element.itertext()'s handling of text with XML entities.
Eli Bendersky <eliben@gmail.com>
parents:
81359
diff
changeset
|
2072 } |
|
d965ff47cf94
Issue #16913: Fix Element.itertext()'s handling of text with XML entities.
Eli Bendersky <eliben@gmail.com>
parents:
81359
diff
changeset
|
2073 else |
|
d965ff47cf94
Issue #16913: Fix Element.itertext()'s handling of text with XML entities.
Eli Bendersky <eliben@gmail.com>
parents:
81359
diff
changeset
|
2074 tail = Py_None; |
|
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
|
2075 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
|
2076 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
|
2077 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
|
2078 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
2079 /* 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
|
2080 * 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
|
2081 * 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
|
2082 */ |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
2083 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
|
2084 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
|
2085 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
|
2086 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
2087 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
2088 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
2089 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
2090 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
|
2091 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
2092 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
2093 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
2094 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
|
2095 PyVarObject_HEAD_INIT(NULL, 0) |
|
81359
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
2096 /* Using the module's name since the pure-Python implementation does not |
|
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
2097 have such a type. */ |
|
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
|
2098 "_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
|
2099 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
|
2100 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
|
2101 /* 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
|
2102 (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
|
2103 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
|
2104 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
|
2105 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
|
2106 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
|
2107 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
|
2108 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
|
2109 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
|
2110 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
|
2111 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
|
2112 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
|
2113 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
|
2114 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
|
2115 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
|
2116 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
|
2117 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
|
2118 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
|
2119 (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
|
2120 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
|
2121 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
|
2122 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
|
2123 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
|
2124 (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
|
2125 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
|
2126 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
|
2127 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
|
2128 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
|
2129 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
|
2130 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
|
2131 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
|
2132 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
|
2133 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
|
2134 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
|
2135 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
|
2136 }; |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
2137 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
2138 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
2139 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
|
2140 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
|
2141 { |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
2142 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
|
2143 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
|
2144 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
2145 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
|
2146 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
|
2147 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
|
2148 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
|
2149 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
|
2150 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
|
2151 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
2152 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
2153 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
|
2154 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
|
2155 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
|
2156 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
2157 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
|
2158 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
|
2159 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
|
2160 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
|
2161 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
2162 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
|
2163 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
|
2164 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
2165 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
|
2166 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
|
2167 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
|
2168 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
|
2169 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
|
2170 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
2171 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
|
2172 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
|
2173 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
2174 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
|
2175 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
|
2176 } |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
2177 |
|
652d148bdc1d
Replace the iter/itertext methods of Element in _elementtree with true C implementations, instead of the bootstrapped Python code. In addition to being cleaner (removing the last remains of the bootstrapping code in _elementtree), this gives a 10x performance boost for iter() on large documents.
Eli Bendersky <eliben@gmail.com>
parents:
77313
diff
changeset
|
2178 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2179 /* ==================================================================== */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2180 /* the tree builder type */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2181 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2182 typedef struct { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2183 PyObject_HEAD |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2184 |
|
77226
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2185 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
|
2186 |
|
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
|
2187 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
|
2188 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
|
2189 |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2190 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
|
2191 |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2192 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
|
2193 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
|
2194 |
|
77246
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2195 PyObject *element_factory; |
|
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 /* 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
|
2198 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
|
2199 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
|
2200 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
|
2201 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
|
2202 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
|
2203 } TreeBuilderObject; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2204 |
|
37144
91dd4d44d3bc
Finish getting rid of statichere/staticforward
Neal Norwitz <nnorwitz@gmail.com>
parents:
36954
diff
changeset
|
2205 static PyTypeObject TreeBuilder_Type; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2206 |
|
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
|
2207 #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
|
2208 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2209 /* -------------------------------------------------------------------- */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2210 /* constructor and destructor */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2211 |
|
77226
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2212 static PyObject * |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2213 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
|
2214 { |
|
77226
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2215 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
|
2216 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
|
2217 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
|
2218 |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2219 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
|
2220 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
|
2221 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
|
2222 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
|
2223 |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2224 t->data = NULL; |
|
77246
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2225 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
|
2226 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
|
2227 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
|
2228 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
|
2229 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
|
2230 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
|
2231 return NULL; |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2232 } |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2233 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
|
2234 |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2235 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
|
2236 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
|
2237 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
|
2238 } |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2239 return (PyObject *)t; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2240 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2241 |
|
77226
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2242 static int |
|
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2243 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
|
2244 { |
|
77313
eb1d633fe307
Fix unterminated keyword array passed to PyArg_ParseTupleAndKeywords
Eli Bendersky <eliben@gmail.com>
parents:
77279
diff
changeset
|
2245 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
|
2246 PyObject *element_factory = NULL; |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2247 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
|
2248 PyObject *tmp; |
|
77246
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2249 |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2250 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
|
2251 &element_factory)) { |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2252 return -1; |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2253 } |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2254 |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2255 if (element_factory) { |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2256 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
|
2257 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
|
2258 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
|
2259 Py_XDECREF(tmp); |
|
77246
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2260 } |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2261 |
|
77226
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2262 return 0; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2263 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2264 |
|
77246
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2265 static int |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2266 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
|
2267 { |
|
77246
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2268 Py_VISIT(self->root); |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2269 Py_VISIT(self->this); |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2270 Py_VISIT(self->last); |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2271 Py_VISIT(self->data); |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2272 Py_VISIT(self->stack); |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2273 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
|
2274 return 0; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2275 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2276 |
|
77246
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2277 static int |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2278 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
|
2279 { |
|
79385
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
2280 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
|
2281 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
|
2282 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
|
2283 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
|
2284 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
|
2285 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
|
2286 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
|
2287 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
|
2288 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
|
2289 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
|
2290 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
|
2291 return 0; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2292 } |
|
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 static void |
|
77246
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2295 treebuilder_dealloc(TreeBuilderObject *self) |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2296 { |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2297 PyObject_GC_UnTrack(self); |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2298 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
|
2299 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
|
2300 } |
|
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 /* -------------------------------------------------------------------- */ |
|
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
|
2303 /* 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
|
2304 |
|
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
|
2305 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
|
2306 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
|
2307 PyObject **dest, _Py_Identifier *name) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2308 { |
|
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 (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
|
2310 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
|
2311 *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
|
2312 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
|
2313 } |
|
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
|
2314 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
|
2315 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
|
2316 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
|
2317 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
|
2318 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
|
2319 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
|
2320 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
|
2321 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
|
2322 } |
|
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
|
2323 } |
|
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
|
2324 |
|
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
|
2325 /* 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
|
2326 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
|
2327 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
|
2328 { |
|
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
|
2329 _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
|
2330 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
|
2331 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
|
2332 } |
|
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
|
2333 |
|
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
|
2334 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
|
2335 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
|
2336 { |
|
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
|
2337 _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
|
2338 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
|
2339 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
|
2340 } |
|
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
|
2341 |
|
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
|
2342 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
|
2343 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
|
2344 { |
|
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
|
2345 _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
|
2346 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
|
2347 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
|
2348 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
|
2349 } |
|
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
|
2350 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
|
2351 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
|
2352 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
|
2353 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
|
2354 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
|
2355 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
|
2356 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
|
2357 } |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2358 } |
|
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 /* -------------------------------------------------------------------- */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2361 /* handlers */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2362 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2363 LOCAL(PyObject*) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2364 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
|
2365 PyObject* attrib) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2366 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2367 PyObject* node; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2368 PyObject* this; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2369 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2370 if (self->data) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2371 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
|
2372 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
|
2373 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
|
2374 } |
|
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
|
2375 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
|
2376 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
|
2377 return NULL; |
|
36050
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 self->data = NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2380 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2381 |
|
77246
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2382 if (self->element_factory) { |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2383 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
|
2384 } else { |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2385 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
|
2386 } |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2387 if (!node) { |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2388 return NULL; |
|
77246
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2389 } |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2390 |
|
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
|
2391 this = self->this; |
|
36050
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 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
|
2394 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
|
2395 goto error; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2396 } else { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2397 if (self->root) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2398 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
|
2399 elementtree_parseerror_obj, |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2400 "multiple elements on top level" |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2401 ); |
|
36954
db5e720b0cef
merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents:
36684
diff
changeset
|
2402 goto error; |
|
36050
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 Py_INCREF(node); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2405 self->root = node; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2406 } |
|
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 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
|
2409 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
|
2410 goto error; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2411 Py_INCREF(this); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2412 } else { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2413 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
|
2414 goto error; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2415 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2416 self->index++; |
|
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 Py_DECREF(this); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2419 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
|
2420 self->this = node; |
|
36050
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 Py_DECREF(self->last); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2423 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
|
2424 self->last = node; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2425 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2426 if (self->start_event_obj) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2427 PyObject* res; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2428 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
|
2429 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
|
2430 if (res) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2431 PyList_Append(self->events, res); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2432 Py_DECREF(res); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2433 } else |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2434 PyErr_Clear(); /* FIXME: propagate error */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2435 } |
|
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 node; |
|
36954
db5e720b0cef
merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents:
36684
diff
changeset
|
2438 |
|
db5e720b0cef
merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents:
36684
diff
changeset
|
2439 error: |
|
db5e720b0cef
merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents:
36684
diff
changeset
|
2440 Py_DECREF(node); |
|
db5e720b0cef
merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents:
36684
diff
changeset
|
2441 return NULL; |
|
36050
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 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2444 LOCAL(PyObject*) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2445 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
|
2446 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2447 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
|
2448 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
|
2449 /* 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
|
2450 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
|
2451 } |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2452 /* 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
|
2453 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
|
2454 } else { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2455 /* 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
|
2456 if (PyBytes_CheckExact(self->data) && Py_REFCNT(self->data) == 1 && |
|
23ab586c427a
Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents:
44742
diff
changeset
|
2457 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
|
2458 /* 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
|
2459 /* 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
|
2460 the most common case by resizing the existing string... */ |
|
47301
23ab586c427a
Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents:
44742
diff
changeset
|
2461 Py_ssize_t size = PyBytes_GET_SIZE(self->data); |
|
23ab586c427a
Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents:
44742
diff
changeset
|
2462 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
|
2463 return NULL; |
|
47301
23ab586c427a
Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents:
44742
diff
changeset
|
2464 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
|
2465 } 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
|
2466 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
|
2467 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2468 } else { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2469 PyObject* list = PyList_New(2); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2470 if (!list) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2471 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2472 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
|
2473 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
|
2474 self->data = list; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2475 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2476 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2477 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2478 Py_RETURN_NONE; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2479 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2480 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2481 LOCAL(PyObject*) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2482 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
|
2483 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2484 PyObject* item; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2485 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2486 if (self->data) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2487 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
|
2488 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
|
2489 return NULL; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2490 } 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
|
2491 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
|
2492 return NULL; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2493 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2494 self->data = NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2495 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2496 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2497 if (self->index == 0) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2498 PyErr_SetString( |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2499 PyExc_IndexError, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2500 "pop from empty stack" |
|
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 return NULL; |
|
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 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2505 self->index--; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2506 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2507 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
|
2508 Py_INCREF(item); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2509 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2510 Py_DECREF(self->last); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2511 |
|
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
|
2512 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
|
2513 self->this = item; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2514 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2515 if (self->end_event_obj) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2516 PyObject* res; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2517 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
|
2518 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
|
2519 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
|
2520 if (res) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2521 PyList_Append(self->events, res); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2522 Py_DECREF(res); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2523 } else |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2524 PyErr_Clear(); /* FIXME: propagate error */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2525 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2526 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2527 Py_INCREF(self->last); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2528 return (PyObject*) self->last; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2529 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2530 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2531 LOCAL(void) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2532 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
|
2533 PyObject *prefix, PyObject *uri) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2534 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2535 PyObject* res; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2536 PyObject* action; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2537 PyObject* parcel; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2538 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2539 if (!self->events) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2540 return; |
|
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 if (start) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2543 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
|
2544 return; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2545 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
|
2546 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
|
2547 if (!parcel) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2548 return; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2549 Py_INCREF(action); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2550 } else { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2551 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
|
2552 return; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2553 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
|
2554 Py_INCREF(action); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2555 parcel = Py_None; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2556 Py_INCREF(parcel); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2557 } |
|
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 res = PyTuple_New(2); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2560 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2561 if (res) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2562 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
|
2563 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
|
2564 PyList_Append(self->events, res); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2565 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
|
2566 } |
|
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
2567 else { |
|
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
2568 Py_DECREF(action); |
|
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
2569 Py_DECREF(parcel); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2570 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
|
2571 } |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2572 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2573 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2574 /* -------------------------------------------------------------------- */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2575 /* methods (in alphabetical order) */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2576 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2577 static PyObject* |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2578 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
|
2579 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2580 PyObject* data; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2581 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
|
2582 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2583 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2584 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
|
2585 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2586 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2587 static PyObject* |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2588 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
|
2589 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2590 PyObject* tag; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2591 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
|
2592 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2593 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2594 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
|
2595 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2596 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2597 LOCAL(PyObject*) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2598 treebuilder_done(TreeBuilderObject* self) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2599 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2600 PyObject* res; |
|
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 /* FIXME: check stack size? */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2603 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2604 if (self->root) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2605 res = self->root; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2606 else |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2607 res = Py_None; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2608 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2609 Py_INCREF(res); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2610 return res; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2611 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2612 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2613 static PyObject* |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2614 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
|
2615 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2616 if (!PyArg_ParseTuple(args, ":close")) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2617 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2618 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2619 return treebuilder_done(self); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2620 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2621 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2622 static PyObject* |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2623 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
|
2624 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2625 PyObject* tag; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2626 PyObject* attrib = Py_None; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2627 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
|
2628 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2629 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2630 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
|
2631 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2632 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2633 static PyMethodDef treebuilder_methods[] = { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2634 {"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
|
2635 {"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
|
2636 {"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
|
2637 {"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
|
2638 {NULL, NULL} |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2639 }; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2640 |
|
37144
91dd4d44d3bc
Finish getting rid of statichere/staticforward
Neal Norwitz <nnorwitz@gmail.com>
parents:
36954
diff
changeset
|
2641 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
|
2642 PyVarObject_HEAD_INIT(NULL, 0) |
|
81359
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
2643 "xml.etree.ElementTree.TreeBuilder", sizeof(TreeBuilderObject), 0, |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2644 /* methods */ |
|
77226
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
2645 (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
|
2646 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
|
2647 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
|
2648 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
|
2649 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
|
2650 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
|
2651 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
|
2652 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
|
2653 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
|
2654 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
|
2655 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
|
2656 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
|
2657 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
|
2658 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
|
2659 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
|
2660 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
|
2661 /* 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
|
2662 0, /* tp_doc */ |
|
77246
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2663 (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
|
2664 (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
|
2665 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
|
2666 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
|
2667 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
|
2668 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
|
2669 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
|
2670 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
|
2671 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
|
2672 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
|
2673 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
|
2674 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
|
2675 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
|
2676 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
|
2677 (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
|
2678 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
|
2679 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
|
2680 0, /* tp_free */ |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2681 }; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2682 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2683 /* ==================================================================== */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2684 /* the expat interface */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2685 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2686 #if defined(USE_EXPAT) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2687 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2688 #include "expat.h" |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2689 #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
|
2690 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
|
2691 #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
|
2692 |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
2693 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
|
2694 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
|
2695 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2696 typedef struct { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2697 PyObject_HEAD |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2698 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2699 XML_Parser parser; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2700 |
|
77279
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2701 PyObject *target; |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2702 PyObject *entity; |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2703 |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2704 PyObject *names; |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2705 |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2706 PyObject *handle_start; |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2707 PyObject *handle_data; |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2708 PyObject *handle_end; |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2709 |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2710 PyObject *handle_comment; |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2711 PyObject *handle_pi; |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2712 PyObject *handle_doctype; |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2713 |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2714 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
|
2715 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2716 } XMLParserObject; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2717 |
|
37144
91dd4d44d3bc
Finish getting rid of statichere/staticforward
Neal Norwitz <nnorwitz@gmail.com>
parents:
36954
diff
changeset
|
2718 static PyTypeObject XMLParser_Type; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2719 |
|
77279
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
2720 #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
|
2721 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2722 /* helpers */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2723 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2724 LOCAL(PyObject*) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2725 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
|
2726 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2727 /* 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
|
2728 to a universal name string */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2729 |
|
79385
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
2730 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
|
2731 PyObject* key; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2732 PyObject* value; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2733 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2734 /* look the 'raw' name up in the names dictionary */ |
|
47301
23ab586c427a
Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents:
44742
diff
changeset
|
2735 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
|
2736 if (!key) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2737 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2738 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2739 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
|
2740 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2741 if (value) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2742 Py_INCREF(value); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2743 } else { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2744 /* 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
|
2745 necessary */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2746 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2747 PyObject* tag; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2748 char* p; |
|
79385
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
2749 Py_ssize_t i; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2750 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2751 /* look for namespace separator */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2752 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
|
2753 if (string[i] == '}') |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2754 break; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2755 if (i != size) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2756 /* convert to universal name */ |
|
47301
23ab586c427a
Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents:
44742
diff
changeset
|
2757 tag = PyBytes_FromStringAndSize(NULL, size+1); |
|
23ab586c427a
Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents:
44742
diff
changeset
|
2758 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
|
2759 p[0] = '{'; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2760 memcpy(p+1, string, size); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2761 size++; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2762 } else { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2763 /* 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
|
2764 Py_INCREF(key); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2765 tag = key; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2766 } |
|
68804
d0fe7489c4cc
_elementtree.c: remove trailing spaces
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66799
diff
changeset
|
2767 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2768 /* decode universal name */ |
|
47301
23ab586c427a
Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents:
44742
diff
changeset
|
2769 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
|
2770 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
|
2771 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
|
2772 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
|
2773 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
|
2774 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
|
2775 } |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2776 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2777 /* add to names dictionary */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2778 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
|
2779 Py_DECREF(key); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2780 Py_DECREF(value); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2781 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2782 } |
|
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 Py_DECREF(key); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2786 return value; |
|
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 |
|
75722
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
2789 /* 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
|
2790 * 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
|
2791 * 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
|
2792 */ |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2793 static void |
|
75722
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
2794 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
|
2795 { |
|
75722
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
2796 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
|
2797 |
|
74d3dc78f0db
Issue #10833: Use PyUnicode_FromFormat() and PyErr_Format() instead of
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68804
diff
changeset
|
2798 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
|
2799 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
|
2800 line, column); |
|
68805
74d3dc78f0db
Issue #10833: Use PyUnicode_FromFormat() and PyErr_Format() instead of
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68804
diff
changeset
|
2801 if (errmsg == NULL) |
|
74d3dc78f0db
Issue #10833: Use PyUnicode_FromFormat() and PyErr_Format() instead of
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68804
diff
changeset
|
2802 return; |
|
74d3dc78f0db
Issue #10833: Use PyUnicode_FromFormat() and PyErr_Format() instead of
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68804
diff
changeset
|
2803 |
|
74d3dc78f0db
Issue #10833: Use PyUnicode_FromFormat() and PyErr_Format() instead of
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68804
diff
changeset
|
2804 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
|
2805 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
|
2806 if (!error) |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2807 return; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2808 |
|
75722
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
2809 /* 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
|
2810 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
|
2811 if (!code) { |
|
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
2812 Py_DECREF(error); |
|
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
2813 return; |
|
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
2814 } |
|
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
2815 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
|
2816 Py_DECREF(error); |
|
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
2817 Py_DECREF(code); |
|
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
2818 return; |
|
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
2819 } |
|
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
2820 Py_DECREF(code); |
|
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
2821 |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2822 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
|
2823 if (!position) { |
|
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(error); |
|
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 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
|
2828 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
|
2829 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
|
2830 return; |
|
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(position); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2833 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2834 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
|
2835 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
|
2836 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2837 |
|
36050
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 /* handlers */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2840 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2841 static void |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2842 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
|
2843 int data_len) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2844 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2845 PyObject* key; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2846 PyObject* value; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2847 PyObject* res; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2848 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2849 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
|
2850 return; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2851 |
|
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
|
2852 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
|
2853 if (!key) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2854 return; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2855 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2856 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
|
2857 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2858 if (value) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2859 if (TreeBuilder_CheckExact(self->target)) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2860 res = treebuilder_handle_data( |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2861 (TreeBuilderObject*) self->target, value |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2862 ); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2863 else if (self->handle_data) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2864 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
|
2865 else |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2866 res = NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2867 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
|
2868 } 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
|
2869 /* 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
|
2870 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
|
2871 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
|
2872 expat_set_error( |
|
75722
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
2873 XML_ERROR_UNDEFINED_ENTITY, |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2874 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
|
2875 EXPAT(GetErrorColumnNumber)(self->parser), |
|
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
2876 message |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2877 ); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2878 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2879 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2880 Py_DECREF(key); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2881 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2882 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2883 static void |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2884 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
|
2885 const XML_Char **attrib_in) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2886 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2887 PyObject* res; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2888 PyObject* tag; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2889 PyObject* attrib; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2890 int ok; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2891 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2892 /* tag name */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2893 tag = makeuniversal(self, tag_in); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2894 if (!tag) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2895 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
|
2896 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2897 /* attributes */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2898 if (attrib_in[0]) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2899 attrib = PyDict_New(); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2900 if (!attrib) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2901 return; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2902 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
|
2903 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
|
2904 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
|
2905 if (!key || !value) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2906 Py_XDECREF(value); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2907 Py_XDECREF(key); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2908 Py_DECREF(attrib); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2909 return; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2910 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2911 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
|
2912 Py_DECREF(value); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2913 Py_DECREF(key); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2914 if (ok < 0) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2915 Py_DECREF(attrib); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2916 return; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2917 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2918 attrib_in += 2; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2919 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2920 } else { |
|
79385
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
2921 /* 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
|
2922 attrib = PyDict_New(); |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2923 if (!attrib) |
|
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2924 return; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2925 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2926 |
|
77246
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2927 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
|
2928 /* shortcut */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2929 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
|
2930 tag, attrib); |
|
77246
20b8f0ee3d64
Issue #14007: implemented the 'element_factory' feature of TreeBuilder in
Eli Bendersky <eliben@gmail.com>
parents:
77226
diff
changeset
|
2931 } |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2932 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
|
2933 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
|
2934 } else |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2935 res = NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2936 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2937 Py_DECREF(tag); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2938 Py_DECREF(attrib); |
|
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 Py_XDECREF(res); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2941 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2942 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2943 static void |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2944 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
|
2945 int data_len) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2946 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2947 PyObject* data; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2948 PyObject* res; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2949 |
|
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
|
2950 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
|
2951 if (!data) |
|
db5e720b0cef
merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents:
36684
diff
changeset
|
2952 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
|
2953 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2954 if (TreeBuilder_CheckExact(self->target)) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2955 /* shortcut */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2956 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
|
2957 else if (self->handle_data) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2958 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
|
2959 else |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2960 res = NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2961 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2962 Py_DECREF(data); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2963 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2964 Py_XDECREF(res); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2965 } |
|
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 static void |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2968 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
|
2969 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2970 PyObject* tag; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2971 PyObject* res = NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2972 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2973 if (TreeBuilder_CheckExact(self->target)) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2974 /* shortcut */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2975 /* 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
|
2976 res = treebuilder_handle_end( |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2977 (TreeBuilderObject*) self->target, Py_None |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2978 ); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2979 else if (self->handle_end) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2980 tag = makeuniversal(self, tag_in); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2981 if (tag) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2982 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
|
2983 Py_DECREF(tag); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2984 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2985 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2986 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2987 Py_XDECREF(res); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2988 } |
|
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 static void |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2991 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
|
2992 const XML_Char *uri) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2993 { |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2994 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
|
2995 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
|
2996 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2997 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
|
2998 if (!suri) |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
2999 return; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3000 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3001 if (prefix) |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3002 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
|
3003 else |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3004 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
|
3005 if (!sprefix) { |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3006 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
|
3007 return; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3008 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3009 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3010 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
|
3011 (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
|
3012 ); |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3013 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3014 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
|
3015 Py_DECREF(suri); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3016 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3017 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3018 static void |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3019 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
|
3020 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3021 treebuilder_handle_namespace( |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3022 (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
|
3023 ); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3024 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3025 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3026 static void |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3027 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
|
3028 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3029 PyObject* comment; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3030 PyObject* res; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3031 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3032 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
|
3033 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
|
3034 if (comment) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3035 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
|
3036 Py_XDECREF(res); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3037 Py_DECREF(comment); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3038 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3039 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3040 } |
|
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 static void |
|
77279
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3043 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
|
3044 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
|
3045 const XML_Char *sysid, |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3046 const XML_Char *pubid, |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3047 int has_internal_subset) |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3048 { |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3049 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
|
3050 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
|
3051 PyObject *parser_doctype = NULL; |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3052 PyObject *res = NULL; |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3053 |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3054 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
|
3055 if (!doctype_name_obj) |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3056 return; |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3057 |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3058 if (sysid) { |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3059 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
|
3060 if (!sysid_obj) { |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3061 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
|
3062 return; |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3063 } |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3064 } else { |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3065 Py_INCREF(Py_None); |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3066 sysid_obj = Py_None; |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3067 } |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3068 |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3069 if (pubid) { |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3070 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
|
3071 if (!pubid_obj) { |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3072 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
|
3073 Py_DECREF(sysid_obj); |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3074 return; |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3075 } |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3076 } else { |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3077 Py_INCREF(Py_None); |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3078 pubid_obj = Py_None; |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3079 } |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3080 |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3081 /* 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
|
3082 if (self->handle_doctype) { |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3083 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
|
3084 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
|
3085 Py_CLEAR(res); |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3086 } |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3087 |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3088 /* 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
|
3089 * 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
|
3090 * (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
|
3091 */ |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3092 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
|
3093 if (parser_doctype) { |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3094 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
|
3095 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
|
3096 "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
|
3097 " 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
|
3098 1) < 0) { |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3099 goto clear; |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3100 } |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3101 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
|
3102 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
|
3103 Py_CLEAR(res); |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3104 } |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3105 } |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3106 |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3107 clear: |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3108 Py_XDECREF(parser_doctype); |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3109 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
|
3110 Py_DECREF(pubid_obj); |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3111 Py_DECREF(sysid_obj); |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3112 } |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3113 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3114 static void |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3115 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
|
3116 const XML_Char* data_in) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3117 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3118 PyObject* target; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3119 PyObject* data; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3120 PyObject* res; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3121 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3122 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
|
3123 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
|
3124 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
|
3125 if (target && data) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3126 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
|
3127 Py_XDECREF(res); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3128 Py_DECREF(data); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3129 Py_DECREF(target); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3130 } else { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3131 Py_XDECREF(data); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3132 Py_XDECREF(target); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3133 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3134 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3135 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3136 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3137 static int |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3138 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
|
3139 XML_Encoding *info) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3140 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3141 PyObject* u; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3142 unsigned char s[256]; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3143 int i; |
| 72475 | 3144 void *data; |
| 3145 unsigned int kind; | |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3146 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3147 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
|
3148 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3149 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
|
3150 s[i] = i; |
|
68804
d0fe7489c4cc
_elementtree.c: remove trailing spaces
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66799
diff
changeset
|
3151 |
| 36117 | 3152 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
|
3153 if (!u) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3154 return XML_STATUS_ERROR; |
| 72475 | 3155 if (PyUnicode_READY(u)) |
| 3156 return XML_STATUS_ERROR; | |
| 3157 | |
| 3158 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
|
3159 Py_DECREF(u); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3160 return XML_STATUS_ERROR; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3161 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3162 |
| 72475 | 3163 kind = PyUnicode_KIND(u); |
| 3164 data = PyUnicode_DATA(u); | |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3165 for (i = 0; i < 256; i++) { |
| 72475 | 3166 Py_UCS4 ch = PyUnicode_READ(kind, data, i); |
| 3167 if (ch != Py_UNICODE_REPLACEMENT_CHARACTER) | |
| 3168 info->map[i] = ch; | |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3169 else |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3170 info->map[i] = -1; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3171 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3172 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3173 Py_DECREF(u); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3174 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3175 return XML_STATUS_OK; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3176 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3177 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3178 /* -------------------------------------------------------------------- */ |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3179 |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3180 static PyObject * |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3181 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
|
3182 { |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3183 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
|
3184 if (self) { |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3185 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
|
3186 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
|
3187 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
|
3188 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
|
3189 self->handle_doctype = NULL; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3190 } |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3191 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
|
3192 } |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3193 |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3194 static int |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3195 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
|
3196 { |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3197 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
|
3198 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
|
3199 char *encoding = NULL; |
|
77313
eb1d633fe307
Fix unterminated keyword array passed to PyArg_ParseTupleAndKeywords
Eli Bendersky <eliben@gmail.com>
parents:
77279
diff
changeset
|
3200 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
|
3201 |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3202 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
|
3203 &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
|
3204 return -1; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3205 } |
|
68804
d0fe7489c4cc
_elementtree.c: remove trailing spaces
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66799
diff
changeset
|
3206 |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3207 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
|
3208 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
|
3209 return -1; |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3210 |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3211 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
|
3212 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
|
3213 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
|
3214 return -1; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3215 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3216 |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3217 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
|
3218 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
|
3219 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
|
3220 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
|
3221 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
|
3222 return -1; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3223 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3224 |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3225 if (target) { |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3226 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
|
3227 } else { |
|
77226
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
3228 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
|
3229 if (!target) { |
|
79385
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
3230 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
|
3231 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
|
3232 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
|
3233 return -1; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3234 } |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3235 } |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3236 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
|
3237 |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3238 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
|
3239 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
|
3240 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
|
3241 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
|
3242 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
|
3243 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
|
3244 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
|
3245 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3246 PyErr_Clear(); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3247 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3248 /* 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
|
3249 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
|
3250 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
|
3251 self_xp->parser, |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3252 (XML_StartElementHandler) expat_start_handler, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3253 (XML_EndElementHandler) expat_end_handler |
|
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 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
|
3256 self_xp->parser, |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3257 (XML_DefaultHandler) expat_default_handler |
|
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 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
|
3260 self_xp->parser, |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3261 (XML_CharacterDataHandler) expat_data_handler |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3262 ); |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3263 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
|
3264 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
|
3265 self_xp->parser, |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3266 (XML_CommentHandler) expat_comment_handler |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3267 ); |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3268 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
|
3269 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
|
3270 self_xp->parser, |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3271 (XML_ProcessingInstructionHandler) expat_pi_handler |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3272 ); |
|
77279
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3273 EXPAT(SetStartDoctypeDeclHandler)( |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3274 self_xp->parser, |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3275 (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
|
3276 ); |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3277 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
|
3278 self_xp->parser, |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3279 (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
|
3280 ); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3281 |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3282 return 0; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3283 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3284 |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3285 static int |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3286 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
|
3287 { |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3288 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
|
3289 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
|
3290 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
|
3291 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
|
3292 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
|
3293 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
|
3294 |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3295 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
|
3296 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
|
3297 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
|
3298 |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3299 return 0; |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3300 } |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3301 |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3302 static int |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3303 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
|
3304 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3305 EXPAT(ParserFree)(self->parser); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3306 |
|
79385
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
3307 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
|
3308 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
|
3309 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
|
3310 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
|
3311 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
|
3312 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
|
3313 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
|
3314 |
|
f9224f23f473
Sanitize and modernize some of the _elementtree code (see issue #16089).
Antoine Pitrou <solipsis@pitrou.net>
parents:
79065
diff
changeset
|
3315 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
|
3316 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
|
3317 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
|
3318 |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3319 return 0; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3320 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3321 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3322 static void |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3323 xmlparser_dealloc(XMLParserObject* self) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3324 { |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3325 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
|
3326 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
|
3327 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
|
3328 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3329 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3330 LOCAL(PyObject*) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3331 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
|
3332 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3333 int ok; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3334 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3335 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
|
3336 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3337 if (PyErr_Occurred()) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3338 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3339 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3340 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
|
3341 expat_set_error( |
|
75722
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
3342 EXPAT(GetErrorCode)(self->parser), |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3343 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
|
3344 EXPAT(GetErrorColumnNumber)(self->parser), |
|
b76fa310e73d
Issue #14207: the ParseError exception raised by _elementtree was made
Eli Bendersky <eliben@gmail.com>
parents:
75721
diff
changeset
|
3345 NULL |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3346 ); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3347 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3348 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3349 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3350 Py_RETURN_NONE; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3351 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3352 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3353 static PyObject* |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3354 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
|
3355 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3356 /* end feeding data to parser */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3357 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3358 PyObject* res; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3359 if (!PyArg_ParseTuple(args, ":close")) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3360 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3361 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3362 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
|
3363 if (!res) |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3364 return NULL; |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3365 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3366 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
|
3367 Py_DECREF(res); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3368 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
|
3369 } 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
|
3370 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
|
3371 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
|
3372 } else |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3373 return res; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3374 } |
|
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 static PyObject* |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3377 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
|
3378 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3379 /* feed data to parser */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3380 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3381 char* data; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3382 int data_len; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3383 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
|
3384 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3385 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3386 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
|
3387 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3388 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3389 static PyObject* |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3390 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
|
3391 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3392 /* (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
|
3393 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3394 PyObject* reader; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3395 PyObject* buffer; |
|
75721
7bdf5c96fdc0
Closes Issue #14246: _elementtree parser will now handle io.StringIO
Eli Bendersky <eliben@gmail.com>
parents:
75505
diff
changeset
|
3396 PyObject* temp; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3397 PyObject* res; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3398 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3399 PyObject* fileobj; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3400 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
|
3401 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3402 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3403 reader = PyObject_GetAttrString(fileobj, "read"); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3404 if (!reader) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3405 return NULL; |
|
68804
d0fe7489c4cc
_elementtree.c: remove trailing spaces
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66799
diff
changeset
|
3406 |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3407 /* read from open file object */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3408 for (;;) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3409 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3410 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
|
3411 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3412 if (!buffer) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3413 /* 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
|
3414 Py_DECREF(reader); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3415 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3416 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3417 |
|
75721
7bdf5c96fdc0
Closes Issue #14246: _elementtree parser will now handle io.StringIO
Eli Bendersky <eliben@gmail.com>
parents:
75505
diff
changeset
|
3418 if (PyUnicode_CheckExact(buffer)) { |
|
7bdf5c96fdc0
Closes Issue #14246: _elementtree parser will now handle io.StringIO
Eli Bendersky <eliben@gmail.com>
parents:
75505
diff
changeset
|
3419 /* 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
|
3420 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
|
3421 Py_DECREF(buffer); |
|
7bdf5c96fdc0
Closes Issue #14246: _elementtree parser will now handle io.StringIO
Eli Bendersky <eliben@gmail.com>
parents:
75505
diff
changeset
|
3422 break; |
|
7bdf5c96fdc0
Closes Issue #14246: _elementtree parser will now handle io.StringIO
Eli Bendersky <eliben@gmail.com>
parents:
75505
diff
changeset
|
3423 } |
|
7bdf5c96fdc0
Closes Issue #14246: _elementtree parser will now handle io.StringIO
Eli Bendersky <eliben@gmail.com>
parents:
75505
diff
changeset
|
3424 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
|
3425 Py_DECREF(buffer); |
|
75721
7bdf5c96fdc0
Closes Issue #14246: _elementtree parser will now handle io.StringIO
Eli Bendersky <eliben@gmail.com>
parents:
75505
diff
changeset
|
3426 if (!temp) { |
|
7bdf5c96fdc0
Closes Issue #14246: _elementtree parser will now handle io.StringIO
Eli Bendersky <eliben@gmail.com>
parents:
75505
diff
changeset
|
3427 /* 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
|
3428 Py_DECREF(reader); |
|
7bdf5c96fdc0
Closes Issue #14246: _elementtree parser will now handle io.StringIO
Eli Bendersky <eliben@gmail.com>
parents:
75505
diff
changeset
|
3429 return NULL; |
|
7bdf5c96fdc0
Closes Issue #14246: _elementtree parser will now handle io.StringIO
Eli Bendersky <eliben@gmail.com>
parents:
75505
diff
changeset
|
3430 } |
|
7bdf5c96fdc0
Closes Issue #14246: _elementtree parser will now handle io.StringIO
Eli Bendersky <eliben@gmail.com>
parents:
75505
diff
changeset
|
3431 buffer = temp; |
|
7bdf5c96fdc0
Closes Issue #14246: _elementtree parser will now handle io.StringIO
Eli Bendersky <eliben@gmail.com>
parents:
75505
diff
changeset
|
3432 } |
|
7bdf5c96fdc0
Closes Issue #14246: _elementtree parser will now handle io.StringIO
Eli Bendersky <eliben@gmail.com>
parents:
75505
diff
changeset
|
3433 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
|
3434 Py_DECREF(buffer); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3435 break; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3436 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3437 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3438 res = expat_parse( |
|
47301
23ab586c427a
Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents:
44742
diff
changeset
|
3439 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
|
3440 ); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3441 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3442 Py_DECREF(buffer); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3443 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3444 if (!res) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3445 Py_DECREF(reader); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3446 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3447 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3448 Py_DECREF(res); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3449 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3450 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3451 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3452 Py_DECREF(reader); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3453 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3454 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
|
3455 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3456 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
|
3457 Py_DECREF(res); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3458 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
|
3459 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3460 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3461 return res; |
|
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 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3464 static PyObject* |
|
77279
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3465 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
|
3466 { |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3467 Py_RETURN_NONE; |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3468 } |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3469 |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3470 static PyObject* |
|
6f9bfcc1896f
Issue #14007: implement doctype() method calling in XMLParser of _elementtree.
Eli Bendersky <eliben@gmail.com>
parents:
77278
diff
changeset
|
3471 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
|
3472 { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3473 /* activate element event reporting */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3474 |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
3475 Py_ssize_t i; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3476 TreeBuilderObject* target; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3477 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3478 PyObject* events; /* event collector */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3479 PyObject* event_set = Py_None; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3480 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
|
3481 &event_set)) |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3482 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3483 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3484 if (!TreeBuilder_CheckExact(self->target)) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3485 PyErr_SetString( |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3486 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
|
3487 "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
|
3488 "targets" |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3489 ); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3490 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3491 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3492 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3493 target = (TreeBuilderObject*) self->target; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3494 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3495 Py_INCREF(events); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3496 Py_XDECREF(target->events); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3497 target->events = events; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3498 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3499 /* 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
|
3500 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
|
3501 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
|
3502 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
|
3503 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
|
3504 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3505 if (event_set == Py_None) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3506 /* 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
|
3507 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
|
3508 Py_RETURN_NONE; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3509 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3510 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3511 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
|
3512 goto error; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3513 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3514 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
|
3515 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
|
3516 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
|
3517 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
|
3518 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
|
3519 if (event == NULL) |
|
2d6178480cc7
Fix a crash in _elementtree related to lone unicode surrogates.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
59601
diff
changeset
|
3520 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
|
3521 } 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
|
3522 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
|
3523 else { |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3524 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
|
3525 } |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3526 if (strcmp(event, "start") == 0) { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3527 Py_INCREF(item); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3528 target->start_event_obj = item; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3529 } 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
|
3530 Py_INCREF(item); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3531 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
|
3532 target->end_event_obj = item; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3533 } 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
|
3534 Py_INCREF(item); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3535 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
|
3536 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
|
3537 EXPAT(SetNamespaceDeclHandler)( |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3538 self->parser, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3539 (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
|
3540 (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
|
3541 ); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3542 } 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
|
3543 Py_INCREF(item); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3544 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
|
3545 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
|
3546 EXPAT(SetNamespaceDeclHandler)( |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3547 self->parser, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3548 (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
|
3549 (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
|
3550 ); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3551 } else { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3552 PyErr_Format( |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3553 PyExc_ValueError, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3554 "unknown event '%s'", event |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3555 ); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3556 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3557 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3558 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3559 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3560 Py_RETURN_NONE; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3561 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3562 error: |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3563 PyErr_SetString( |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3564 PyExc_TypeError, |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3565 "invalid event tuple" |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3566 ); |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3567 return NULL; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3568 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3569 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3570 static PyMethodDef xmlparser_methods[] = { |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3571 {"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
|
3572 {"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
|
3573 {"_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
|
3574 {"_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
|
3575 {"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
|
3576 {NULL, NULL} |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3577 }; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3578 |
|
68804
d0fe7489c4cc
_elementtree.c: remove trailing spaces
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66799
diff
changeset
|
3579 static PyObject* |
|
48414
4025f638911f
#3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3580 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
|
3581 { |
|
66799
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66664
diff
changeset
|
3582 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
|
3583 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
|
3584 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
|
3585 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
|
3586 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
|
3587 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
|
3588 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
|
3589 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
|
3590 "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
|
3591 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
|
3592 } |
|
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66664
diff
changeset
|
3593 else |
|
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66664
diff
changeset
|
3594 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
|
3595 |
|
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66664
diff
changeset
|
3596 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
|
3597 return res; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3598 } |
|
66799
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66664
diff
changeset
|
3599 generic: |
|
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66664
diff
changeset
|
3600 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
|
3601 } |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3602 |
|
37144
91dd4d44d3bc
Finish getting rid of statichere/staticforward
Neal Norwitz <nnorwitz@gmail.com>
parents:
36954
diff
changeset
|
3603 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
|
3604 PyVarObject_HEAD_INIT(NULL, 0) |
|
81359
8d6dadfecf22
Issue #16076: make _elementtree.Element pickle-able in a way that is compatible
Eli Bendersky <eliben@gmail.com>
parents:
81296
diff
changeset
|
3605 "xml.etree.ElementTree.XMLParser", sizeof(XMLParserObject), 0, |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3606 /* methods */ |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3607 (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
|
3608 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
|
3609 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
|
3610 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
|
3611 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
|
3612 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
|
3613 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
|
3614 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
|
3615 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
|
3616 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
|
3617 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
|
3618 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
|
3619 (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
|
3620 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
|
3621 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
|
3622 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
|
3623 /* tp_flags */ |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3624 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
|
3625 (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
|
3626 (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
|
3627 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
|
3628 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
|
3629 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
|
3630 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
|
3631 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
|
3632 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
|
3633 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
|
3634 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
|
3635 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
|
3636 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
|
3637 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
|
3638 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
|
3639 (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
|
3640 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
|
3641 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
|
3642 0, /* tp_free */ |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3643 }; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3644 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3645 #endif |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3646 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3647 /* ==================================================================== */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3648 /* python module interface */ |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3649 |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3650 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
|
3651 {"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
|
3652 {NULL, NULL} |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3653 }; |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3654 |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
3655 |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
3656 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
|
3657 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
|
3658 "_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
|
3659 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
|
3660 -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
|
3661 _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
|
3662 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
|
3663 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
|
3664 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
|
3665 NULL |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
3666 }; |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
3667 |
| 40528 | 3668 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
|
3669 PyInit__elementtree(void) |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3670 { |
|
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
|
3671 PyObject *m, *temp; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3672 |
|
48414
4025f638911f
#3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3673 /* Initialize object types */ |
|
4025f638911f
#3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3674 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
|
3675 return NULL; |
|
48414
4025f638911f
#3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3676 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
|
3677 return NULL; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3678 #if defined(USE_EXPAT) |
|
48414
4025f638911f
#3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3679 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
|
3680 return NULL; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3681 #endif |
|
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3682 |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
3683 m = PyModule_Create(&_elementtreemodule); |
|
36954
db5e720b0cef
merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents:
36684
diff
changeset
|
3684 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
|
3685 return NULL; |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
3686 |
|
76110
1ddf58262706
Replace bootstrap imports with real C API calls.
Eli Bendersky <eliben@gmail.com>
parents:
76101
diff
changeset
|
3687 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
|
3688 return NULL; |
|
76110
1ddf58262706
Replace bootstrap imports with real C API calls.
Eli Bendersky <eliben@gmail.com>
parents:
76101
diff
changeset
|
3689 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
|
3690 Py_XDECREF(temp); |
|
1ddf58262706
Replace bootstrap imports with real C API calls.
Eli Bendersky <eliben@gmail.com>
parents:
76101
diff
changeset
|
3691 |
|
1ddf58262706
Replace bootstrap imports with real C API calls.
Eli Bendersky <eliben@gmail.com>
parents:
76101
diff
changeset
|
3692 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
|
3693 return NULL; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3694 |
|
77278
cf9c379a9859
We're always building _elementtree with USE_PYEXPAT_CAPI, so the #ifdefs in
Eli Bendersky <eliben@gmail.com>
parents:
77275
diff
changeset
|
3695 /* 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
|
3696 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
|
3697 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
|
3698 /* 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
|
3699 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
|
3700 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
|
3701 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
|
3702 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
|
3703 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
|
3704 PyErr_SetString(PyExc_ImportError, |
|
c8534d55c5e6
Raise ImportError if pyexpat's version is incompatible
Eli Bendersky <eliben@gmail.com>
parents:
78152
diff
changeset
|
3705 "pyexpat version is incompatible"); |
|
c8534d55c5e6
Raise ImportError if pyexpat's version is incompatible
Eli Bendersky <eliben@gmail.com>
parents:
78152
diff
changeset
|
3706 return NULL; |
|
c8534d55c5e6
Raise ImportError if pyexpat's version is incompatible
Eli Bendersky <eliben@gmail.com>
parents:
78152
diff
changeset
|
3707 } |
|
c8534d55c5e6
Raise ImportError if pyexpat's version is incompatible
Eli Bendersky <eliben@gmail.com>
parents:
78152
diff
changeset
|
3708 } else { |
|
c8534d55c5e6
Raise ImportError if pyexpat's version is incompatible
Eli Bendersky <eliben@gmail.com>
parents:
78152
diff
changeset
|
3709 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
|
3710 } |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3711 |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3712 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
|
3713 "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
|
3714 ); |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
53816
diff
changeset
|
3715 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
|
3716 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
|
3717 |
|
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
|
3718 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
|
3719 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
|
3720 |
|
77226
717632ae7b3f
Issue #14007: make TreeBuilder an actual type exposed from _elementtree, and subclassable.
Eli Bendersky <eliben@gmail.com>
parents:
77217
diff
changeset
|
3721 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
|
3722 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
|
3723 |
|
77275
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3724 #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
|
3725 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
|
3726 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
|
3727 #endif |
|
a29ae1c2b8b2
Issue #14007: make XMLParser a real subclassable type exported from _elementtree. +cleanups
Eli Bendersky <eliben@gmail.com>
parents:
77246
diff
changeset
|
3728 |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
3729 return m; |
|
36050
6586cd9920e7
updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3730 } |
