gobject-introspection r172 - in trunk: . tools
- From: johan svn gnome org
- To: svn-commits-list gnome org
- Subject: gobject-introspection r172 - in trunk: . tools
- Date: Fri, 18 Apr 2008 21:05:32 +0100 (BST)
Author: johan
Date: Fri Apr 18 20:05:31 2008
New Revision: 172
URL: http://svn.gnome.org/viewvc/gobject-introspection?rev=172&view=rev
Log:
- Add support for struct/parameter/return, start parsing of ctypes
Modified:
trunk/ChangeLog
trunk/tools/g-ir-scanner
Modified: trunk/tools/g-ir-scanner
==============================================================================
--- trunk/tools/g-ir-scanner (original)
+++ trunk/tools/g-ir-scanner Fri Apr 18 20:05:31 2008
@@ -50,6 +50,22 @@
return 'Member(%r, %r)' % (self.name, self.value)
+class Struct(Node):
+ def __init__(self, name):
+ self.name = name
+
+ def __repr__(self):
+ return 'Struct(%r)' % (self.name,)
+
+
+class Return(Node):
+ def __init__(self, type):
+ self.type = type
+
+ def __repr__(self):
+ return 'Return(%r)' % (self.type,)
+
+
class Generator(object):
def __init__(self):
self._scanner = giscanner.SourceScanner()
@@ -143,12 +159,12 @@
return self._create_function(symbol)
elif stype == giscanner.CSYMBOL_TYPE_TYPEDEF:
return self._traverse_one(symbol, symbol.base_type.type)
- #elif stype == giscanner.CSYMBOL_TYPE_STRUCT:
- # return Struct(symbol)
+ elif stype == giscanner.CSYMBOL_TYPE_STRUCT:
+ return self._create_struct(symbol)
elif stype == giscanner.CSYMBOL_TYPE_ENUM:
return self._create_enum(symbol)
else:
- print 'unhandled', symbol.type
+ print 'unhandled symbol', symbol.type
def _create_enum(self, symbol):
members = []
@@ -160,13 +176,32 @@
def _create_function(self, symbol):
parameters = []
- retval = None
for child in symbol.base_type.child_list:
- print child.base_type.type
- parameters.append(Parameter(child.ident, '??'))
+ parameters.append(self._create_parameter(child))
+ retval = Return(self._create_source_type(symbol.base_type.base_type))
return Function(symbol.ident, retval, parameters)
+ def _create_source_type(self, source_type):
+ if source_type.type == giscanner.CTYPE_BASIC_TYPE:
+ value = source_type.name
+ elif source_type.type == giscanner.CTYPE_TYPEDEF:
+ value = source_type.name
+ elif source_type.type == giscanner.CTYPE_POINTER:
+ value = self._create_source_type(source_type.base_type) + '*'
+ else:
+ print 'Unhandled source type: %d' % (source_type.type,)
+ value = '???'
+ return value
+
+ def _create_parameter(self, symbol):
+ return Parameter(symbol.ident,
+ self._create_source_type(symbol.base_type))
+
+ def _create_struct(self, symbol):
+ return Struct(symbol.ident)
+
+
def main(args):
parser = optparse.OptionParser('%prog [options] sources')
parser.add_option("-v", "--verbose",
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]