diff options
| -rw-r--r-- | lldb/include/lldb/Target/Target.h | 4 | ||||
| -rw-r--r-- | lldb/source/DataFormatters/VectorType.cpp | 2 | ||||
| -rw-r--r-- | lldb/source/Expression/ExpressionSourceCode.cpp | 2 | ||||
| -rw-r--r-- | lldb/source/Expression/Materializer.cpp | 5 | ||||
| -rw-r--r-- | lldb/source/Plugins/Language/ObjC/CoreMedia.cpp | 2 | ||||
| -rw-r--r-- | lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetItemInfoHandler.cpp | 2 | ||||
| -rw-r--r-- | lldb/source/Target/Target.cpp | 54 | ||||
| -rw-r--r-- | lldb/source/Target/ThreadPlanTracer.cpp | 2 |
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)); } |

