1
2
3
4
5
6 import os
7 import types
8 import pprint
9 import xml.sax
10 import warnings
11 import xml.sax.handler
12 from pygccxml.declarations import *
13 from pygccxml import utils
14
15
16
17
18
19 XML_AN_ABSTRACT = "abstract"
20 XML_AN_ACCESS = "access"
21 XML_AN_ALIGN = "align"
22 XML_AN_ARTIFICIAL = "artificial"
23 XML_AN_ATTRIBUTES = "attributes"
24 XML_AN_BASE_TYPE = "basetype"
25 XML_AN_BASES = "bases"
26 XML_AN_BITS = "bits"
27 XML_AN_CONST = "const"
28 XML_AN_CONTEXT = "context"
29 XML_AN_CVS_REVISION = "cvs_revision"
30 XML_AN_DEFAULT = "default"
31 XML_AN_DEMANGLED = "demangled"
32 XML_AN_EXTERN = "extern"
33 XML_AN_FILE = "file"
34 XML_AN_ID = "id"
35 XML_AN_INCOMPLETE = "incomplete"
36 XML_AN_INIT = "init"
37 XML_AN_LINE = "line"
38 XML_AN_MANGLED = "mangled"
39 XML_AN_MAX = "max"
40 XML_AN_MEMBERS = "members"
41 XML_AN_MUTABLE = "mutable"
42 XML_AN_NAME = "name"
43 XML_AN_OFFSET = "offset"
44 XML_AN_PURE_VIRTUAL = "pure_virtual"
45 XML_AN_RESTRICT = "restrict"
46 XML_AN_RETURNS = "returns"
47 XML_AN_SIZE = "size"
48 XML_AN_STATIC = "static"
49 XML_AN_THROW = "throw"
50 XML_AN_TYPE = "type"
51 XML_AN_VIRTUAL = "virtual"
52 XML_AN_VOLATILE = "volatile"
53 XML_NN_ARGUMENT = "Argument"
54 XML_NN_ARRAY_TYPE = "ArrayType"
55 XML_NN_CASTING_OPERATOR = "Converter"
56 XML_NN_CLASS = "Class"
57 XML_NN_CONSTRUCTOR = "Constructor"
58 XML_NN_CV_QUALIFIED_TYPE = "CvQualifiedType"
59 XML_NN_DESTRUCTOR = "Destructor"
60 XML_NN_ELLIPSIS = "Ellipsis"
61 XML_NN_ENUMERATION = "Enumeration"
62 XML_NN_ENUMERATION_VALUE = "EnumValue"
63 XML_NN_FIELD = "Field"
64 XML_NN_FILE = "File"
65 XML_NN_FUNCTION = "Function"
66 XML_NN_FUNCTION_TYPE = "FunctionType"
67 XML_NN_FUNDAMENTAL_TYPE = "FundamentalType"
68 XML_NN_FREE_OPERATOR = "OperatorFunction"
69 XML_NN_GCC_XML = "GCC_XML"
70 XML_NN_MEMBER_OPERATOR = "OperatorMethod"
71 XML_NN_METHOD = "Method"
72 XML_NN_METHOD_TYPE = "MethodType"
73 XML_NN_NAMESPACE = "Namespace"
74 XML_NN_OFFSET_TYPE = "OffsetType"
75 XML_NN_POINTER_TYPE = "PointerType"
76 XML_NN_REFERENCE_TYPE = "ReferenceType"
77 XML_NN_ROOT = "GCC_XML"
78 XML_NN_STRUCT = "Struct"
79 XML_NN_TYPEDEF = "Typedef"
80 XML_NN_UNION = "Union"
81 XML_NN_VARIABLE = "Variable"
82
83 -class scanner_t( xml.sax.handler.ContentHandler ):
84 - def __init__(self, gccxml_file, decl_factory, *args ):
85 xml.sax.handler.ContentHandler.__init__(self, *args )
86 self.logger = utils.loggers.gccxml
87 self.gccxml_file = gccxml_file
88
89 self.__readers = {
90 XML_NN_FILE : self.__read_file
91 , XML_NN_NAMESPACE : self.__read_namespace
92 , XML_NN_ENUMERATION : self.__read_enumeration
93 , XML_NN_ENUMERATION_VALUE : self.__read_enumeration_value
94 , XML_NN_ARRAY_TYPE : self.__read_array_type
95 , XML_NN_CV_QUALIFIED_TYPE : self.__read_cv_qualified_type
96 , XML_NN_POINTER_TYPE : self.__read_pointer_type
97 , XML_NN_REFERENCE_TYPE : self.__read_reference_type
98 , XML_NN_FUNDAMENTAL_TYPE : self.__read_fundamental_type
99 , XML_NN_ARGUMENT : self.__read_argument
100 , XML_NN_FUNCTION_TYPE : self.__read_function_type
101 , XML_NN_METHOD_TYPE : self.__read_method_type
102 , XML_NN_OFFSET_TYPE : self.__read_offset_type
103 , XML_NN_TYPEDEF : self.__read_typedef
104 , XML_NN_VARIABLE : self.__read_variable
105 , XML_NN_CLASS : self.__read_class
106 , XML_NN_STRUCT : self.__read_struct
107 , XML_NN_UNION : self.__read_union
108 , XML_NN_FIELD : self.__read_field
109 , XML_NN_CASTING_OPERATOR : self.__read_casting_operator
110 , XML_NN_CONSTRUCTOR : self.__read_constructor
111 , XML_NN_DESTRUCTOR : self.__read_destructor
112 , XML_NN_FUNCTION : self.__read_function
113 , XML_NN_FREE_OPERATOR : self.__read_free_operator
114 , XML_NN_MEMBER_OPERATOR : self.__read_member_operator
115 , XML_NN_METHOD : self.__read_method
116 , XML_NN_GCC_XML : self.__read_version
117 , XML_NN_ELLIPSIS : self.__read_ellipsis
118 }
119 self.deep_declarations = [
120 XML_NN_CASTING_OPERATOR
121 , XML_NN_CONSTRUCTOR
122 , XML_NN_DESTRUCTOR
123 , XML_NN_ENUMERATION
124 , XML_NN_FILE
125 , XML_NN_FUNCTION
126 , XML_NN_FREE_OPERATOR
127 , XML_NN_MEMBER_OPERATOR
128 , XML_NN_METHOD
129 , XML_NN_FUNCTION_TYPE
130 , XML_NN_METHOD_TYPE
131 ]
132
133 assert isinstance( decl_factory, decl_factory_t )
134 self.__decl_factory = decl_factory
135
136
137 self.__declarations = {}
138
139 self.__calldefs = []
140
141 self.__enums = []
142
143 self.__types = {}
144
145 self.__files = {}
146
147 self.__access = {}
148
149 self.__inst = None
150
151 self.__members = {}
152
153 self.__compiler = None
154
156 xml.sax.parse( self.gccxml_file, self )
157
159
160 members_mapping = {}
161 for gccxml_id, members in self.__members.iteritems():
162 <