mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-25 18:46:05 +00:00

…lly registered languages First of all, this is done to support exceptions for the Mojo language, but it's done in a way that will benefit any other plugin language. 1. I added a new lldb-dap CLI argument (not DAP field) called `pre-init-commands`. These commands are executed before DAP initialization. The other `init-commands` are executed after DAP initialization. It's worth mentioning that the debug adapter returns to VSCode the list of supported exception breakpoints during DAP initialization, which means that I need to register the Mojo plugin before that initialization step, hence the need for `pre-init-commands`. In general, language plugins should be registered in that step, as they affect the capabilities of the debugger. 2. I added a set of APIs for lldb-dap to query information of each language related to exception breakpoints. E.g. whether a language supports throw or catch breakpoints, how the throw keyword is called in each particular language, etc. 3. I'm realizing that the Swift support for exception breakpoints in lldb-dap should have been implemented in this way, instead of hardcoding it.
69 lines
2.2 KiB
C++
69 lines
2.2 KiB
C++
//===-- SBLanguageRuntime.cpp ---------------------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "lldb/API/SBLanguageRuntime.h"
|
|
#include "lldb/Target/Language.h"
|
|
#include "lldb/Utility/Instrumentation.h"
|
|
|
|
using namespace lldb;
|
|
using namespace lldb_private;
|
|
|
|
lldb::LanguageType
|
|
SBLanguageRuntime::GetLanguageTypeFromString(const char *string) {
|
|
LLDB_INSTRUMENT_VA(string);
|
|
|
|
return Language::GetLanguageTypeFromString(llvm::StringRef(string));
|
|
}
|
|
|
|
const char *
|
|
SBLanguageRuntime::GetNameForLanguageType(lldb::LanguageType language) {
|
|
LLDB_INSTRUMENT_VA(language);
|
|
|
|
return Language::GetNameForLanguageType(language);
|
|
}
|
|
|
|
bool SBLanguageRuntime::LanguageIsCPlusPlus(lldb::LanguageType language) {
|
|
return Language::LanguageIsCPlusPlus(language);
|
|
}
|
|
|
|
bool SBLanguageRuntime::LanguageIsObjC(lldb::LanguageType language) {
|
|
return Language::LanguageIsObjC(language);
|
|
}
|
|
|
|
bool SBLanguageRuntime::LanguageIsCFamily(lldb::LanguageType language) {
|
|
return Language::LanguageIsCFamily(language);
|
|
}
|
|
|
|
bool SBLanguageRuntime::SupportsExceptionBreakpointsOnThrow(
|
|
lldb::LanguageType language) {
|
|
if (Language *lang_plugin = Language::FindPlugin(language))
|
|
return lang_plugin->SupportsExceptionBreakpointsOnThrow();
|
|
return false;
|
|
}
|
|
|
|
bool SBLanguageRuntime::SupportsExceptionBreakpointsOnCatch(
|
|
lldb::LanguageType language) {
|
|
if (Language *lang_plugin = Language::FindPlugin(language))
|
|
return lang_plugin->SupportsExceptionBreakpointsOnCatch();
|
|
return false;
|
|
}
|
|
|
|
const char *
|
|
SBLanguageRuntime::GetThrowKeywordForLanguage(lldb::LanguageType language) {
|
|
if (Language *lang_plugin = Language::FindPlugin(language))
|
|
return ConstString(lang_plugin->GetThrowKeyword()).AsCString();
|
|
return nullptr;
|
|
}
|
|
|
|
const char *
|
|
SBLanguageRuntime::GetCatchKeywordForLanguage(lldb::LanguageType language) {
|
|
if (Language *lang_plugin = Language::FindPlugin(language))
|
|
return ConstString(lang_plugin->GetCatchKeyword()).AsCString();
|
|
return nullptr;
|
|
}
|