summaryrefslogtreecommitdiff
path: root/giscanner
diff options
context:
space:
mode:
Diffstat (limited to 'giscanner')
-rw-r--r--giscanner/ast.py4
-rw-r--r--giscanner/gdumpparser.py8
-rw-r--r--giscanner/girparser.py3
-rw-r--r--giscanner/girwriter.py2
4 files changed, 14 insertions, 3 deletions
diff --git a/giscanner/ast.py b/giscanner/ast.py
index 9a0d95c7..e11fc988 100644
--- a/giscanner/ast.py
+++ b/giscanner/ast.py
@@ -1188,7 +1188,8 @@ class Class(Node, Registered):
gtype_name=None,
get_type=None,
c_symbol_prefix=None,
- is_abstract=False):
+ is_abstract=False,
+ is_final=False):
Node.__init__(self, name)
Registered.__init__(self, gtype_name, get_type)
self.ctype = ctype
@@ -1205,6 +1206,7 @@ class Class(Node, Registered):
self.parent_chain = []
self.glib_type_struct = None
self.is_abstract = is_abstract
+ self.is_final = is_final
self.methods = []
self.virtual_methods = []
self.static_methods = []
diff --git a/giscanner/gdumpparser.py b/giscanner/gdumpparser.py
index 03a4ecc3..1a0794d4 100644
--- a/giscanner/gdumpparser.py
+++ b/giscanner/gdumpparser.py
@@ -320,6 +320,7 @@ different --identifier-prefix.""" % (xmlnode.attrib['name'], self._namespace.ide
def _introspect_object(self, xmlnode):
type_name = xmlnode.attrib['name']
is_abstract = bool(xmlnode.attrib.get('abstract', False))
+ is_final = bool(xmlnode.attrib.get('final', False))
(get_type, c_symbol_prefix) = self._split_type_and_symbol_prefix(xmlnode)
try:
object_name = self._transformer.strip_identifier(type_name)
@@ -329,7 +330,8 @@ different --identifier-prefix.""" % (xmlnode.attrib['name'], self._namespace.ide
gtype_name=type_name,
get_type=get_type,
c_symbol_prefix=c_symbol_prefix,
- is_abstract=is_abstract)
+ is_abstract=is_abstract,
+ is_final=is_final)
self._parse_parents(xmlnode, node)
self._introspect_properties(node, xmlnode)
self._introspect_signals(node, xmlnode)
@@ -458,6 +460,7 @@ different --identifier-prefix.""" % (xmlnode.attrib['name'], self._namespace.ide
type_name = xmlnode.attrib['name']
is_abstract = bool(xmlnode.attrib.get('abstract', False))
+ is_final = bool(xmlnode.attrib.get('final', False))
(get_type, c_symbol_prefix) = self._split_type_and_symbol_prefix(xmlnode)
try:
fundamental_name = self._transformer.strip_identifier(type_name)
@@ -469,7 +472,8 @@ different --identifier-prefix.""" % (xmlnode.attrib['name'], self._namespace.ide
gtype_name=type_name,
get_type=get_type,
c_symbol_prefix=c_symbol_prefix,
- is_abstract=is_abstract)
+ is_abstract=is_abstract,
+ is_final=is_final)
self._parse_parents(xmlnode, node)
node.fundamental = True
self._introspect_implemented_interfaces(node, xmlnode)
diff --git a/giscanner/girparser.py b/giscanner/girparser.py
index da200a65..9f124d89 100644
--- a/giscanner/girparser.py
+++ b/giscanner/girparser.py
@@ -259,6 +259,9 @@ class GIRParser(object):
is_abstract = node.attrib.get('abstract')
is_abstract = is_abstract and is_abstract != '0'
ctor_kwargs['is_abstract'] = is_abstract
+ is_final = node.attrib.get('final')
+ is_final = is_final and is_final != '0'
+ ctor_kwargs['is_final'] = is_final
else:
raise AssertionError(node)
diff --git a/giscanner/girwriter.py b/giscanner/girwriter.py
index 54c957c0..d276e923 100644
--- a/giscanner/girwriter.py
+++ b/giscanner/girwriter.py
@@ -475,6 +475,8 @@ class GIRWriter(XMLWriter):
self._type_to_name(node.parent_type)))
if node.is_abstract:
attrs.append(('abstract', '1'))
+ if node.is_final:
+ attrs.append(('final', '1'))
else:
assert isinstance(node, ast.Interface)
tag_name = 'interface'