[Lldb-commits] [lldb] 75f05fc - [lldb][bindings] Fix module_access handling of regex

Dave Lee via lldb-commits lldb-commits at lists.llvm.org
Sat Sep 3 10:33:42 PDT 2022


Author: Dave Lee
Date: 2022-09-03T10:33:26-07:00
New Revision: 75f05fccbbdd91393bdc7b6183b9dd2b1e859f8e

URL: https://github.com/llvm/llvm-project/commit/75f05fccbbdd91393bdc7b6183b9dd2b1e859f8e
DIFF: https://github.com/llvm/llvm-project/commit/75f05fccbbdd91393bdc7b6183b9dd2b1e859f8e.diff

LOG: [lldb][bindings] Fix module_access handling of regex

Fixes broken support for: `target.module[re.compile("libFoo")]`

There were two issues:
1. The type check was expecting `re.SRE_Pattern`
2. The expression to search the module path had a typo

In the first case, `re.SRE_Pattern` does not exist in Python 3, and is replaced
with `re.Pattern`.

While editing this code, I changed the type checks to us `isinstance`, which is
the conventional way of type checking.

>From the docs on `type()`:

> The `isinstance()` built-in function is recommended for testing the type of an object, because it takes subclasses into account.

Differential Revision: https://reviews.llvm.org/D133130

Added: 
    

Modified: 
    lldb/bindings/interface/SBTarget.i
    lldb/test/API/python_api/target/TestTargetAPI.py

Removed: 
    


################################################################################
diff  --git a/lldb/bindings/interface/SBTarget.i b/lldb/bindings/interface/SBTarget.i
index a6a764944d02e..7eee99e54848d 100644
--- a/lldb/bindings/interface/SBTarget.i
+++ b/lldb/bindings/interface/SBTarget.i
@@ -1000,10 +1000,10 @@ public:
 
             def __getitem__(self, key):
                 num_modules = self.sbtarget.GetNumModules()
-                if type(key) is int:
+                if isinstance(key, int):
                     if key < num_modules:
                         return self.sbtarget.GetModuleAtIndex(key)
-                elif type(key) is str:
+                elif isinstance(key, str):
                     if key.find('/') == -1:
                         for idx in range(num_modules):
                             module = self.sbtarget.GetModuleAtIndex(idx)
@@ -1024,16 +1024,16 @@ public:
                                     return module
                     except:
                         return None
-                elif type(key) is uuid.UUID:
+                elif isinstance(key, uuid.UUID):
                     for idx in range(num_modules):
                         module = self.sbtarget.GetModuleAtIndex(idx)
                         if module.uuid == key:
                             return module
-                elif type(key) is re.SRE_Pattern:
+                elif isinstance(key, re.Pattern):
                     matching_modules = []
                     for idx in range(num_modules):
                         module = self.sbtarget.GetModuleAtIndex(idx)
-                        re_match = key.search(module.path.fullpath)
+                        re_match = key.search(module.file.fullpath)
                         if re_match:
                             matching_modules.append(module)
                     return matching_modules

diff  --git a/lldb/test/API/python_api/target/TestTargetAPI.py b/lldb/test/API/python_api/target/TestTargetAPI.py
index 0b2514416bede..e575f30508e09 100644
--- a/lldb/test/API/python_api/target/TestTargetAPI.py
+++ b/lldb/test/API/python_api/target/TestTargetAPI.py
@@ -2,6 +2,7 @@
 Test SBTarget APIs.
 """
 
+import re
 import unittest2
 import os
 import lldb
@@ -516,3 +517,14 @@ def test_is_loaded(self):
             module = target.GetModuleAtIndex(i)
             self.assertTrue(target.IsLoaded(module), "Running the target should "
                             "have loaded its modules.")
+
+    def test_module_subscript_regex(self):
+        """Exercise SBTarget.module subscripting with regex."""
+        self.build()
+        exe = self.getBuildArtifact("a.out")
+        target = self.dbg.CreateTarget(exe)
+        self.assertTrue(target, VALID_TARGET)
+        modules = target.module[re.compile(r"/a[.]out$")]
+        self.assertEqual(len(modules), 1)
+        exe_mod = modules[0]
+        self.assertEqual(exe_mod.file.fullpath, exe)


        


More information about the lldb-commits mailing list