Fix pretty printers for versioned namespace
François Dumont
frs.dumont@gmail.com
Mon Oct 30 17:13:00 GMT 2017
On 26/10/2017 22:41, Jonathan Wakely wrote:
> On 26/10/17 21:37 +0100, Jonathan Wakely wrote:
>> On 26/10/17 21:30 +0100, Jonathan Wakely wrote:
>>> On 26/10/17 22:19 +0200, François Dumont wrote:
>>>> @@ -1232,7 +1232,7 @@ class Printer(object):
>>>> Â # Add a name using _GLIBCXX_BEGIN_NAMESPACE_CONTAINER.
>>>> Â def add_container(self, base, name, function):
>>>> Â Â Â Â Â self.add_version(base, name, function)
>>>> -Â Â Â Â Â Â Â self.add_version(base + '__cxx1998::', name, function)
>>>> +Â Â Â Â Â Â Â self.add_version(base, '__cxx1998::' + name, function)
>>>
>>> I don't like this change.
>>>
>>> Previously the arguments were the namespace(s) and the type. That's
>>> nice and simple.
Not always, see updated patch.
>>>
>>> Now it's the first namespace, and then all the other namespaces and
>>> the type. That's not very clean.
>>>
>>> There must be a way to keep the add_version and add_container calls
>>> the same, and have it transparently handle the case where the
>>> namespace is 'std::__8::foo' not 'std::foo'.
>>
>> e.g. in add_version instead of:
>>
>> Â Â Â Â Â if _versioned_namespace:
>> Â Â Â Â Â Â Â Â Â self.add(base + _versioned_namespace + name, function)
>>
>> We should replace "std::" in base with "std::" + _versioned_namespace
>>
>> That means we only have to change that function, not every call to it.
>
> Something like this:
>
> --- a/libstdc++-v3/python/libstdcxx/v6/printers.py
> +++ b/libstdc++-v3/python/libstdcxx/v6/printers.py
> @@ -1227,7 +1227,8 @@ class Printer(object):
> Â Â Â def add_version(self, base, name, function):
> Â Â Â Â Â Â Â self.add(base + name, function)
> Â Â Â Â Â Â Â if _versioned_namespace:
> -Â Â Â Â Â Â Â Â Â Â Â self.add(base + _versioned_namespace + name, function)
> +Â Â Â Â Â Â Â Â Â Â Â vbase = re.sub('^std::', 'std::%s::' %
> _versioned_namespace, base)
> +Â Â Â Â Â Â Â Â Â Â Â self.add(vbase + name, function)
>
> Â Â Â # Add a name using _GLIBCXX_BEGIN_NAMESPACE_CONTAINER.
> Â Â Â def add_container(self, base, name, function)
Ok, I have adapted and generalized this approache to all symbols.
Tested under Linux x86_64 normal and versioned namespace modes.
Ok to commit ?
François
-------------- next part --------------
A non-text attachment was scrubbed...
Name: printers.patch
Type: text/x-patch
Size: 4857 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/libstdc++/attachments/20171030/0c73f14e/attachment.bin>
More information about the Libstdc++
mailing list