]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libstdc++: Fix Python deprecation warning in printers.py
authorJonathan Wakely <jwakely@redhat.com>
Wed, 16 Oct 2024 08:22:37 +0000 (09:22 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Wed, 11 Jun 2025 11:26:27 +0000 (12:26 +0100)
python/libstdcxx/v6/printers.py:1355: DeprecationWarning: 'count' is passed as positional argument

The Python docs say:

  Deprecated since version 3.13: Passing count and flags as positional
  arguments is deprecated. In future Python versions they will be
  keyword-only parameters.

Using a keyword argument for count only became possible with Python 3.1
so introduce a new function to do the substitution.

libstdc++-v3/ChangeLog:

* python/libstdcxx/v6/printers.py (strip_fundts_namespace): New.
(StdExpAnyPrinter, StdExpOptionalPrinter): Use it.

(cherry picked from commit b9e98bb9919fa9f07782f23f79b3d35abb9ff542)

libstdc++-v3/python/libstdcxx/v6/printers.py

index ee25253d004001687dd398cb131e0c08e3ec9c69..2fbf65d3effb2b6d30b84355c0295b0662df70a6 100644 (file)
@@ -194,6 +194,16 @@ def strip_versioned_namespace(typename):
     return typename.replace(_versioned_namespace, '')
 
 
+def strip_fundts_namespace(typ):
+    """Remove "fundamentals_vN" inline namespace from qualified type name."""
+    pattern = r'^std::experimental::fundamentals_v\d::'
+    repl = 'std::experimental::'
+    if sys.version_info[0] == 2:
+        return re.sub(pattern, repl, typ, 1)
+    else: # Technically this needs Python 3.1 but nobody should be using 3.0
+        return re.sub(pattern, repl, typ, count=1)
+
+
 def strip_inline_namespaces(type_str):
     """Remove known inline namespaces from the canonical name of a type."""
     type_str = strip_versioned_namespace(type_str)
@@ -1267,8 +1277,7 @@ class StdExpAnyPrinter(SingleObjContainerPrinter):
 
     def __init__(self, typename, val):
         self.typename = strip_versioned_namespace(typename)
-        self.typename = re.sub(r'^std::experimental::fundamentals_v\d::',
-                               'std::experimental::', self.typename, 1)
+        self.typename = strip_fundts_namespace(self.typename)
         self.val = val
         self.contained_type = None
         contained_value = None
@@ -1363,9 +1372,8 @@ class StdExpOptionalPrinter(SingleObjContainerPrinter):
     def __init__(self, typename, val):
         valtype = self._recognize(val.type.template_argument(0))
         typename = strip_versioned_namespace(typename)
-        self.typename = re.sub(
-            r'^std::(experimental::|)(fundamentals_v\d::|)(.*)',
-            r'std::\1\3<%s>' % valtype, typename, 1)
+        typename = strip_fundts_namespace(typename)
+        self.typename = '%s<%s>' % (typename, valtype)
         payload = val['_M_payload']
         if self.typename.startswith('std::experimental'):
             engaged = val['_M_engaged']