Index: source/Plugins/ExpressionParser/Clang/ClangExpressionParser.h =================================================================== --- source/Plugins/ExpressionParser/Clang/ClangExpressionParser.h +++ source/Plugins/ExpressionParser/Clang/ClangExpressionParser.h @@ -158,8 +158,10 @@ class LLDBPreprocessorCallbacks; LLDBPreprocessorCallbacks *m_pp_callbacks; ///< Called when the preprocessor - ///encounters module imports + /// encounters module imports std::unique_ptr m_ast_context; + lldb::LanguageType m_language; ///< The source language of the expression + /// which may be explicitly set or inferred. }; } Index: source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp =================================================================== --- source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp +++ source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp @@ -253,8 +253,7 @@ // 1. Create a new compiler instance. m_compiler.reset(new CompilerInstance()); - lldb::LanguageType frame_lang = - expr.Language(); // defaults to lldb::eLanguageTypeUnknown + m_language = expr.Language(); // defaults to lldb::eLanguageTypeUnknown bool overridden_target_opts = false; lldb_private::LanguageRuntime *lang_rt = nullptr; @@ -272,14 +271,14 @@ // Make sure the user hasn't provided a preferred execution language // with `expression --language X -- ...` - if (frame_sp && frame_lang == lldb::eLanguageTypeUnknown) - frame_lang = frame_sp->GetLanguage(); + if (frame_sp && m_language == lldb::eLanguageTypeUnknown) + m_language = frame_sp->GetLanguage(); - if (process_sp && frame_lang != lldb::eLanguageTypeUnknown) { - lang_rt = process_sp->GetLanguageRuntime(frame_lang); + if (process_sp && m_language != lldb::eLanguageTypeUnknown) { + lang_rt = process_sp->GetLanguageRuntime(m_language); if (log) log->Printf("Frame has language of type %s", - Language::GetNameForLanguageType(frame_lang)); + Language::GetNameForLanguageType(m_language)); } // 2. Configure the compiler with a set of default options that are @@ -372,9 +371,7 @@ assert(m_compiler->hasTarget()); // 5. Set language options. - lldb::LanguageType language = expr.Language(); - - switch (language) { + switch (m_language) { case lldb::eLanguageTypeC: case lldb::eLanguageTypeC89: case lldb::eLanguageTypeC99: @@ -804,13 +801,12 @@ LLVMUserExpression::IRPasses custom_passes; { - auto lang = m_expr.Language(); if (log) log->Printf("%s - Currrent expression language is %s\n", __FUNCTION__, - Language::GetNameForLanguageType(lang)); + Language::GetNameForLanguageType(m_language)); lldb::ProcessSP process_sp = exe_ctx.GetProcessSP(); - if (process_sp && lang != lldb::eLanguageTypeUnknown) { - auto runtime = process_sp->GetLanguageRuntime(lang); + if (process_sp && m_language != lldb::eLanguageTypeUnknown) { + auto runtime = process_sp->GetLanguageRuntime(m_language); if (runtime) runtime->GetIRPasses(custom_passes); }