[cfe-dev] methods to access "base" and "index" in ArraySubscriptExpr

Ted Kremenek kremenek at apple.com
Fri Aug 17 14:38:37 PDT 2007

On Aug 17, 2007, at 11:38 AM, Ted Kremenek wrote:

>> The only disadvantage with this is the crazy case of idx[base] will  
>> always be output as base[idx] (if we are doing a pretty printer or  
>> source analysis tool). From my perspective, this loss is extremely  
>> minor (and can be fixed one day if necessary). In other words, I  
>> think it makes sense for the AST to normalize this case.
> Steve and I just discussed this in person.
> We decided that we will have BaseExpr and IndexExpr refer to the  
> true "base" and "index" respectively (just as in Steve's post), but  
> then add getLHS() and getRHS() methods to ArraySubscriptExpr that  
> return the lexically "left" and "right" expressions based on  
> comparing their SourceLocations.
> This will allow the common case that does semantic analysis on the  
> AST to not have any extra logic when doing getBase() and getIdx().   
> For tools requiring manipulating expressions at the source level, we  
> have getLHS() and getRHS().  This will be the slightly slower than  
> getBase()/getIdx() (but likely unnoticeable in performance for such  
> applications).

So we ended up talking about this again.  As stated before, the  
solution we will take is to have 4 accessors:

getBase, getIdx, getLHS, and getRHS

Because we cannot easily compare SourceLocations, it is easier for us  
to remember which expression was the LHS and which expression was the  
RHS, and then normalize in the accessors getBase and getIdx rather  
than doing the reverse normalization.

I'll make a patch today that changes ArraySubscriptExpr to have these  
accessors, and to change the current semantics of getBase and getIdx  
to do the normalization of the expression.  I'll also patch the source  
code pretty printer, Codegen, etc. (the current clients of this  
interface).  All future clients will follow the new semantics (a big  
fat comment will be included in ArraySubscriptExpr).

More information about the cfe-dev mailing list