[llvm-dev] [CommandLine] Unable to implement a custom parser -- all marked final

David Blaikie via llvm-dev llvm-dev at lists.llvm.org
Thu Apr 18 14:06:32 PDT 2019


I don't feel super strongly either way - though if you're going to
make parser's dtor virtual, could you remove 'final' from the other
parsers too?

Any idea what's different about your situation that makes this feature
useful but it hasn't been otherwise useful to LLVM for years?

On Thu, Apr 18, 2019 at 2:03 PM Don Hinton <hintonda at gmail.com> wrote:
>
> Hi David:
>
> 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:
>
> --- a/llvm/include/llvm/Support/CommandLine.h
> +++ b/llvm/include/llvm/Support/CommandLine.h
> @@ -1044,7 +1044,7 @@ extern template class basic_parser<float>;
>  //--------------------------------------------------
>  // parser<std::string>
>  //
> -template <> class parser<std::string> final : public basic_parser<std::string> {
> +template <> class parser<std::string> : public basic_parser<std::string> {
>  public:
>    parser(Option &O) : basic_parser(O) {}
>
> @@ -1062,6 +1062,8 @@ public:
>
>    // An out-of-line virtual method to provide a 'home' for this class.
>    void anchor() override;
> +
> +  virtual ~parser() = default;
>  };
>
> If that's acceptable, I submit a patch.
>
> thanks...
> don
>
> On Thu, Apr 18, 2019 at 1:56 PM David Blaikie <dblaikie at gmail.com> wrote:
>>
>> Yeah, I think I did this a while back (& you're possibly not the only
>> one who's hit this - might be worth a search on llvm-dev for previous
>> threads).
>>
>> If you check the commit history, I think my original motivation was
>> cleaning up the virtual dtor that wasn't used in LLVM by making the
>> base class's dtor protected, and the derived classes final.
>>
>> It could be made virtual instead of protected/final - but without any
>> use in LLVM, I'm not sure it's worth exposing this extension point &
>> perhaps just updating the documentation is the best thing?
>>
>> On Thu, Apr 18, 2019 at 1:45 PM Don Hinton via llvm-dev
>> <llvm-dev at lists.llvm.org> wrote:
>> >
>> > https://llvm.org/docs/CommandLine.html#writing-a-custom-parser describes how to implement a custom parser, but they're all marked `final`, so I can't inherit.
>> >
>> > Is there a reason for this?  If not, I'll submit patch with tests.
>> >
>> > thanks...
>> > don
>> >
>> >
>> > _______________________________________________
>> > LLVM Developers mailing list
>> > llvm-dev at lists.llvm.org
>> > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev


More information about the llvm-dev mailing list