diff options
Diffstat (limited to 'lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp')
| -rw-r--r-- | lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp | 28 |
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) { |

