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

Steve Naroff snaroff at apple.com
Fri Aug 17 10:10:32 PDT 2007


On Aug 17, 2007, at 9:58 AM, Ted Kremenek wrote:

> Recently I added a comment to the class definition for
> ArraySubscriptExpr (in Sema/Expr.h) noting that the true "base" of the
> array may actually be returned by "getIdx()" if the array happened to
> be written in the source (for example) as "4[A]" instead of "A[4]."  I
> think this is confusing, and may cause glitches down the line for
> semantic analysis tools built on the frontend.
>

I agree. I had similar thoughts, and was going to discuss this with you.

> I propose renaming the current getBase and getIdx methods to "getLHS"
> and "getRHS" respectively, as the current interpretation of these
> functions has more do with source code syntax (their position in the
> source code) rather than semantics.  I then propose adding new getBase
> and getIdx functions that look something like this:
>
> Expr *getBase() { return (Base->getType()->isPointerType()) ? Base :
> Idx; }
> Expr *getIdx() { return (!Idx->getType()->IsPointerType()) ? Idx :
> Base; }
>
> Naturally, along with these changes I suggest changing the member
> variables "Base" and "Idx" to "LHS" and "RHS" respectively.
>
> Comments?  One disadvantage that I see of this change is that using
> getBase() and getIdx() in tandem may require some extra unnecessary
> checking (as the same check is performed in both functions).  For such
> cases, we could consider adding an extra method that returns both the
> Base and the Idx expressions in a std::pair (would there be an
> efficiency issue here?).

I have no problem with the extra checking. I do have another suggestion:

Why not simply change the following...

   return new ArraySubscriptExpr(LHSExp, RHSExp, ResultType, RLoc);

to...

   return new ArraySubscriptExpr(BaseExpr, IndexExpr, ResultType, RLoc);

? And keep everything else the same...

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.

Let me know what you think,

snaroff


> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev

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


More information about the cfe-dev mailing list