summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp')
-rw-r--r--lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp28
1 files changed, 21 insertions, 7 deletions
diff --git a/lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp b/lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp
index 778c4021962..3f6ce1513f0 100644
--- a/lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp
+++ b/lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp
@@ -586,6 +586,18 @@ PdbAstBuilder::GetOrCreateBlockDecl(PdbCompilandSymId block_id) {
return block_decl;
}
+clang::VarDecl *PdbAstBuilder::CreateVariableDecl(PdbSymUid uid, CVSymbol sym,
+ clang::DeclContext &scope) {
+ VariableInfo var_info = GetVariableNameInfo(sym);
+ clang::QualType qt = GetOrCreateType(var_info.type);
+
+ clang::VarDecl *var_decl = m_clang.CreateVariableDeclaration(
+ &scope, var_info.name.str().c_str(), qt);
+
+ m_uid_to_decl[toOpaqueUid(uid)] = var_decl;
+ return var_decl;
+}
+
clang::VarDecl *
PdbAstBuilder::GetOrCreateLocalVariableDecl(PdbCompilandSymId scope_id,
PdbCompilandSymId var_id) {
@@ -594,15 +606,17 @@ PdbAstBuilder::GetOrCreateLocalVariableDecl(PdbCompilandSymId scope_id,
clang::DeclContext *scope = GetOrCreateDeclContextForUid(scope_id);
- CVSymbol var = m_index.ReadSymbolRecord(var_id);
- VariableInfo var_info = GetVariableNameInfo(var);
- clang::QualType qt = GetOrCreateType(var_info.type);
+ CVSymbol sym = m_index.ReadSymbolRecord(var_id);
+ return CreateVariableDecl(PdbSymUid(var_id), sym, *scope);
+}
- clang::VarDecl *var_decl =
- m_clang.CreateVariableDeclaration(scope, var_info.name.str().c_str(), qt);
+clang::VarDecl *
+PdbAstBuilder::GetOrCreateGlobalVariableDecl(PdbGlobalSymId var_id) {
+ if (clang::Decl *decl = TryGetDecl(var_id))
+ return llvm::dyn_cast<clang::VarDecl>(decl);
- m_uid_to_decl[toOpaqueUid(var_id)] = var_decl;
- return var_decl;
+ CVSymbol sym = m_index.ReadSymbolRecord(var_id);
+ return CreateVariableDecl(PdbSymUid(var_id), sym, GetTranslationUnitDecl());
}
clang::QualType PdbAstBuilder::GetBasicType(lldb::BasicType type) {
OpenPOWER on IntegriCloud