So, I'm designing types to represent affiliations to PubSub nodes. This is what I want in half-C++-half-DBus: struct Affiliation { QString jid; AffiliationType affiliation; }; enum AffiliationType { AffiliationOwner, AffiliationPublisher, AffiliationPublishOnly, ... }; So I wrote this spec. XML: <tp:struct name="Affiliation"> <tp:member name="JID" type="s"/> <tp:member name="Type" type="u" tp:type="Affiliation_Type"/> </tp:struct> <tp:enum name="Affiliation_Type" type="u" value-prefix="Affiliation"> <tp:enumvalue suffix="Owner" value="0"/> <tp:enumvalue suffix="Publisher" value="1"/> <tp:enumvalue suffix="Publish_Only" value="2"/> <!-- ... --> </tp:enum> and was horrified to discover that the code generator named the C++ enum 'Affiliation', which of course collides with the name of the struct. This turns out to be because tpqt4-constants-gen.py does this: def do_enum(self, enum): singular = enum.getAttribute('singular') or \ enum.getAttribute('value-prefix') or \ enum.getAttribute('name') I'm pretty sure that the use of value-prefix here shouldn't be there, given that the whole point of it is to be able to use a different prefix for values than the name of the type. Sadly we can't fix this without breaking the tp-qt4 API, so I guess I'm about to become the first person to use this newly-discovered 'singular' attribute.
The corresponding tp-glib codegen (which looks remarkably similar) does something more like what I would have expected, separating the name from the value prefix: def do_enum(self, enum): name = enum.getAttribute('singular') or enum.getAttribute('name') value_prefix = enum.getAttribute('singular') or \ enum.getAttribute('value-prefix') or \ enum.getAttribute('name') name_plural = enum.getAttribute('plural') or \ enum.getAttribute('name') + 's'
Fix merged to master. Will be in 0.5.0.
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.