diff options
author | Emmanuele Bassi <ebassi@gnome.org> | 2021-02-09 11:38:27 +0000 |
---|---|---|
committer | Emmanuele Bassi <ebassi@gmail.com> | 2021-08-05 16:24:23 +0000 |
commit | 661ca094e8d2279709258169a9e67ff7dc10f3a7 (patch) | |
tree | a1d4596787ec3c7bf51372748a76c634c51b2b3e /giscanner | |
parent | ffb165a58d360d1453f6ced227ae645951bfb8b6 (diff) | |
download | gobject-introspection-661ca094e8d2279709258169a9e67ff7dc10f3a7.tar.gz |
Add "final" class attribute
A "final" class is a leaf node in a derivable type hierarchy, and cannot
be derived any further.
This matches the changes in libgobject that introduced G_TYPE_FLAG_FINAL
to the type flags.
Diffstat (limited to 'giscanner')
-rw-r--r-- | giscanner/ast.py | 4 | ||||
-rw-r--r-- | giscanner/gdumpparser.py | 8 | ||||
-rw-r--r-- | giscanner/girparser.py | 3 | ||||
-rw-r--r-- | giscanner/girwriter.py | 2 |
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' |