Fix pretty printers for versioned namespace

Jonathan Wakely jwakely@redhat.com
Thu Oct 26 20:55:00 GMT 2017


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.
>>
>>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):




More information about the Gcc-patches mailing list