From 013937b79ce3467068352e6dd0179efaf2563ac7 Mon Sep 17 00:00:00 2001 From: Johan Dahlin Date: Fri, 24 Sep 2010 09:59:21 -0300 Subject: [maintransformer] Add more warnings for element-type --- giscanner/maintransformer.py | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) (limited to 'giscanner') diff --git a/giscanner/maintransformer.py b/giscanner/maintransformer.py index fcbf1099..605b1d1c 100644 --- a/giscanner/maintransformer.py +++ b/giscanner/maintransformer.py @@ -358,19 +358,42 @@ usage is void (*_gtk_reserved1)(void);""" def _apply_annotations_element_type(self, parent, node, options): element_type_opt = options.get(OPT_ELEMENT_TYPE) - element_type = element_type_opt.flat() + if element_type_opt is None: + message.warn( + 'element-type annotation takes at least one option, ' + 'none given', + options.position) + return + if isinstance(node.type, ast.List): - assert len(element_type) == 1 - node.type.element_type = self._resolve(element_type[0], + if element_type_opt.length() != 1: + message.warn( + 'element-type annotation for a list must have exactly ' + 'one option, not %d options' % (element_type_opt.length(), ), + options.position) + return + node.type.element_type = self._resolve(element_type_opt.one(), node.type, node, parent) elif isinstance(node.type, ast.Map): - assert len(element_type) == 2 + if element_type_opt.length() != 2: + message.warn( + 'element-type annotation for a hash table must have exactly ' + 'two options, not %d option(s)' % (element_type_opt.length(), ), + options.position) + return + element_type = element_type_opt.flat() node.type.key_type = self._resolve(element_type[0], node.type, node, parent) node.type.value_type = self._resolve(element_type[1], node.type, node, parent) elif isinstance(node.type, ast.Array): - node.type.element_type = self._resolve(element_type[0], + if element_type_opt.length() != 1: + message.warn( + 'element-type annotation for an array must have exactly ' + 'one option, not %d options' % (element_type_opt.length(), ), + options.position) + return + node.type.element_type = self._resolve(element_type_opt.one(), node.type, node, parent) else: message.warn_node(parent, -- cgit v1.2.1