diff options
| author | Sean Callanan <scallanan@apple.com> | 2015-10-02 18:40:30 +0000 |
|---|---|---|
| committer | Sean Callanan <scallanan@apple.com> | 2015-10-02 18:40:30 +0000 |
| commit | a994b0b27314668f5bcddaf8ba166c531ddb797c (patch) | |
| tree | 9f462f35426bcc96dd5a0468f533920b80a159ba | |
| parent | 9e31cb9ea7be1a7f5c8690e36d827f483f5d7ae1 (diff) | |
| download | bcm5719-llvm-a994b0b27314668f5bcddaf8ba166c531ddb797c.tar.gz bcm5719-llvm-a994b0b27314668f5bcddaf8ba166c531ddb797c.zip | |
Made GetScratchTypeSystemForLanguage return an error if desired.
Also made it not store nullptrs in its TypeSystemMap, so it will retry to make
the AST context if it errored out last time.
llvm-svn: 249167
| -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)); } |

