[cfe-dev] methods to access "base" and "index" in ArraySubscriptExpr
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
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