<div dir="ltr"><div dir="ltr">On Thu, Apr 18, 2019 at 2:06 PM David Blaikie <<a href="mailto:dblaikie@gmail.com">dblaikie@gmail.com</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">I don't feel super strongly either way - though if you're going to<br>
make parser's dtor virtual, could you remove 'final' from the other<br>
parsers too?</blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
Any idea what's different about your situation that makes this feature<br>
useful but it hasn't been otherwise useful to LLVM for years?<br></blockquote><div><br></div><div>I'm one of the RTFM guys -- I read everything and try to use the cool stuff.</div><div><br></div><div>I could just grab the string, then process it later, but that's what the parser is for, so I figured I'd use it.  In my case, I have a family of passes that take a yaml config file -- it'll override individual options, so the user can provide either the file, individual options, or both.</div><div><br></div><div>Anyway, if I did it myself, I'd have to add the call to each pass -- more a less a singleton -- but if the parser does it for me, it makes my life easier.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
On Thu, Apr 18, 2019 at 2:03 PM Don Hinton <<a href="mailto:hintonda@gmail.com" target="_blank">hintonda@gmail.com</a>> wrote:<br>
><br>
> Hi David:<br>
><br>
> I'd actually like to use a custom parser in a tool I'm developing, parsing YAML files.  The partial fix for my purposes was:<br>
><br>
> --- a/llvm/include/llvm/Support/CommandLine.h<br>
> +++ b/llvm/include/llvm/Support/CommandLine.h<br>
> @@ -1044,7 +1044,7 @@ extern template class basic_parser<float>;<br>
>  //--------------------------------------------------<br>
>  // parser<std::string><br>
>  //<br>
> -template <> class parser<std::string> final : public basic_parser<std::string> {<br>
> +template <> class parser<std::string> : public basic_parser<std::string> {<br>
>  public:<br>
>    parser(Option &O) : basic_parser(O) {}<br>
><br>
> @@ -1062,6 +1062,8 @@ public:<br>
><br>
>    // An out-of-line virtual method to provide a 'home' for this class.<br>
>    void anchor() override;<br>
> +<br>
> +  virtual ~parser() = default;<br>
>  };<br>
><br>
> If that's acceptable, I submit a patch.<br>
><br>
> thanks...<br>
> don<br>
><br>
> On Thu, Apr 18, 2019 at 1:56 PM David Blaikie <<a href="mailto:dblaikie@gmail.com" target="_blank">dblaikie@gmail.com</a>> wrote:<br>
>><br>
>> Yeah, I think I did this a while back (& you're possibly not the only<br>
>> one who's hit this - might be worth a search on llvm-dev for previous<br>
>> threads).<br>
>><br>
>> If you check the commit history, I think my original motivation was<br>
>> cleaning up the virtual dtor that wasn't used in LLVM by making the<br>
>> base class's dtor protected, and the derived classes final.<br>
>><br>
>> It could be made virtual instead of protected/final - but without any<br>
>> use in LLVM, I'm not sure it's worth exposing this extension point &<br>
>> perhaps just updating the documentation is the best thing?<br>
>><br>
>> On Thu, Apr 18, 2019 at 1:45 PM Don Hinton via llvm-dev<br>
>> <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:<br>
>> ><br>
>> > <a href="https://llvm.org/docs/CommandLine.html#writing-a-custom-parser" rel="noreferrer" target="_blank">https://llvm.org/docs/CommandLine.html#writing-a-custom-parser</a> describes how to implement a custom parser, but they're all marked `final`, so I can't inherit.<br>
>> ><br>
>> > Is there a reason for this?  If not, I'll submit patch with tests.<br>
>> ><br>
>> > thanks...<br>
>> > don<br>
>> ><br>
>> ><br>
>> > _______________________________________________<br>
>> > LLVM Developers mailing list<br>
>> > <a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
>> > <a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div></div>