mirror of
https://github.com/intel/llvm.git
synced 2026-01-16 05:32:28 +08:00
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
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user