summaryrefslogtreecommitdiff
path: root/giscanner
diff options
context:
space:
mode:
Diffstat (limited to 'giscanner')
-rw-r--r--giscanner/docwriter.py2
-rw-r--r--giscanner/gdumpparser.py4
-rw-r--r--giscanner/transformer.py12
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)