diff options
Diffstat (limited to 'giscanner')
-rw-r--r-- | giscanner/docwriter.py | 2 | ||||
-rw-r--r-- | giscanner/gdumpparser.py | 4 | ||||
-rw-r--r-- | giscanner/transformer.py | 12 |
3 files changed, 16 insertions, 2 deletions
diff --git a/giscanner/docwriter.py b/giscanner/docwriter.py index e09427f9..aa8b993c 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 len(node.fields) == 0 and \ + if isinstance(node, ast.Compound) and node.disguised 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 9082cbe7..1730fee5 100644 --- a/giscanner/gdumpparser.py +++ b/giscanner/gdumpparser.py @@ -230,6 +230,7 @@ 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 @@ -509,6 +510,9 @@ 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 4f3abcf4..9911de70 100644 --- a/giscanner/transformer.py +++ b/giscanner/transformer.py @@ -822,7 +822,13 @@ 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 not 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: # 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 @@ -838,6 +844,10 @@ 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) |