[cfe-dev] ParseFunctionDeclarator

John Freeman jfreeman at cse.tamu.edu
Fri Jun 24 14:14:11 PDT 2011


The documentation for Parser::ParseFunctionDeclarator (hereafter 
referred to as PFD) has this note near the end:

   For C++, after the parameter-list, it also parses "cv-qualifier-
   seq[opt]", C++0x "ref-qualifier[opt]" and "exception-
   specification[opt]".

I would like to use this function when parsing lambda expressions, but 
the extra parts it parses at the end are simultaneously too much 
(cv-qualifier-seq, ref-qualifier) and not enough (attribute-specifier, 
'mutable') for lambdas.

I could try to call PFD anyway, then check if it parsed anything extra 
that it shouldn't have. I believe this is existing convention, e.g., to 
diagnose const-qualified non-member functions.

However, PFD calls Declarator::AddTypeInfo, which takes a 
DeclaratorChunk that, for function declarators, requires information 
about the parameters, qualifiers, exceptions, and return type all at 
once. Here is the documentation for DeclaratorChunk:

   One instance of this struct is used for each type in a declarator
   that is parsed.

This suggests to me that I cannot, after calling PFD, call AddTypeInfo 
to add the lambda-declarator parts that PFD missed. Thus, I see two 
options to address the situation:

1. Try to extend PFD to parse a lambda-declarator. Existing clients will 
need to add checks for the parts that don't belong in regular function 
declarators.

2. Factor code out of PFD into several component functions. Old clients 
can still use PFD, and I can use just the pieces I need. This is the 
option I personally favor.

Any thoughts?

- John



More information about the cfe-dev mailing list