From f606183a010fbec4382acb728882cc0eddbaf7f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Mi=C4=85sko?= Date: Sat, 10 Feb 2018 00:00:00 +0000 Subject: Restore original meaning of disguised attribute. > Certain types like GIConv and GdkAtom are pointers internally but don't > look like pointers when referenced. They have the form. > > typedef struct _X *X; > > Parse these as structures/records but mark them in the gir with a 'disguised' > attribute so that we know that they need special handling. Additionally, stop relaying on disguised attribute when deciding whether to render a page. Check number of fields instead, so as to avoid introducing large regression in the docs. Fixes #101. --- giscanner/docwriter.py | 2 +- giscanner/gdumpparser.py | 4 ---- giscanner/transformer.py | 12 +----------- tests/scanner/Identfilter-1.0-expected.gir | 4 ++-- tests/scanner/Regress-1.0-expected.gir | 12 +++--------- tests/scanner/Symbolfilter-1.0-expected.gir | 2 +- 6 files changed, 8 insertions(+), 28 deletions(-) diff --git a/giscanner/docwriter.py b/giscanner/docwriter.py index aa8b993c..e09427f9 100644 --- a/giscanner/docwriter.py +++ b/giscanner/docwriter.py @@ -861,7 +861,7 @@ class DocFormatterGjs(DocFormatterIntrospectableBase): if isinstance(node, (ast.Compound, ast.Boxed)): self.resolve_gboxed_constructor(node) - if isinstance(node, ast.Compound) and node.disguised and \ + if isinstance(node, ast.Compound) and len(node.fields) == 0 and \ len(node.methods) == len(node.static_methods) == len(node.constructors) == 0: return False diff --git a/giscanner/gdumpparser.py b/giscanner/gdumpparser.py index 1730fee5..9082cbe7 100644 --- a/giscanner/gdumpparser.py +++ b/giscanner/gdumpparser.py @@ -230,7 +230,6 @@ blob containing data gleaned from GObject's primitive introspection.""" c_symbol_prefix='variant') elif record.name == 'InitiallyUnownedClass': record.fields = self._namespace.get('ObjectClass').fields - record.disguised = False # Introspection over the data we get from the dynamic # GObject/GType system out of the binary @@ -510,9 +509,6 @@ different --identifier-prefix.""" % (xmlnode.attrib['name'], self._namespace.ide pair_node.add_gtype(boxed.gtype_name, boxed.get_type) assert boxed.c_symbol_prefix is not None pair_node.c_symbol_prefix = boxed.c_symbol_prefix - # Quick hack - reset the disguised flag; we're setting it - # incorrectly in the scanner - pair_node.disguised = False else: return False diff --git a/giscanner/transformer.py b/giscanner/transformer.py index 9911de70..4f3abcf4 100644 --- a/giscanner/transformer.py +++ b/giscanner/transformer.py @@ -822,13 +822,7 @@ raise ValueError.""" # by it being returned to the "parse" function and are also added to # the tag namespace if it has a tag_name set. compound = compound_class(name, symbol.ident, disguised=disguised, tag_name=tag_name) - if tag_name: - # Force the struct as disguised for now since we do not yet know - # if it has fields that will be parsed. Note that this is using - # an erroneous definition of disguised and we should eventually - # only look at the field count when needed. - compound.disguised = True - else: + if not tag_name: # Case where we have an anonymous struct which is typedef'd: # typedef struct {...} Struct; # we need to parse the fields because we never get a struct @@ -844,10 +838,6 @@ raise ValueError.""" compound = self._tag_ns[symbol.ident] else: compound = compound_class(None, symbol.ident, tag_name=symbol.ident) - - # Make sure disguised is False as we are now about to parse the - # fields of the real struct. - compound.disguised = False # Fields may need to be parsed in either of the above cases because the # Record can be created with a typedef prior to the struct definition. self._parse_fields(symbol, compound) diff --git a/tests/scanner/Identfilter-1.0-expected.gir b/tests/scanner/Identfilter-1.0-expected.gir index 15cd408a..c36da9f9 100644 --- a/tests/scanner/Identfilter-1.0-expected.gir +++ b/tests/scanner/Identfilter-1.0-expected.gir @@ -11,10 +11,10 @@ and/or use gtk-doc annotations. --> shared-library="" c:identifier-prefixes="Identfilter" c:symbol-prefixes="identfilter"> - + - + diff --git a/tests/scanner/Regress-1.0-expected.gir b/tests/scanner/Regress-1.0-expected.gir index 3053b907..37ef3109 100644 --- a/tests/scanner/Regress-1.0-expected.gir +++ b/tests/scanner/Regress-1.0-expected.gir @@ -1411,7 +1411,6 @@ it says it's pointer but it's actually a string. @@ -2096,7 +2095,6 @@ uses a C sugar return type. @@ -2221,9 +2219,7 @@ exposed to language bindings. - + - + Like telepathy-glib's TpIntset. @@ -2818,9 +2814,7 @@ use it should be. - + diff --git a/tests/scanner/Symbolfilter-1.0-expected.gir b/tests/scanner/Symbolfilter-1.0-expected.gir index 80fe0d4b..96c2231b 100644 --- a/tests/scanner/Symbolfilter-1.0-expected.gir +++ b/tests/scanner/Symbolfilter-1.0-expected.gir @@ -11,7 +11,7 @@ and/or use gtk-doc annotations. --> shared-library="" c:identifier-prefixes="Symbolfilter" c:symbol-prefixes="symbolfilter"> - + -- cgit v1.2.1