[cfe-dev] Type of enum constants

Eli Friedman eli.friedman at gmail.com
Fri Feb 24 14:50:41 PST 2012


On Fri, Feb 24, 2012 at 2:35 PM, Phil King <phil_king at rocketmail.com> wrote:
> On 24 Feb 2012, at 21:46, Eli Friedman <eli.friedman at gmail.com> wrote:
>
>> On Fri, Feb 24, 2012 at 1:23 PM, Phil King <phil_king at rocketmail.com> wrote:
>>> If I have:
>>>
>>> typedef enum { E } e_t;
>>>
>>> and then an expression:
>>>
>>> a = E;
>>>
>>> is it possible to get back to the typedef name from the DeclRefExpr node for 'E' ?
>>>
>>> EnumConstantDecl * EC = dyn_cast< EnumConstantDecl >( DeclRefExpr->getDecl() );
>>>
>>> QualType = AC->getASTContext().getEnumType( dyn_cast< EnumDecl >( EC->getDeclContext() ) );
>>>
>>> gets me to enum { E } e_t, but not the typedef itself.
>>
>> Try TagDecl::getTypedefNameForAnonDecl .
>
> That does the job. Thanks.
>
> How do I do the same if there is a tag name?

Are you talking about "typedef enum A { B } A;"?  If you really need
to find the typedef in that case, I think you're stuck with traversing
the AST to try and find it.

-Eli



More information about the cfe-dev mailing list