Add a TypeSystem for Go

Add GoASTContext and DWARFASTParserGo to support go.

Differential Revision: http://reviews.llvm.org/D12585

llvm-svn: 247629
This commit is contained in:
Ryan Brown
2015-09-14 22:45:11 +00:00
parent 3e13005031
commit 57bee1edfc
19 changed files with 2932 additions and 26 deletions

View File

@@ -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();