[cfe-dev] Changing the size of ConstantArrayType

John McCall rjmccall at apple.com
Mon Jan 31 14:08:28 PST 2011


On Jan 31, 2011, at 1:39 PM, Dimitrij Kotrev wrote:
> i need a way to change the size of the ConstantArrayType after the AST
> is created.

Types are immutable, and for good reason.

I assume that what you're actually trying to do is change the allocated
size of an array-typed variable or field.

> I thought about two ways to do it:
> 1. I'll add a setSize method to ConstantArrayType class.

This would play havoc with the entire type system;  don't do this.

> or
> 2. I replace 'somehow' the node in the AST with a new one, which has
> the size i need.

If my guess above is correct, then what you want to do is to set the type
of your VarDecl/FieldDecl to be the new type.  It's not necessarily quite that
simple, though — you'll also need to modify the types of all the references
to that variable, and you'll need to pretend that all the ways in which the
length of a declared array is reflectively discoverable in code can't actually
happen (†).

John.

† The most obvious way to detect the length of an array is with template
argument deduction in C++; even in C, though, you have to worry about
code doing clever things with sizeof.



More information about the cfe-dev mailing list