[PATCH] Store paren locations in IfStmt, WhileStmt, SwitchStmt.

Alexander Kornienko alexfh at google.com
Wed Oct 1 15:26:53 PDT 2014


On Thu, Oct 2, 2014 at 2:19 AM, Richard Smith <richard at metafoo.co.uk> wrote:

> On Wed, Oct 1, 2014 at 3:12 PM, Alexander Kornienko <alexfh at google.com>
> wrote:
>
>> >>! In D5528#5, @doug.gregor wrote:
>> > In non-macro cases, one can extract the locations of the parentheses
>> using the lexer. Personally, I don't think the benefits of being able to
>> extract the locations of the parentheses efficiently or in the macro cases
>> outweigh the disadvantages of bloating the AST further.
>>
>> For the context: this patch resulted from the discussion on D5395.
>>
>> I understand your concerns about bloating the AST. Some locations can be
>> relatively easy found by re-lexing small parts of the input. One problem
>> with this approach is that everyone who needs these locations spends time
>> looking for a way to get them and then writing their own implementation. Is
>> there a document or a comment describing the high-level approach to what is
>> considered worthy storing in the AST?
>>
>> Also, it may be reasonable to add utility methods in the AST classes (or
>> free-standing functions in clang/AST headers) for retrieving some less
>> frequently used locations of syntactic constructs in non-macro cases (e.g.
>> WhileStmt::findRParenLoc() which would find the first non-comment token
>> after getCond()->getLocEnd()). What do you think?
>>
>
> At the least, we should provide a version of Lexer::findLocationAfterToken
> that finds the location *of* the token, rather than skipping past it.
>
>
>> And while you're here, one more question related to D5395:
>> what is the reason why the statements ending with a semicolon do not
>> include the semicolon in their source range (with exception of the
>> NullStmt)? Is it feasible to extend the source range to include it? (and
>> what would you expect to break in this case?)
>>
>
> Perhaps it's time to add an ExprStmt to represent an expression-statement,
> along with the location of its semicolon.
>

Well, what about ContinueStmt and BreakStmt which also don't include the
location of the semicolon?


>
>
>> http://reviews.llvm.org/D5528
>>
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20141002/5344d332/attachment.html>


More information about the cfe-commits mailing list