labath added a comment.

I think there is still something wrong with the diff. I can't see any of the 
callers of e.g. `createItaniumInfo` but I can see the function on both LHS and 
RHS of the diff (which shouldn't be the case as it's a new function). It looks 
like you uploaded just an ammending patch instead of the entire work. Can you 
fix that?

In https://reviews.llvm.org/D49990#1182003, @sgraenitz wrote:

> > The part I'm not sure about is whether the RichManglingInfo vs. 
> > RichManglingSpec distinction brings any value. [...] So you might as well 
> > just have one class, pass that to DemangleWithRichManglingInfo, and then 
> > query the same object when the call returns.
>
> The idea here was that `DemangleWithRichManglingInfo()` acts like a gate 
> keeper. If it succeeds it provides read-only access to the updated 
> `RichManglingInfo` in `RichManglingSpec`, otherwise it returns null. IMHO the 
> value behind it is that `RichManglingInfo` does not need to handle a `NoInfo` 
> case next to `ItaniumPartialDemangler` and `PluginCxxLanguage` in every 
> single getter. Instead it's just not accessible in that state. (Plus: there 
> is no maintenance functions that confuse the public interface of 
> `RichManglingInfo`.) I don't know how to do this with only one class.
>
> Maybe `RichManglingSpec` is not the perfect name. What about renaming it to 
> `RichManglingContext`?
>
> > I mean, the lifetime of the first is tied to the lifetime of the second, 
> > and the Spec class can only have one active Info instance at any given 
> > moment.
>
> Yes, this was handy and avoids extra heap-allocations. `const 
> RichManglingInfo *` was intended to clarify: lifetimes are handled elsewhere.
>
> > The current interface with createItaniumInfo et al. makes it seem like one 
> > could call it multiple times in sequence, stashing the results, and then 
> > doing some post-processing on them.
>
> Yes, I can see that this is implicit knowledge. Do you have an idea how to 
> make this more explicit? Rename to `SetItaniumInfo()` maybe?
>
> In the end, I definitely prefer this approach over having a `NoInfo` state in 
> `RichManglingInfo`. What do you think?


Yes, I can see what you mean here. Neither of the solutions is particularly 
appealing. I guess if I were implementing this, I'd go with the "invalid state" 
option, though I am not sure why, as usually I am opposed to invalid states. 
Maybe we can leave this to the discretion of the implementor (you).



================
Comment at: include/lldb/Symbol/Symtab.h:81-83
+  // No move
+  RichManglingInfo(RichManglingInfo &&) = delete;
+  RichManglingInfo &operator=(RichManglingInfo &&) = delete;
----------------
sgraenitz wrote:
> labath wrote:
> > This is implied by the deleted copy operations.
> Which are implicitly deleted too, due to the existence of the destructor 
> right? Does LLVM/LLDB have some kind of convention for it? I like to be 
> explicit on ctors&assignment ("rule of 5"), because it aids error messages, 
> but I would be fine with following the existing convention here.
As far as I know, the presence of a destructor has no impact on the state of 
copy/move operations, so you still need to delete the copy operations 
explicitly.

I don't know if there is an official policy on explicitly deleting move 
operations, but I don't remember seeing that style anywhere. However, I don't 
care much about that either.


https://reviews.llvm.org/D49990



_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to