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) _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits