summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Zeuthen <davidz@redhat.com>2011-02-14 09:10:34 -0500
committerDavid Zeuthen <davidz@redhat.com>2011-02-14 09:10:34 -0500
commit95dae0a01714e5cbe6a1ef9ab4e37ac28d12971a (patch)
tree92a0ed55f64cb2f34cfc4752971c18c842cf5c0a
parentc907e427f2e5bdace2f87b3162687a5c237fab3b (diff)
Handle introspection XML with unnamed arguments
Signed-off-by: David Zeuthen <davidz@redhat.com>
-rw-r--r--src/dbustypes.py17
-rw-r--r--src/parser.py10
2 files changed, 20 insertions, 7 deletions
diff --git a/src/dbustypes.py b/src/dbustypes.py
index dc8b244..7b464f8 100644
--- a/src/dbustypes.py
+++ b/src/dbustypes.py
@@ -14,7 +14,9 @@ class Arg:
self.signature = signature
self.annotations = []
- def calculate_c_names(self, strip_prefix, namespace):
+ def calculate_c_names(self, strip_prefix, namespace, arg_number):
+ if self.name == None:
+ self.name = 'unnamed_arg%d'%arg_number
# default to GVariant
self.ctype_in_g = 'GVariant *'
self.ctype_in = 'GVariant *'
@@ -162,11 +164,14 @@ class Method:
self.name_lower = utils.camel_case_to_uscore(name).lower().replace('-', '_')
self.name_hyphen = self.name_lower.replace('_', '-')
+ arg_count = 0
for a in self.in_args:
- a.calculate_c_names(strip_prefix, namespace)
+ a.calculate_c_names(strip_prefix, namespace, arg_count)
+ arg_count += 1
for a in self.out_args:
- a.calculate_c_names(strip_prefix, namespace)
+ a.calculate_c_names(strip_prefix, namespace, arg_count)
+ arg_count += 1
#print ' --- method'
#print ' name: ' + self.name
#print ' name_lower: ' + self.name_lower
@@ -199,8 +204,10 @@ class Signal:
#print ' name: ' + self.name
#print ' name_lower: ' + self.name_lower
+ arg_count = 0
for a in self.args:
- a.calculate_c_names(strip_prefix, namespace)
+ a.calculate_c_names(strip_prefix, namespace, arg_count)
+ arg_count += 1
class Property:
def __init__(self, name, signature, access):
@@ -239,7 +246,7 @@ class Property:
# recalculate arg
self.arg.annotations = self.annotations
- self.arg.calculate_c_names(strip_prefix, namespace)
+ self.arg.calculate_c_names(strip_prefix, namespace, 0)
class Interface:
def __init__(self, name): #gi, strip_prefix, namespace):
diff --git a/src/parser.py b/src/parser.py
index 50fe810..7b2a854 100644
--- a/src/parser.py
+++ b/src/parser.py
@@ -84,7 +84,10 @@ class DBusXMLParser:
elif self.state == DBusXMLParser.STATE_METHOD:
if name == DBusXMLParser.STATE_ARG:
self.state = DBusXMLParser.STATE_ARG
- arg = dbustypes.Arg(attrs['name'], attrs['type'])
+ arg_name = None
+ if attrs.has_key('name'):
+ arg_name = attrs['name']
+ arg = dbustypes.Arg(arg_name, attrs['type'])
direction = attrs['direction']
if direction == 'in':
self._cur_object.in_args.append(arg)
@@ -103,7 +106,10 @@ class DBusXMLParser:
elif self.state == DBusXMLParser.STATE_SIGNAL:
if name == DBusXMLParser.STATE_ARG:
self.state = DBusXMLParser.STATE_ARG
- arg = dbustypes.Arg(attrs['name'], attrs['type'])
+ arg_name = None
+ if attrs.has_key('name'):
+ arg_name = attrs['name']
+ arg = dbustypes.Arg(arg_name, attrs['type'])
self._cur_object.args.append(arg)
self._cur_object = arg
elif name == DBusXMLParser.STATE_ANNOTATION: