summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lldb/include/lldb/Target/Target.h4
-rw-r--r--lldb/source/DataFormatters/VectorType.cpp2
-rw-r--r--lldb/source/Expression/ExpressionSourceCode.cpp2
-rw-r--r--lldb/source/Expression/Materializer.cpp5
-rw-r--r--lldb/source/Plugins/Language/ObjC/CoreMedia.cpp2
-rw-r--r--lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetItemInfoHandler.cpp2
-rw-r--r--lldb/source/Target/Target.cpp54
-rw-r--r--lldb/source/Target/ThreadPlanTracer.cpp2
8 files changed, 46 insertions, 27 deletions
diff --git a/lldb/include/lldb/Target/Target.h b/lldb/include/lldb/Target/Target.h
index 59319377c8c..5454fa7f7b2 100644
--- a/lldb/include/lldb/Target/Target.h
+++ b/lldb/include/lldb/Target/Target.h
@@ -1229,7 +1229,7 @@ public:
GetImageSearchPathList ();
TypeSystem *
- GetScratchTypeSystemForLanguage (lldb::LanguageType language, bool create_on_demand = true);
+ GetScratchTypeSystemForLanguage (Error *error, lldb::LanguageType language, bool create_on_demand = true);
PersistentExpressionState *
GetPersistentExpressionStateForLanguage (lldb::LanguageType language);
@@ -1506,7 +1506,7 @@ public:
protected:
ClangASTContext *
- GetScratchClangASTContextImpl();
+ GetScratchClangASTContextImpl(Error *error);
//------------------------------------------------------------------
// Member variables.
diff --git a/lldb/source/DataFormatters/VectorType.cpp b/lldb/source/DataFormatters/VectorType.cpp
index 1b62d81de02..c04c0deca18 100644
--- a/lldb/source/DataFormatters/VectorType.cpp
+++ b/lldb/source/DataFormatters/VectorType.cpp
@@ -235,7 +235,7 @@ namespace lldb_private {
TargetSP target_sp(m_backend.GetTargetSP());
m_child_type = ::GetCompilerTypeForFormat(m_parent_format,
element_type,
- target_sp ? target_sp->GetScratchTypeSystemForLanguage(lldb::eLanguageTypeC) : nullptr);
+ target_sp ? target_sp->GetScratchTypeSystemForLanguage(nullptr, lldb::eLanguageTypeC) : nullptr);
m_num_children = ::CalculateNumChildren(parent_type,
m_child_type);
m_item_format = GetItemFormatForFormat(m_parent_format,
diff --git a/lldb/source/Expression/ExpressionSourceCode.cpp b/lldb/source/Expression/ExpressionSourceCode.cpp
index d1342cf252d..695acae969d 100644
--- a/lldb/source/Expression/ExpressionSourceCode.cpp
+++ b/lldb/source/Expression/ExpressionSourceCode.cpp
@@ -83,7 +83,7 @@ bool ExpressionSourceCode::GetText (std::string &text, lldb::LanguageType wrappi
if (ClangModulesDeclVendor *decl_vendor = target->GetClangModulesDeclVendor())
{
- ClangPersistentVariables *persistent_vars = llvm::cast<ClangPersistentVariables>(target->GetScratchTypeSystemForLanguage(lldb::eLanguageTypeC)->GetPersistentExpressionState());
+ ClangPersistentVariables *persistent_vars = llvm::cast<ClangPersistentVariables>(target->GetPersistentExpressionStateForLanguage(lldb::eLanguageTypeC));
const ClangModulesDeclVendor::ModuleVector &hand_imported_modules = persistent_vars->GetHandLoadedClangModules();
ClangModulesDeclVendor::ModuleVector modules_for_macros;
diff --git a/lldb/source/Expression/Materializer.cpp b/lldb/source/Expression/Materializer.cpp
index 05ae34a9560..9b1a11e23f7 100644
--- a/lldb/source/Expression/Materializer.cpp
+++ b/lldb/source/Expression/Materializer.cpp
@@ -857,11 +857,12 @@ public:
return;
}
- TypeSystem *type_system = target_sp->GetScratchTypeSystemForLanguage(m_type.GetMinimumLanguage());
+ Error type_system_error;
+ TypeSystem *type_system = target_sp->GetScratchTypeSystemForLanguage(&type_system_error, m_type.GetMinimumLanguage());
if (!type_system)
{
- err.SetErrorString("Couldn't dematerialize a result variable: couldn't get the corresponding type system");
+ err.SetErrorStringWithFormat("Couldn't dematerialize a result variable: couldn't get the corresponding type system: %s", type_system_error.AsCString());
return;
}
diff --git a/lldb/source/Plugins/Language/ObjC/CoreMedia.cpp b/lldb/source/Plugins/Language/ObjC/CoreMedia.cpp
index af7b0cef393..4103067b8d5 100644
--- a/lldb/source/Plugins/Language/ObjC/CoreMedia.cpp
+++ b/lldb/source/Plugins/Language/ObjC/CoreMedia.cpp
@@ -25,7 +25,7 @@ lldb_private::formatters::CMTimeSummaryProvider (ValueObject& valobj, Stream& st
if (!type.IsValid())
return false;
- TypeSystem *type_system = valobj.GetExecutionContextRef().GetTargetSP()->GetScratchTypeSystemForLanguage(lldb::eLanguageTypeC);
+ TypeSystem *type_system = valobj.GetExecutionContextRef().GetTargetSP()->GetScratchTypeSystemForLanguage(nullptr, lldb::eLanguageTypeC);
if (!type_system)
return false;
diff --git a/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetItemInfoHandler.cpp b/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetItemInfoHandler.cpp
index 10eccb64a15..2ca367c0cce 100644
--- a/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetItemInfoHandler.cpp
+++ b/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetItemInfoHandler.cpp
@@ -181,7 +181,7 @@ AppleGetItemInfoHandler::SetupGetItemInfoFunction (Thread &thread, ValueList &ge
// Next make the runner function for our implementation utility function.
Error error;
- TypeSystem *type_system = thread.GetProcess()->GetTarget().GetScratchTypeSystemForLanguage(eLanguageTypeC);
+ TypeSystem *type_system = thread.GetProcess()->GetTarget().GetScratchTypeSystemForLanguage(nullptr, eLanguageTypeC);
CompilerType get_item_info_return_type = type_system->GetBasicTypeFromAST(eBasicTypeVoid).GetPointerType();
get_item_info_caller = m_get_item_info_impl_code->MakeFunctionCaller(get_item_info_return_type,
diff --git a/lldb/source/Target/Target.cpp b/lldb/source/Target/Target.cpp
index a5f1ba66d1d..5ab219a1b78 100644
--- a/lldb/source/Target/Target.cpp
+++ b/lldb/source/Target/Target.cpp
@@ -1890,10 +1890,16 @@ Target::ImageSearchPathsChanged
}
TypeSystem *
-Target::GetScratchTypeSystemForLanguage (lldb::LanguageType language, bool create_on_demand)
+Target::GetScratchTypeSystemForLanguage (Error *error, lldb::LanguageType language, bool create_on_demand)
{
+ if (error)
+ {
+ error->Clear();
+ }
+
if (language == eLanguageTypeMipsAssembler // GNU AS and LLVM use it for all assembly code
- || language == eLanguageTypeUnknown) {
+ || language == eLanguageTypeUnknown)
+ {
language = eLanguageTypeC;
}
@@ -1920,8 +1926,16 @@ Target::GetScratchTypeSystemForLanguage (lldb::LanguageType language, bool creat
|| Language::LanguageIsObjC(language)
|| Language::LanguageIsCPlusPlus(language))
{
- m_scratch_type_system_map[language].reset(GetScratchClangASTContextImpl());
- return m_scratch_type_system_map[language].get();
+ TypeSystem* ret = GetScratchClangASTContextImpl(error);
+ if (ret)
+ {
+ m_scratch_type_system_map[language].reset(ret);
+ return m_scratch_type_system_map[language].get();
+ }
+ else
+ {
+ return nullptr;
+ }
}
return nullptr;
@@ -1930,7 +1944,7 @@ Target::GetScratchTypeSystemForLanguage (lldb::LanguageType language, bool creat
PersistentExpressionState *
Target::GetPersistentExpressionStateForLanguage (lldb::LanguageType language)
{
- TypeSystem *type_system = GetScratchTypeSystemForLanguage(language, true);
+ TypeSystem *type_system = GetScratchTypeSystemForLanguage(nullptr, language, true);
if (type_system)
{
@@ -1944,17 +1958,19 @@ Target::GetPersistentExpressionStateForLanguage (lldb::LanguageType language)
UserExpression *
Target::GetUserExpressionForLanguage(const char *expr,
- const char *expr_prefix,
- lldb::LanguageType language,
- Expression::ResultType desired_type,
- Error &error)
+ const char *expr_prefix,
+ lldb::LanguageType language,
+ Expression::ResultType desired_type,
+ Error &error)
{
- TypeSystem *type_system = GetScratchTypeSystemForLanguage (language);
+ Error type_system_error;
+
+ TypeSystem *type_system = GetScratchTypeSystemForLanguage (&type_system_error, language);
UserExpression *user_expr = nullptr;
if (!type_system)
{
- error.SetErrorStringWithFormat("Could not find type system for language: %s", Language::GetNameForLanguageType(language));
+ error.SetErrorStringWithFormat("Could not find type system for language %s: %s", Language::GetNameForLanguageType(language), type_system_error.AsCString());
return nullptr;
}
@@ -1973,12 +1989,13 @@ Target::GetFunctionCallerForLanguage (lldb::LanguageType language,
const char *name,
Error &error)
{
- TypeSystem *type_system = GetScratchTypeSystemForLanguage (language);
+ Error type_system_error;
+ TypeSystem *type_system = GetScratchTypeSystemForLanguage (&type_system_error, language);
FunctionCaller *persistent_fn = nullptr;
if (!type_system)
{
- error.SetErrorStringWithFormat("Could not find type system for language: %s", Language::GetNameForLanguageType(language));
+ error.SetErrorStringWithFormat("Could not find type system for language %s: %s", Language::GetNameForLanguageType(language), type_system_error.AsCString());
return persistent_fn;
}
@@ -1995,12 +2012,13 @@ Target::GetUtilityFunctionForLanguage (const char *text,
const char *name,
Error &error)
{
- TypeSystem *type_system = GetScratchTypeSystemForLanguage (language);
+ Error type_system_error;
+ TypeSystem *type_system = GetScratchTypeSystemForLanguage (&type_system_error, language);
UtilityFunction *utility_fn = nullptr;
if (!type_system)
{
- error.SetErrorStringWithFormat("Could not find type system for language: %s", Language::GetNameForLanguageType(language));
+ error.SetErrorStringWithFormat("Could not find type system for language %s: %s", Language::GetNameForLanguageType(language), type_system_error.AsCString());
return utility_fn;
}
@@ -2014,7 +2032,7 @@ Target::GetUtilityFunctionForLanguage (const char *text,
ClangASTContext *
Target::GetScratchClangASTContext(bool create_on_demand)
{
- if (TypeSystem* type_system = GetScratchTypeSystemForLanguage(eLanguageTypeC, create_on_demand))
+ if (TypeSystem* type_system = GetScratchTypeSystemForLanguage(nullptr, eLanguageTypeC, create_on_demand))
{
return llvm::dyn_cast<ClangASTContext>(type_system);
}
@@ -2025,7 +2043,7 @@ Target::GetScratchClangASTContext(bool create_on_demand)
}
ClangASTContext *
-Target::GetScratchClangASTContextImpl()
+Target::GetScratchClangASTContextImpl(Error *error)
{
ClangASTContextForExpressions *ast_context = new ClangASTContextForExpressions(*this);
@@ -2166,7 +2184,7 @@ Target::EvaluateExpression
lldb::ExpressionVariableSP persistent_var_sp;
// Only check for persistent variables the expression starts with a '$'
if (expr_cstr[0] == '$')
- persistent_var_sp = GetScratchTypeSystemForLanguage(eLanguageTypeC)->GetPersistentExpressionState()->GetVariable (expr_cstr);
+ persistent_var_sp = GetScratchTypeSystemForLanguage(nullptr, eLanguageTypeC)->GetPersistentExpressionState()->GetVariable (expr_cstr);
if (persistent_var_sp)
{
diff --git a/lldb/source/Target/ThreadPlanTracer.cpp b/lldb/source/Target/ThreadPlanTracer.cpp
index cf02437b030..b1542e0f6a7 100644
--- a/lldb/source/Target/ThreadPlanTracer.cpp
+++ b/lldb/source/Target/ThreadPlanTracer.cpp
@@ -135,7 +135,7 @@ ThreadPlanAssemblyTracer::GetIntPointerType()
TargetSP target_sp (m_thread.CalculateTarget());
if (target_sp)
{
- TypeSystem *type_system = target_sp->GetScratchTypeSystemForLanguage(eLanguageTypeC);
+ TypeSystem *type_system = target_sp->GetScratchTypeSystemForLanguage(nullptr, eLanguageTypeC);
if (type_system)
m_intptr_type = TypeFromUser(type_system->GetBuiltinTypeForEncodingAndBitSize(eEncodingUint, target_sp->GetArchitecture().GetAddressByteSize() * 8));
}
OpenPOWER on IntegriCloud