2 # GObject-Introspection - a framework for introspecting GObject libraries
3 # Copyright (C) 2008 Johan Dahlin
5 # This program is free software; you can redistribute it and/or
6 # modify it under the terms of the GNU General Public License
7 # as published by the Free Software Foundation; either version 2
8 # of the License, or (at your option) any later version.
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
15 # You should have received a copy of the GNU General Public License
16 # along with this program; if not, write to the Free Software
17 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
22 This file descbribes abstract data type nodes independent on the
23 implementation language.
25 These can later on be extended (eg subclassed) with additional information
26 which is language/library/domain specific.
37 TYPE_UINT16 = 'uint16'
39 TYPE_UINT32 = 'uint32'
41 TYPE_UINT64 = 'uint64'
47 TYPE_DOUBLE = 'double'
49 # Higher-level data types
51 TYPE_ANY = 'any' # CORBA Any/Variant/GValue, holds anything.
52 TYPE_BOOLEAN = 'boolean' # True/False
53 TYPE_STRING = 'string' # Sequence of characters
54 TYPE_SEQUENCE = 'sequence' # Sequence of something
55 TYPE_CHAR = 'char' # Character
56 TYPE_UCHAR = 'uchar' # Unsigned Character
57 TYPE_SIZE = 'size' # Size type (memory, buffer etc)
62 TYPE_USTRING = 'ustring'
64 # Domain specific, but practically useful
65 TYPE_FILENAME = 'filename'
71 PARAM_DIRECTION_IN = 'in'
72 PARAM_DIRECTION_OUT = 'out'
73 PARAM_DIRECTION_INOUT = 'inout'
77 def __init__(self, name=None):
81 return '%s(%r)' % (self.__class__.__name__, self.name)
84 class Namespace(Node):
85 def __init__(self, name):
86 Node.__init__(self, name)
90 return '%s(%r, %r)' % (self.__class__.__name__, self.name,
94 def __init__(self, name, retval, parameters, symbol):
95 Node.__init__(self, name)
97 self.parameters = parameters
101 return '%s(%r, %r, %r)' % (self.__class__.__name__,
102 self.name, self.retval,
106 class VFunction(Function):
111 def __init__(self, name):
112 Node.__init__(self, name)
116 class Parameter(Node):
117 def __init__(self, name, typenode):
118 Node.__init__(self, name)
120 self.direction = PARAM_DIRECTION_IN
121 self.transfer = False
124 return 'Parameter(%r, %r)' % (self.name, self.type)
128 def __init__(self, name, symbol, members):
129 Node.__init__(self, name)
131 self.members = members
134 return 'Enum(%r, %r)' % (self.name, self.members)
138 def __init__(self, name, value):
139 Node.__init__(self, name)
143 return 'Member(%r, %r)' % (self.name, self.value)
147 def __init__(self, name, symbol):
148 Node.__init__(self, name)
154 def __init__(self, rtype):
157 self.transfer = False
160 return 'Return(%r)' % (self.type,)
164 def __init__(self, name, parent):
165 Node.__init__(self, name)
169 self.constructors = []
174 return '%s(%r, %r, %r)' % (
175 self.__class__.__name__,
176 self.name, self.parent, self.methods)
179 class Interface(Node):
180 def __init__(self, name):
181 Node.__init__(self, name)
187 return '%s(%r, %r)' % (
188 self.__class__.__name__,
189 self.name, self.methods)
192 class Constant(Node):
193 def __init__(self, name, type_name, value):
194 Node.__init__(self, name)
195 self.type = Type(type_name)
199 return 'Constant(%r, %r, %r)' % (
200 self.name, self.type, self.value)
203 class Property(Node):
204 def __init__(self, name, type_name):
205 Node.__init__(self, name)
206 self.type = Type(type_name)
209 return '%s(%r, %r, %r)' % (
210 self.__class__.__name__,
211 self.name, self.type, self.value)
214 class Callback(Node):
215 def __init__(self, name, retval, parameters):
216 Node.__init__(self, name)
218 self.parameters = parameters
221 return 'Callback(%r, %r, %r)' % (
222 self.name, self.retval, self.parameters)
225 class Sequence(Type):
226 # Subclass, because a Sequence is a kind of Type
227 def __init__(self, name, element_type):
228 Type.__init__(self, name)
229 self.element_type = element_type
230 self.transfer = False