<div dir="ltr">Well, after a couple of weeks of playing with developing toy Clang-based tool I came to conclusion that it is better to create pointers to const AST nodes.<div>For two reasons:</div><div>1) ast Matchers are widely used in practice. They are often more convenient than writing custom ast visitors for every small subtree search.</div><div>And I don't want to do const_cast each time you use ast Matcher.</div><div>2)  Most standard C++ classes are mutable, so it's hard to explain non-Clang developer that you omitting const here because object is immutable by design</div><div><br></div><div>So it's easier to const than not to const...</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">2017-10-04 11:40 GMT-07:00 John McCall <span dir="ltr"><<a href="mailto:rjmccall@apple.com" target="_blank">rjmccall@apple.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div><span class=""><blockquote type="cite"><div>On Oct 4, 2017, at 2:21 PM, Roman Popov <<a href="mailto:ripopov@gmail.com" target="_blank">ripopov@gmail.com</a>> wrote:</div><div><div dir="ltr">In conclusion: <div>Should AST matchers should return non-const pointers to comply with Clang coding standard for immutable objects?<br></div></div></div></blockquote><div><br></div></span>I think it is more likely than not that the Clang ASTs will gradually standardize on taking non-const pointers.  Given that AST matchers tend to create out-of-tree dependencies, I think it would be better for them to go ahead and work primarily with non-const pointers.</div><div><br></div><div>If you want to do some of the work to make the ASTs traffic in non-const pointers, that would be good, too, although we should first get consensus that that's the direction we want to go in.</div><span class="HOEnZb"><font color="#888888"><div><br></div><div>John.</div></font></span><span class=""><div><br><blockquote type="cite"><div><div dir="ltr"><div><div class="gmail_extra"><br><div class="gmail_quote">2017-10-04 11:14 GMT-07:00 John McCall via cfe-dev <span dir="ltr"><<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span><br>
> On Oct 4, 2017, at 3:30 AM, Csaba Raduly via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>> wrote:<br>
><br>
> On Wed, Oct 4, 2017 at 2:20 AM, John McCall via cfe-dev<br>
> <<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>> wrote:<br>
>><br>
>> The AST is largely immutable by design, and the best solution would probably<br>
>> be to adopt what LLVM did to Type and just mass-refactor code to stop<br>
>> passing around const pointers at all.<br>
><br>
> If the AST is meant to be immutable, why not pass const<br>
> {pointers,references} around?<br>
<br>
</span>If the objects are actually immutable, const is just noise repeated everywhere, because a non-const object is basically a useless type.<br>
<br>
John.<br>
<div class="m_5760223582626630296HOEnZb"><div class="m_5760223582626630296h5">______________________________<wbr>_________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-dev</a><br>
</div></div></blockquote></div><br></div></div></div>
</div></blockquote></div><br></span></div></blockquote></div><br></div>