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