[cfe-dev] AST representation constant time arrays defined with enums

Douglas Gregor dgregor at apple.com
Mon Mar 14 13:14:44 PDT 2011


On Mar 14, 2011, at 1:05 PM, chris nuernberger wrote:

> I am using clang to do some code generation and one thing that is
> tripping me up is a pattern like:
> 
> struct ArrayMembers
> {
> enum Enum
> {
> First,
> Second,
> Third,
> Count,
> };
> };
> 
> struct GenericData
> {
> int NamedArray[ArrayMembers::Count];
> };
> 
>> From the AST, I get that the array is a statically-sized array of
> length 3.  This works fine.  I can't get that that 3 was derived from
> the ArrayMembers::Count declaration.
> 
> This is useful for something that analyzes code because people use
> this system to give the entries in the array names that are
> meaningful.  I lose those meanings right now perhaps because I don't
> understand clang's AST very well.
> 
> Is there a way from the array declaration in the clang AST can I
> figure out 1.  If it was declared using an enumeration value and 2.
> what enumeration that value came from?


You can dig down to the ArrayTypeLoc that describes the type of NamedArray; that ArrayTypeLoc has a size expression in it, which is the expression as written in the source code.

	- Doug



More information about the cfe-dev mailing list