diff options
author | nerix <nerixdev@outlook.de> | 2025-08-04 09:56:04 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-08-04 08:56:04 +0100 |
commit | d95dadff8f094e793b79eec57737ec397fad7724 (patch) | |
tree | 85379c667e0d79de746db4a2766ce69aac3a9b20 /lldb/unittests/ScriptInterpreter/Python/PythonDataObjectsTests.cpp | |
parent | df71243fa885cd3db701dc35a0c8d157adaf93b3 (diff) | |
download | llvm-d95dadff8f094e793b79eec57737ec397fad7724.zip llvm-d95dadff8f094e793b79eec57737ec397fad7724.tar.gz llvm-d95dadff8f094e793b79eec57737ec397fad7724.tar.bz2 |
[LLDB][NativePDB] Allow type lookup in namespaces (#149876)
Previously, `type lookup` for types in namespaces didn't work with the
native PDB plugin, because `FindTypes` would only look for types whose
base name was equal to their full name. PDB/CodeView does not store the
base names in the TPI stream, but the types have their full name (e.g.
`std::thread` instead of `thread`). So `findRecordsByName` would only
return types in the top level namespace.
This PR changes the lookup to go through all types and check their base
name. As that could be a bit expensive, the names are first cached
(similar to the function lookup in the DIA PDB plugin). Potential types
are checked with `TypeQuery::ContextMatches`.
To be able to handle anonymous namespaces, I changed
`TypeQuery::ContextMatches`. The [`TypeQuery`
constructor](https://github.com/llvm/llvm-project/blob/9ad7edef4276207ca4cefa6b39d11145f4145a72/lldb/source/Symbol/Type.cpp#L76-L79)
inserts all name components as `CompilerContextKind::AnyDeclContext`. To
skip over anonymous namespaces, `ContextMatches` checked if a component
was empty and exactly of kind `Namespace`. For our query, the last check
was always false, so we never skipped anonymous namespaces. DWARF
doesn't have this problem, as it [constructs the context
outside](https://github.com/llvm/llvm-project/blob/abe93d9d7e891a2a6596ddb0c6324280137c89dc/lldb/source/Plugins/SymbolFile/DWARF/DWARFIndex.cpp#L154-L160)
and has proper information about namespaces. I'm not fully sure if my
change is correct and that it doesn't break other users of `TypeQuery`.
This enables `type lookup <type>` to work on types in namespaces.
However, expressions don't work with this yet, because `FindNamespace`
is unimplemented for native PDB.
Diffstat (limited to 'lldb/unittests/ScriptInterpreter/Python/PythonDataObjectsTests.cpp')
0 files changed, 0 insertions, 0 deletions