summaryrefslogtreecommitdiff
path: root/lldb/source/Core/Module.cpp
diff options
context:
space:
mode:
authorRyan Brown <ribrdb@google.com>2015-09-14 22:45:11 +0000
committerRyan Brown <ribrdb@google.com>2015-09-14 22:45:11 +0000
commit57bee1edfcdc8bbf60f39935b5603a558a341cff (patch)
tree40e57de3c854a72114c7900a5189e8a3591b51bc /lldb/source/Core/Module.cpp
parent3e13005031260ab239fc3246043c7320753e58d1 (diff)
Add a TypeSystem for Go
Add GoASTContext and DWARFASTParserGo to support go. Differential Revision: http://reviews.llvm.org/D12585 llvm-svn: 247629
Diffstat (limited to 'lldb/source/Core/Module.cpp')
-rw-r--r--lldb/source/Core/Module.cpp21
1 files changed, 20 insertions, 1 deletions
diff --git a/lldb/source/Core/Module.cpp b/lldb/source/Core/Module.cpp
index 2fbc5e7af164..256673361a7d 100644
--- a/lldb/source/Core/Module.cpp
+++ b/lldb/source/Core/Module.cpp
@@ -25,6 +25,7 @@
#include "lldb/Interpreter/ScriptInterpreter.h"
#include "lldb/Symbol/ClangASTContext.h"
#include "lldb/Symbol/CompileUnit.h"
+#include "lldb/Symbol/GoASTContext.h"
#include "lldb/Symbol/ObjectFile.h"
#include "lldb/Symbol/SymbolContext.h"
#include "lldb/Symbol/SymbolVendor.h"
@@ -148,6 +149,7 @@ Module::Module (const ModuleSpec &module_spec) :
m_objfile_sp (),
m_symfile_ap (),
m_ast (new ClangASTContext),
+ m_go_ast(),
m_source_mappings (),
m_sections_ap(),
m_did_load_objfile (false),
@@ -252,6 +254,7 @@ Module::Module(const FileSpec& file_spec,
m_objfile_sp (),
m_symfile_ap (),
m_ast (new ClangASTContext),
+ m_go_ast(),
m_source_mappings (),
m_sections_ap(),
m_did_load_objfile (false),
@@ -298,6 +301,7 @@ Module::Module () :
m_objfile_sp (),
m_symfile_ap (),
m_ast (new ClangASTContext),
+ m_go_ast(),
m_source_mappings (),
m_sections_ap(),
m_did_load_objfile (false),
@@ -420,7 +424,22 @@ Module::GetUUID()
TypeSystem *
Module::GetTypeSystemForLanguage (LanguageType language)
{
- if (language != eLanguageTypeSwift)
+ if (language == eLanguageTypeGo)
+ {
+ Mutex::Locker locker (m_mutex);
+ if (!m_go_ast)
+ {
+ ObjectFile * objfile = GetObjectFile();
+ ArchSpec object_arch;
+ if (objfile && objfile->GetArchitecture(object_arch))
+ {
+ m_go_ast.reset(new GoASTContext);
+ m_go_ast->SetAddressByteSize(object_arch.GetAddressByteSize());
+ }
+ }
+ return m_go_ast.get();
+ }
+ else if (language != eLanguageTypeSwift)
{
// For now assume all languages except swift use the ClangASTContext for types
return &GetClangASTContext();