Move c:identifier from return-value to subchild type, as per Jürgs
[gnome.gobject-introspection] / giscanner / ast.py
1 # -*- Mode: Python -*-
2 # GObject-Introspection - a framework for introspecting GObject libraries
3 # Copyright (C) 2008  Johan Dahlin
4 #
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.
9 #
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.
14 #
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
18 # 02110-1301, USA.
19 #
20
21
22 class Node(object):
23     def __init__(self, name=None):
24         self.name = name
25
26
27 class Function(Node):
28     def __init__(self, name, retval, parameters, symbol):
29         Node.__init__(self, name)
30         self.retval = retval
31         self.parameters = parameters
32         self.symbol = symbol
33
34     def __repr__(self):
35         return '%s(%r, %r, %r)' % (self.__class__.__name__,
36                                    self.name, self.retval,
37                                    self.parameters)
38
39
40 class VFunction(Function):
41     pass
42
43
44 class Type(Node):
45     def __init__(self, name):
46         Node.__init__(self, name)
47         self.cidentifier = name
48
49     def __repr__(self):
50         return 'Type(%r)' % (self.name,)
51
52
53 class Parameter(Node):
54     def __init__(self, name, type_name):
55         Node.__init__(self, name)
56         self.type = Type(type_name)
57         self.direction = 'in'
58         self.transfer = 'none'
59
60     def __repr__(self):
61         return 'Parameter(%r, %r)' % (self.name, self.type)
62
63
64 class Enum(Node):
65     def __init__(self, name, members):
66         Node.__init__(self, name)
67         self.members = members
68
69     def __repr__(self):
70         return 'Enum(%r, %r)' % (self.name, self.members)
71
72
73 class Member(Node):
74     def __init__(self, name, value):
75         Node.__init__(self, name)
76         self.value = value
77
78     def __repr__(self):
79         return 'Member(%r, %r)' % (self.name, self.value)
80
81
82 class Struct(Node):
83     def __init__(self, name):
84         Node.__init__(self, name)
85         self.fields = []
86
87     def __repr__(self):
88         return 'Struct(%r)' % (self.name,)
89
90
91 class Return(Node):
92     def __init__(self, type_name):
93         Node.__init__(self)
94         self.type = Type(type_name)
95         self.transfer = 'none'
96
97     def __repr__(self):
98         return 'Return(%r)' % (self.type,)
99
100
101 class Class(Node):
102     def __init__(self, name, parent):
103         Node.__init__(self, name)
104         self.parent = parent
105         self.methods = []
106         self.constructors = []
107         self.properties = []
108         self.fields = []
109
110     def __repr__(self):
111         return '%s(%r, %r, %r)' % (
112             self.__class__.__name__,
113             self.name, self.parent, self.methods)
114
115
116 class Interface(Node):
117     def __init__(self, name):
118         Node.__init__(self, name)
119         self.methods = []
120         self.properties = []
121         self.fields = []
122
123     def __repr__(self):
124         return '%s(%r, %r)' % (
125             self.__class__.__name__,
126             self.name, self.methods)
127
128
129 class Constant(Node):
130     def __init__(self, name, type_name, value):
131         Node.__init__(self, name)
132         self.type = Type(type_name)
133         self.value = value
134
135     def __repr__(self):
136         return 'Constant(%r, %r, %r)' % (
137             self.name, self.type, self.value)
138
139
140 class Property(Node):
141     def __init__(self, name, type_name):
142         Node.__init__(self, name)
143         self.type = Type(type_name)
144
145     def __repr__(self):
146         return '%s(%r, %r, %r)' % (
147             self.__class__.__name__,
148             self.name, self.type, self.value)
149
150
151 class Callback(Node):
152     def __init__(self, name, retval, parameters):
153         Node.__init__(self, name)
154         self.retval = retval
155         self.parameters = parameters
156
157     def __repr__(self):
158         return 'Callback(%r, %r, %r)' % (
159             self.name, self.retval, self.parameters)
160
161
162 class Sequence(Type):
163     # Subclass, because a Sequence is a kind of Type
164     def __init__(self, name, element_type):
165         Type.__init__(self, name)
166         self.element_type = element_type