[cfe-dev] AST structrue of enums in clang

Douglas Gregor dgregor at apple.com
Mon Mar 7 07:03:15 PST 2011


I don't know what you mean by "covers", but if you look at the AST dump

  
> 
>  void foo() (CompoundStmt 0x101843320 <t3.cpp:10:8, line:12:8>
>   (DeclStmt 0x101843300 <line:11:16, col:28>
>     0x101843280 "A::E eVar =
>       (DeclRefExpr 0x1018432d0 <col:25> 'enum A::E' EnumConstant='ec1' 0x1018430f0)"))
> 

You can see that that the DeclStmt has the declaration eVar as one of its child nodes, and the initializer of eVar is a DeclRefExpr that points back at the EnumConstantDecl ec1.

	- Doug

On Mar 6, 2011, at 10:44 PM, Talespin Kit wrote:

> Thanks for reply,
>               Given an EnumConstantDecl(E::e1) and DeclStmt( E eVar1 = ec1;), how to find that the DeclStmt covers the EnumConstantDecl.
> 
> --- On Fri, 3/4/11, Douglas Gregor <dgregor at apple.com> wrote:
> 
> From: Douglas Gregor <dgregor at apple.com>
> Subject: Re: [cfe-dev] AST structrue of enums in clang
> To: "Talespin Kit" <talespin_kit at yahoo.com>
> Cc: cfe-dev at cs.uiuc.edu
> Date: Friday, March 4, 2011, 3:22 PM
> 
> 
> On Mar 4, 2011, at 3:31 AM, Talespin Kit wrote:
> 
>> Assume the follwing code
>>  
>> class A
>> {
>>     public:
>>         enum E { // E is EnumDecl
>>                         ec1,  // EnumConstantDecl
>>                         ec2
>>                    };
>>  
>>        void foo()
>>        {
>>                E eVar = ec1; // this is a DeclStmt, but what is the type of eVar and ec1?
>>        }
>> };
>>  
>> In the above code we know that the line E eVar = ec1; is a DeclStmt. What are the subcomponents of that.
>>  
>> What is the type of ec1?.
>>  
>> _______________________________________________
> 
> 
> The AST dump is a good way to see this information:
> 
> $ clang -cc1 -ast-dump t3.cpp 
> typedef __int128_t __int128_t;
> typedef __uint128_t __uint128_t;
> struct __va_list_tag {
>     struct __va_list_tag;
>     unsigned int gp_offset;
>     unsigned int fp_offset;
>     void *overflow_arg_area;
>     void *reg_save_area;
> };
> typedef struct __va_list_tag __va_list_tag;
> typedef __va_list_tag __builtin_va_list[1];
> class A {
>     class A;
> public:
>     enum E {
>         ec1,
>         ec2
>     };
>     void foo() (CompoundStmt 0x101843320 <t3.cpp:10:8, line:12:8>
>   (DeclStmt 0x101843300 <line:11:16, col:28>
>     0x101843280 "A::E eVar =
>       (DeclRefExpr 0x1018432d0 <col:25> 'enum A::E' EnumConstant='ec1' 0x1018430f0)"))
> 
> 
> };
> 
> 	- Doug
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20110307/d47330be/attachment.html>


More information about the cfe-dev mailing list