[cfe-dev] Template parameters of friend declarations.
Enea Zaffanella
zaffanella at cs.unipr.it
Mon Jan 21 00:42:35 PST 2013
Hello.
In clang AST, we currently have two nodes representing friend
declarations, namely FriendDecl and FriendTemplateDecl. The
documentation for the second class says that it is currently unused:
/// \note This class is not currently in use. All of the above
/// will yield a FriendDecl, not a FriendTemplateDecl.
Hence, all friend declarations having template parameter lists end up
building a FriendDecl node. Currently, these FriendDecl nodes have no
way to store the (optional) template parameter lists.
For source-code fidelity purposes *only*, would it be OK if FriendDecl
is changed so as to also store this missing info?
Currently, the FriendDecl node uses a pointer union:
typedef llvm::PointerUnion<NamedDecl*,TypeSourceInfo*> FriendUnion;
A possibility would be to add an ExtInfo inner class (similar to what
was done for DeclaratorDecl) and then change the union above to become:
typedef llvm::PointerUnion3<NamedDecl*,TypeSourceInfo*,ExtInfo*>
FriendUnion;
This way, we would incur a memory space penalty only when there actually
are template parameter lists. Are you willing to accept patches
following this approach?
Enea
More information about the cfe-dev
mailing list