summaryrefslogtreecommitdiff
path: root/giscanner
diff options
context:
space:
mode:
authorAndreas Rottmann <a.rottmann@gmx.at>2009-07-03 23:14:04 +0200
committerAndreas Rottmann <a.rottmann@gmx.at>2009-07-03 23:14:04 +0200
commit5f811f2d0d192c3d546b91e12fcf74b341434ca9 (patch)
tree8a1d43404a7e51d5cc5700233a249a8904c8ccca /giscanner
parente8d99aad1d29f343583792fac41a5182ab7d2ef7 (diff)
downloadgobject-introspection-5f811f2d0d192c3d546b91e12fcf74b341434ca9.tar.gz
Allow annotations on fields
Plain fields (i.e. non-callbacks) may have a 'type' annotation now.
Diffstat (limited to 'giscanner')
-rw-r--r--giscanner/annotationparser.py20
1 files changed, 15 insertions, 5 deletions
diff --git a/giscanner/annotationparser.py b/giscanner/annotationparser.py
index d79a46bb..79cbfe8a 100644
--- a/giscanner/annotationparser.py
+++ b/giscanner/annotationparser.py
@@ -332,7 +332,7 @@ class AnnotationApplier(object):
self._parse_node_common(record, block)
self._parse_constructors(record.constructors)
self._parse_methods(record, record.methods)
- self._parse_fields(record, record.fields)
+ self._parse_fields(record, record.fields, block)
if block:
record.doc = block.comment
@@ -347,7 +347,7 @@ class AnnotationApplier(object):
def _parse_union(self, union):
block = self._blocks.get(union.name)
self._parse_node_common(union, block)
- self._parse_fields(union, union.fields)
+ self._parse_fields(union, union.fields, block)
self._parse_constructors(union.constructors)
self._parse_methods(union, union.methods)
if block:
@@ -373,9 +373,9 @@ class AnnotationApplier(object):
for ctor in constructors:
self._parse_function(ctor)
- def _parse_fields(self, parent, fields):
+ def _parse_fields(self, parent, fields, block=None):
for field in fields:
- self._parse_field(parent, field)
+ self._parse_field(parent, field, block)
def _parse_properties(self, parent, properties):
for prop in properties:
@@ -464,9 +464,19 @@ class AnnotationApplier(object):
key = '%s::%s' % (parent.type_name, vfunc.name)
self._parse_callable(vfunc, self._blocks.get(key))
- def _parse_field(self, parent, field):
+ def _parse_field(self, parent, field, block=None):
if isinstance(field, Callback):
self._parse_callback(field)
+ else:
+ if not block:
+ return
+ tag = block.get(field.name)
+ if not tag:
+ return
+ t = tag.options.get('type')
+ if not t:
+ return
+ field.type.name = self._transformer.resolve_type_name(t.one())
def _parse_params(self, parent, params, block):
for param in params: