summaryrefslogtreecommitdiff
path: root/giscanner
diff options
context:
space:
mode:
Diffstat (limited to 'giscanner')
-rw-r--r--giscanner/annotationparser.py4
-rw-r--r--giscanner/ast.py3
-rw-r--r--giscanner/girparser.py5
-rw-r--r--giscanner/girwriter.py4
-rw-r--r--giscanner/maintransformer.py12
-rw-r--r--giscanner/transformer.py3
6 files changed, 24 insertions, 7 deletions
diff --git a/giscanner/annotationparser.py b/giscanner/annotationparser.py
index c99cf630..243b6afd 100644
--- a/giscanner/annotationparser.py
+++ b/giscanner/annotationparser.py
@@ -39,6 +39,7 @@ TAG_REF_FUNC = 'ref func'
TAG_SET_VALUE_FUNC = 'set value func'
TAG_GET_VALUE_FUNC = 'get value func'
TAG_TRANSFER = 'transfer'
+TAG_VALUE = 'value'
_ALL_TAGS = [TAG_VFUNC,
TAG_SINCE,
TAG_STABILITY,
@@ -51,7 +52,8 @@ _ALL_TAGS = [TAG_VFUNC,
TAG_REF_FUNC,
TAG_SET_VALUE_FUNC,
TAG_GET_VALUE_FUNC,
- TAG_TRANSFER]
+ TAG_TRANSFER,
+ TAG_VALUE]
# Options - annotations for parameters and return values
OPT_ALLOW_NONE = 'allow-none'
diff --git a/giscanner/ast.py b/giscanner/ast.py
index d2975afc..b228a561 100644
--- a/giscanner/ast.py
+++ b/giscanner/ast.py
@@ -993,10 +993,11 @@ class Interface(Node, Registered):
class Constant(Node):
- def __init__(self, name, value_type, value):
+ def __init__(self, name, value_type, value, ctype):
Node.__init__(self, name)
self.value_type = value_type
self.value = value
+ self.ctype = ctype
class Property(Node):
diff --git a/giscanner/girparser.py b/giscanner/girparser.py
index 8568fea3..5faaf197 100644
--- a/giscanner/girparser.py
+++ b/giscanner/girparser.py
@@ -543,8 +543,9 @@ class GIRParser(object):
def _parse_constant(self, node):
type_node = self._parse_type(node)
constant = ast.Constant(node.attrib['name'],
- type_node,
- node.attrib['value'])
+ type_node,
+ node.attrib['value'],
+ node.attrib.get(_cns('type')))
self._parse_generic_attribs(node, constant)
self._namespace.append(constant)
diff --git a/giscanner/girwriter.py b/giscanner/girwriter.py
index f1e150df..bfe82a85 100644
--- a/giscanner/girwriter.py
+++ b/giscanner/girwriter.py
@@ -362,7 +362,9 @@ and/or use gtk-doc annotations. ''')
self.write_tag('member', attrs)
def _write_constant(self, constant):
- attrs = [('name', constant.name), ('value', constant.value)]
+ attrs = [('name', constant.name),
+ ('value', constant.value),
+ ('c:type', constant.ctype)]
with self.tagcontext('constant', attrs):
self._write_type(constant.value_type)
diff --git a/giscanner/maintransformer.py b/giscanner/maintransformer.py
index 29d9229d..a921ad47 100644
--- a/giscanner/maintransformer.py
+++ b/giscanner/maintransformer.py
@@ -24,7 +24,7 @@ from . import message
from .annotationparser import (TAG_VFUNC, TAG_SINCE, TAG_DEPRECATED, TAG_RETURNS,
TAG_ATTRIBUTES, TAG_RENAME_TO, TAG_TYPE,
TAG_UNREF_FUNC, TAG_REF_FUNC, TAG_SET_VALUE_FUNC,
- TAG_GET_VALUE_FUNC)
+ TAG_GET_VALUE_FUNC, TAG_VALUE)
from .annotationparser import (OPT_ALLOW_NONE, OPT_ARRAY, OPT_ATTRIBUTE,
OPT_ELEMENT_TYPE, OPT_IN, OPT_INOUT,
OPT_INOUT_ALT, OPT_OUT, OPT_SCOPE,
@@ -238,6 +238,8 @@ usage is void (*_gtk_reserved1)(void);"""
node.set_value_func = tag.value if tag else None
tag = block.get(TAG_GET_VALUE_FUNC)
node.get_value_func = tag.value if tag else None
+ if isinstance(node, ast.Constant):
+ self._apply_annotations_constant(node)
return True
def _adjust_container_type(self, parent, node, options):
@@ -788,6 +790,14 @@ usage is void (*_gtk_reserved1)(void);"""
self._apply_annotations_param(signal, param, tag)
self._apply_annotations_return(signal, signal.retval, block)
+ def _apply_annotations_constant(self, node):
+ block = self._blocks.get(node.ctype)
+ if not block:
+ return
+ tag = block.get(TAG_VALUE)
+ if tag:
+ node.value = tag.value
+
def _pass_read_annotations2(self, node, chain):
if isinstance(node, ast.Function):
self._apply_annotations2_function(node, chain)
diff --git a/giscanner/transformer.py b/giscanner/transformer.py
index d3a056b3..cb785e73 100644
--- a/giscanner/transformer.py
+++ b/giscanner/transformer.py
@@ -672,7 +672,8 @@ raise ValueError."""
else:
raise AssertionError()
- const = ast.Constant(name, typeval, value)
+ const = ast.Constant(name, typeval, value,
+ symbol.ident)
const.add_symbol_reference(symbol)
return const