gobject-introspection r183 - in trunk: . giscanner tools
- From: johan svn gnome org
- To: svn-commits-list gnome org
- Subject: gobject-introspection r183 - in trunk: . giscanner tools
- Date: Mon, 21 Apr 2008 05:18:56 +0100 (BST)
Author: johan
Date: Mon Apr 21 04:18:56 2008
New Revision: 183
URL: http://svn.gnome.org/viewvc/gobject-introspection?rev=183&view=rev
Log:
2008-04-21 Johan Dahlin <jdahlin async com br>
* giscanner/gidlwriter.py:
* giscanner/gobjecttreebuilder.py:
* giscanner/treebuilder.py:
* tools/g-ir-scanner:
Resolve libtool .la files.
Strip name spaces for methods.
Add function symbols
Modified:
trunk/ChangeLog
trunk/giscanner/gidlwriter.py
trunk/giscanner/gobjecttreebuilder.py
trunk/giscanner/treebuilder.py
trunk/tools/g-ir-scanner
Modified: trunk/giscanner/gidlwriter.py
==============================================================================
--- trunk/giscanner/gidlwriter.py (original)
+++ trunk/giscanner/gidlwriter.py Mon Apr 21 04:18:56 2008
@@ -31,13 +31,17 @@
print 'WRITER: Unhandled node', node
def _write_function(self, func):
- self.push_tag('function', [('name', func.name)])
+ attrs = [('name', func.name),
+ ('symbol', func.symbol)]
+ self.push_tag('function', attrs)
self._write_return_type(func.retval)
self._write_parameters(func.parameters)
self.pop_tag()
def _write_method(self, method):
- self.push_tag('method', [('name', method.name)])
+ attrs = [('name', method.name),
+ ('symbol', method.symbol)]
+ self.push_tag('method', attrs)
self._write_return_type(method.retval)
self._write_parameters(method.parameters)
self.pop_tag()
Modified: trunk/giscanner/gobjecttreebuilder.py
==============================================================================
--- trunk/giscanner/gobjecttreebuilder.py (original)
+++ trunk/giscanner/gobjecttreebuilder.py Mon Apr 21 04:18:56 2008
@@ -1,10 +1,21 @@
import ctypes
+import os
from giscanner import cgobject
from giscanner.treebuilder import Class, Enum, Function, Member, Struct
from giscanner.odict import odict
+def resolve_libtool(libname):
+ data = open(libname).read()
+ pos = data.find('dlname=')
+ pos2 = data[pos:].find('\n')
+ real = data[pos:pos+pos2][8:-1]
+ libname = os.path.join(os.path.dirname(libname),
+ '.libs', real)
+ return libname
+
+
class GLibEnum(Enum):
def __init__(self, name, members, get_type):
Enum.__init__(self, name, members)
@@ -35,21 +46,22 @@
class GObjectTreeBuilder(object):
- def __init__(self):
- self.nodes = []
- self._namespace = odict()
+ def __init__(self, namespace_name):
+ self._namespace_name = namespace_name
+ self._output_ns = odict()
self._library = None
# Public API
def get_nodes(self):
- return self._namespace.values()
+ return self._output_ns.values()
def load_library(self, libname):
+ if libname.endswith('.la'):
+ libname = resolve_libtool(libname)
self._library = ctypes.cdll.LoadLibrary(libname)
def parse(self, nodes):
- nodes = list(nodes)
for node in nodes:
self._parse_node(node)
@@ -57,9 +69,21 @@
def _add_attribute(self, node, replace=False):
node_name = node.name
- if node_name in self._namespace and not replace:
+ if node_name in self._output_ns and not replace:
return
- self._namespace[node_name] = node
+ self._output_ns[node_name] = node
+
+ def _get_attribute(self, name):
+ return self._output_ns.get(name)
+
+ def _strip_namespace(self, name):
+ # gtk_init_check -> init_check
+ prefix = self._namespace_name.lower() + '_'
+ lower = name.lower()
+ if lower.startswith(prefix):
+ name = name[len(prefix):]
+
+ return name
def _call_get_type_function(self, symbol_name):
func = getattr(self._library, symbol_name)
@@ -85,8 +109,9 @@
return
elif self._parse_method(func):
return
- else:
- self._add_attribute(func)
+
+ func.name = self._strip_namespace(func.name)
+ self._add_attribute(func)
def _parse_get_type_function(self, func):
# GType *_get_type(void)
@@ -112,7 +137,7 @@
return False
object_name = first_arg.replace('*', '')
- class_ = self._namespace.get(object_name, None)
+ class_ = self._get_attribute(object_name)
if class_ is None or not isinstance(class_, GLibObject):
return False
Modified: trunk/giscanner/treebuilder.py
==============================================================================
--- trunk/giscanner/treebuilder.py (original)
+++ trunk/giscanner/treebuilder.py Mon Apr 21 04:18:56 2008
@@ -1,17 +1,20 @@
import giscanner
+
class Node(object):
pass
class Function(Node):
- def __init__(self, name, retval, parameters):
+ def __init__(self, name, retval, parameters, symbol):
self.name = name
self.retval = retval
self.parameters = parameters
+ self.symbol = symbol
def __repr__(self):
- return 'Function(%r, %r, %r)' % (self.name, self.retval, self.parameters)
+ return 'Function(%r, %r, %r)' % (self.name, self.retval,
+ self.parameters)
class Parameter(Node):
@@ -96,7 +99,7 @@
elif stype == giscanner.CSYMBOL_TYPE_ENUM:
return self._create_enum(symbol)
else:
- print 'unhandled symbol', symbol.type
+ print 'BUILDER: unhandled symbol', symbol.type
def _create_enum(self, symbol):
members = []
@@ -112,7 +115,7 @@
parameters.append(self._create_parameter(child))
retval = Return(self._create_source_type(symbol.base_type.base_type))
- return Function(symbol.ident, retval, parameters)
+ return Function(symbol.ident, retval, parameters, symbol.ident)
def _create_source_type(self, source_type):
if source_type.type == giscanner.CTYPE_VOID:
@@ -124,7 +127,7 @@
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,)
+ print 'BUILDER: Unhandled source type: %d' % (source_type.type,)
value = '???'
return value
Modified: trunk/tools/g-ir-scanner
==============================================================================
--- trunk/tools/g-ir-scanner (original)
+++ trunk/tools/g-ir-scanner Mon Apr 21 04:18:56 2008
@@ -51,7 +51,7 @@
ss.parse_file(filename)
ss.parse_macros()
- builder = GObjectTreeBuilder()
+ builder = GObjectTreeBuilder(options.namespace)
builder.load_library(options.library)
builder.parse(TreeBuilder(ss).get_nodes())
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]