[cfe-commits] [Review request] Adding source location for the template keyword in AST template-id expressions.

Enea Zaffanella zaffanella at cs.unipr.it
Mon Jan 9 09:32:46 PST 2012


The current AST representations for expression nodes that possibly
include a template-id (namely, DeclRefExpr and MemberExpr, their
DependentScope variants and their Unresolved variants) store source
location info for:
 - the name qualifier (NestedNameSpecifierLoc);
 - the name (DeclarationNameInfo);
 - the explicit template arguments (ASTTemplateArgumentListInfo).

What was missing is the source location of the (often optional,
sometimes mandatory) template keyword that may occur between the name
qualifier and the name itself.

We would appreciate if someone could review the attached (big, but not
really complex) patch, which is meant to add this info so as to improve
the source-code accuracy of the AST representation.

Below we summarize the relevant changes to help in the review process.
Comments are welcome.


**** Changes in the AST nodes:

We extend ASTTemplateArgumentListInfo so as to allow for storing the
additional source location of the template keyword (TemplateKWLoc).
The new structure is called ASTTemplateKWAndArgsInfo and replaces the
old one in all the expression nodes mentioned above.
(Note: function template specializations keep using the old
ASTTemplateArgumentListInfo structure).

In the expression nodes, the structure is allocated if the expression is
provided with the template keyword OR the explicit template argument
list; previously, it was not allocated if there was no explicit template
argument list.

Other changes include: helper functions for querying the new location,
support for its (de-)serialization, changes to the pretty printer to
exploit the knowledge that there was a template keyword.

**** Changes in Parse:

 - Added a TemplateKWLoc field to TemplateIdAnnotation;
 - Modified ParseUnqualifiedId to also return the source location of the
optionally parsed template keyword;
 - Modified a few other Parse*Id* helpers and the relevant Sema::ActOn*
routines to add TemplateKWLoc as an additional input argument;

**** Changes in Sema:

 - Many (basically trivial) changes to Sema routines so as to propagate
the new TemplateKWLoc input argument down to the code creating the
relevant AST nodes. The new input argument has been kept on his own on
purpose, since it is not really part of the name qualifier or the name
itself. Also changed the relevant routines in TreeTransform.h so as to
propagate the info on instantiation.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: TemplateKeyword.patch.gz
Type: application/x-gzip
Size: 23188 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20120109/68a32c8a/attachment.bin>

More information about the cfe-commits mailing list