sgraenitz marked 3 inline comments as done.
sgraenitz added a comment.

> 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?


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