<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Oct 1, 2014 at 3:12 PM, Alexander Kornienko <span dir="ltr"><<a href="mailto:alexfh@google.com" target="_blank">alexfh@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">>>! In D5528#5, @doug.gregor wrote:<br>
> 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.<br>
<br>
</span>For the context: this patch resulted from the discussion on D5395.<br>
<br>
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?<br>
<br>
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?<br></blockquote><div><br></div><div>FWIW, we ran into exactly the same need, and developed a bunch of utility methods that use the lexer to grab the next token, find matching tokens after some location, etc. Having these available somewhere in Clang would be definitely useful.</div><div><br></div><div>Eli</div></div><br></div></div>