<div dir="ltr">
<p class="gmail-p1"><span class="gmail-s1">Thank you for your replies.</span></p>
<p class="gmail-p2"><span class="gmail-s1"></span><br></p>
<p class="gmail-p1"><span class="gmail-s1">It looks like we should</span></p>
<p class="gmail-p2"><span class="gmail-s1"></span><br></p>
<p class="gmail-p1"><span class="gmail-s1">- Hardcode possible ArgValues to Options.td for simple ones (Eg. libstd=).</span></p>
<p class="gmail-p1"><span class="gmail-s1">- Convert *.def files to *.td files, in order to generate flag values from definition files. (Eg. LangStandards.def and Analyses.def) </span></p>
<p class="gmail-p1"><span class="gmail-s1">- Reduce StringSwitch cases and enhance error messages.</span></p>
<p class="gmail-p2"><span class="gmail-s1"></span><br></p>
<p class="gmail-p1"><span class="gmail-s1">I will start implementing the first item.</span></p>
<p class="gmail-p2"><span class="gmail-s1"></span><br></p>
<p class="gmail-p1"><span class="gmail-s1">I think getting rid of StringSwitches and gathering possible flag value information to one file is a big advantage outside this GSoC project, so I think it is reasonable to do this. I believe that will be pretty useful not only for my gsoc project but for everyone.</span></p>
<p class="gmail-p2"><span class="gmail-s1"></span><br></p>
<p class="gmail-p1"><span class="gmail-s1">Thanks!</span></p>
<p class="gmail-p2"><span class="gmail-s1"></span><br></p>
<p class="gmail-p1"><span class="gmail-s1">Yuka</span></p>
<p class="gmail-p2"><span class="gmail-s1"></span><br></p></div><div class="gmail_extra"><br><div class="gmail_quote">2017-06-08 5:51 GMT+09:00 Vassil Vassilev <span dir="ltr"><<a href="mailto:v.g.vassilev@gmail.com" target="_blank">v.g.vassilev@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000"><span class="">
<div class="m_5624861256611234395moz-cite-prefix">On 07/06/17 19:21, Rui Ueyama wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">
<div>On Wed, Jun 7, 2017 at 5:02 AM, Vassil Vassilev <span dir="ltr"><<a href="mailto:v.g.vassilev@gmail.com" target="_blank">v.g.vassilev@gmail.com</a>></span>
wrote:<br>
</div>
<div class="gmail_extra">
<div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000"><span>
<div class="m_5624861256611234395m_-125612743467795374moz-cite-prefix">On
05/06/17 17:41, Rui Ueyama via cfe-dev wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">
<div>On Thu, Jun 1, 2017 at 2:02 PM, Richard Smith
via cfe-dev <span dir="ltr"><<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>></span>
wrote:<br>
</div>
<div class="gmail_extra">
<div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">
<div class="gmail_extra">
<div class="gmail_quote"><span>On 31 May
2017 at 06:21, Yuka Takahashi via
cfe-dev <span dir="ltr"><<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">
<div>Hello,</div>
<div><br>
</div>
<div>My name is Yuka Takahshi
and I would like to ask few
questions regarding to GSoC
project : bash-autocompletion
for clang.</div>
<div>We are now trying to build
flag completions for which we
call "value".</div>
<div>Eg. in -std=c++11, c++11 is
a "value", and in
-analyzer-checker=alpha.cplusp<wbr>lus,
alpha.cplusplus is a "value".</div>
<div><br>
</div>
<div>We are planning to
implement most of the code in
OptTable.cpp, in order to
reuse OptTable, which is
generated by Options.inc.</div>
<div>Options.inc is generated
via Tablegen from Options.td,
so we are planning to add the
information of values into
Options.td.</div>
<div><br>
</div>
<div>I would like to ask for a
advice regarding how to
implement the flag like
"-std=" and
"-analyzer-checker=".</div>
<div>These flags are unique
because their value
information are already in
LangStandards.def for "-std=",
and Checkers.td for
"-analyzer-checker=".</div>
<div>We are thinking to reuse
these information and add
these information to
Options.inc, so that we can
handle the flag completion in
unified manner.</div>
<div>This way of implementation
has further benefits from this
GSoC project, because from
this we can make documentation
more simply and reduce custom
handling of each value and
code duplication.</div>
<div><br>
</div>
<div>The problem is that, we are
not sure what is the best way
for this implementaion.</div>
<div>For flags which are not
like "-std=" and
"-analyzer-checker=", we
decided to add a class to hold
the value information in
Options.td. Eg. for
"-stdlib=",
ArgValues<"libc++,
libstdc++, platform">.</div>
<div>So we are looking for how
to generate something like
"libc++, libstdc++, platform"
from LangStandards.def and
Checkers.td for "-std=" and
"-analyzer-checker=".</div>
</div>
</blockquote>
<div><br>
</div>
</span>
<div>One way to do this would be to
rewrite LangStandards.def as a .td
file, and extend clang-tblgen to
generate something like the current
.def file from that .td file. Then
you can include LangStandards.td
into Options.td and somehow specify
that all of the LangStandard records
define possible values for the -std=
flag. (You could use something like
ArgValueClass<"LangStandard">
for this case,
ArgValueClass<"Checker"> for
-analyzer-checker=, and so on. Your
tablegen backend is able to do
arbitrary queries over the tablegen
records, so there are a variety of
ways to express this.)</div>
<div><br>
</div>
<div>Similar things can be done for
other options that take values from
.def files, such as -fsanitize=
(Basic/Sanitizers.def).</div>
</div>
</div>
</div>
</blockquote>
<div><br>
</div>
<div>I don't know if rewriting
LangStandards.def just for shell
autocompletion is worth the effort, unless
there's other reason to do that. It seems
you can define LANGSTANDARD macro before
including this file to get a list of all
possible language options. You can use that
information to return all possible options
when `-std=<tab>` is hit, can't you?</div>
</div>
</div>
</div>
</blockquote>
</span> The advantage outside of autocompletion would be
that we can reduce the amount of StringSwitch cases
handling the argument values in the driver and
centralize it in a common place. This would give us the
opportunity to diagnose enhance `error: invalid value
"c+-11" for flag "-std="` with `Did you mean one of
c++11, c++14, c++17` and alike.</div>
</blockquote>
<div><br>
</div>
<div>Ah, that sounds nice. One concern I had is that, if we
enumerate all possible values for each option in .td
files, we have to modify both a C++ file and a .td file
when we add a new option value for an exiting flag, but
that's probably not that bad.</div>
</div>
</div>
</div>
</blockquote></span>
Yes, indeed. I see this also as documentation for options goes in
the .td files and the implementation in the driver...<span class=""><br>
<blockquote type="cite">
<div dir="ltr">
<div class="gmail_extra">
<div class="gmail_quote">
<div> </div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000"><span><br>
<blockquote type="cite">
<div dir="ltr">
<div class="gmail_extra">
<div class="gmail_quote">
<div> </div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">______________________________<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>
<br>
</blockquote>
</div>
<br>
</div>
</div>
<br>
<fieldset class="m_5624861256611234395m_-125612743467795374mimeAttachmentHeader"></fieldset>
<br>
<pre>______________________________<wbr>_________________
cfe-dev mailing list
<a class="m_5624861256611234395m_-125612743467795374moz-txt-link-abbreviated" href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>
<a class="m_5624861256611234395m_-125612743467795374moz-txt-link-freetext" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-dev</a>
</pre>
</blockquote>
<p>
</p>
</span></div>
</blockquote></div>
</div></div>
</blockquote><p>
</p></span></div></blockquote></div><br></div>