diff options
author | Tom Tromey <tromey@adacore.com> | 2023-10-03 11:14:45 -0600 |
---|---|---|
committer | Tom Tromey <tromey@adacore.com> | 2023-10-04 08:23:30 -0600 |
commit | d342c9de6a1534cbce324bcc3c7c0898ff74d386 (patch) | |
tree | 77ac67589d1f49db2d17fea956dba356c0b6927e /libstdc++-v3/python | |
parent | 83ec6e80ff0d56342fc066c2ef649036c0983529 (diff) | |
download | gcc-d342c9de6a1534cbce324bcc3c7c0898ff74d386.zip gcc-d342c9de6a1534cbce324bcc3c7c0898ff74d386.tar.gz gcc-d342c9de6a1534cbce324bcc3c7c0898ff74d386.tar.bz2 |
libstdc++: _versioned_namespace is always non-None
Some code in the pretty-printers seems to assume that the
_versioned_namespace global might be None (or the empty string).
However, doesn't occur, as the variable is never reassigned.
libstdc++-v3/ChangeLog:
* python/libstdcxx/v6/printers.py: Assume that
_versioned_namespace is non-None.
* python/libstdcxx/v6/xmethods.py (is_specialization_of):
Assume that _versioned_namespace is non-None.
Diffstat (limited to 'libstdc++-v3/python')
-rw-r--r-- | libstdc++-v3/python/libstdcxx/v6/printers.py | 15 | ||||
-rw-r--r-- | libstdc++-v3/python/libstdcxx/v6/xmethods.py | 3 |
2 files changed, 7 insertions, 11 deletions
diff --git a/libstdc++-v3/python/libstdcxx/v6/printers.py b/libstdc++-v3/python/libstdcxx/v6/printers.py index 23efbd1..e370551 100644 --- a/libstdc++-v3/python/libstdcxx/v6/printers.py +++ b/libstdc++-v3/python/libstdcxx/v6/printers.py @@ -139,7 +139,7 @@ def lookup_templ_spec(templ, *args): except gdb.error as e: # Type not found, try again in versioned namespace. global _versioned_namespace - if _versioned_namespace and _versioned_namespace not in templ: + if _versioned_namespace not in templ: t = t.replace('::', '::' + _versioned_namespace, 1) try: return gdb.lookup_type(t) @@ -211,16 +211,13 @@ def is_specialization_of(x, template_name): global _versioned_namespace if isinstance(x, gdb.Type): x = x.tag - if _versioned_namespace: - template_name = '(%s)?%s' % (_versioned_namespace, template_name) + template_name = '(%s)?%s' % (_versioned_namespace, template_name) return re.match('^std::%s<.*>$' % template_name, x) is not None def strip_versioned_namespace(typename): global _versioned_namespace - if _versioned_namespace: - return typename.replace(_versioned_namespace, '') - return typename + return typename.replace(_versioned_namespace, '') def strip_inline_namespaces(type_str): @@ -2355,7 +2352,7 @@ class Printer(object): # Add a name using _GLIBCXX_BEGIN_NAMESPACE_VERSION. def add_version(self, base, name, function): self.add(base + name, function) - if _versioned_namespace and '__cxx11' not in base: + if '__cxx11' not in base: vbase = re.sub('^(std|__gnu_cxx)::', r'\g<0>%s' % _versioned_namespace, base) self.add(vbase + name, function) @@ -2527,7 +2524,7 @@ def add_one_template_type_printer(obj, name, defargs): printer = TemplateTypePrinter('std::__debug::' + name, defargs) gdb.types.register_type_printer(obj, printer) - if _versioned_namespace and '__cxx11' not in name: + if '__cxx11' not in name: # Add second type printer for same type in versioned namespace: ns = 'std::' + _versioned_namespace # PR 86112 Cannot use dict comprehension here: @@ -2628,7 +2625,7 @@ class FilteringTypePrinter(object): def add_one_type_printer(obj, template, name, targ1=None): printer = FilteringTypePrinter('std::' + template, 'std::' + name, targ1) gdb.types.register_type_printer(obj, printer) - if _versioned_namespace and '__cxx11' not in template: + if '__cxx11' not in template: ns = 'std::' + _versioned_namespace printer = FilteringTypePrinter(ns + template, ns + name, targ1) gdb.types.register_type_printer(obj, printer) diff --git a/libstdc++-v3/python/libstdcxx/v6/xmethods.py b/libstdc++-v3/python/libstdcxx/v6/xmethods.py index 8ccf57c..42e60eb 100644 --- a/libstdc++-v3/python/libstdcxx/v6/xmethods.py +++ b/libstdc++-v3/python/libstdcxx/v6/xmethods.py @@ -39,8 +39,7 @@ def is_specialization_of(x, template_name): """ if isinstance(x, gdb.Type): x = x.tag - if _versioned_namespace: - template_name = '(%s)?%s' % (_versioned_namespace, template_name) + template_name = '(%s)?%s' % (_versioned_namespace, template_name) return re.match(r'^std::(__\d::)?%s<.*>$' % template_name, x) is not None class LibStdCxxXMethod(gdb.xmethod.XMethod): |