diff options
Diffstat (limited to 'contrib/llvm-project/lldb/tools/driver/Driver.h')
-rw-r--r-- | contrib/llvm-project/lldb/tools/driver/Driver.h | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/contrib/llvm-project/lldb/tools/driver/Driver.h b/contrib/llvm-project/lldb/tools/driver/Driver.h new file mode 100644 index 000000000000..83e0d8a41cfd --- /dev/null +++ b/contrib/llvm-project/lldb/tools/driver/Driver.h @@ -0,0 +1,102 @@ +//===-- Driver.h ------------------------------------------------*- C++ -*-===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +#ifndef LLDB_TOOLS_DRIVER_DRIVER_H +#define LLDB_TOOLS_DRIVER_DRIVER_H + +#include "Platform.h" + +#include "lldb/API/SBBroadcaster.h" +#include "lldb/API/SBDebugger.h" +#include "lldb/API/SBDefines.h" +#include "lldb/API/SBError.h" + +#include "llvm/Option/Arg.h" +#include "llvm/Option/ArgList.h" +#include "llvm/Option/Option.h" + +#include <set> +#include <string> +#include <vector> + +class Driver : public lldb::SBBroadcaster { +public: + enum CommandPlacement { + eCommandPlacementBeforeFile, + eCommandPlacementAfterFile, + eCommandPlacementAfterCrash, + }; + + Driver(); + + virtual ~Driver(); + + /// Runs the main loop. + /// + /// \return The exit code that the process should return. + int MainLoop(); + + lldb::SBError ProcessArgs(const llvm::opt::InputArgList &args, bool &exiting); + + void WriteCommandsForSourcing(CommandPlacement placement, + lldb::SBStream &strm); + + struct OptionData { + void AddInitialCommand(std::string command, CommandPlacement placement, + bool is_file, lldb::SBError &error); + + struct InitialCmdEntry { + InitialCmdEntry(std::string contents, bool in_is_file, + bool in_quiet = false) + : contents(std::move(contents)), is_file(in_is_file), + source_quietly(in_quiet) {} + + std::string contents; + bool is_file; + bool source_quietly; + }; + + std::vector<std::string> m_args; + + lldb::LanguageType m_repl_lang = lldb::eLanguageTypeUnknown; + lldb::pid_t m_process_pid = LLDB_INVALID_PROCESS_ID; + + std::string m_core_file; + std::string m_crash_log; + std::string m_repl_options; + std::string m_process_name; + + std::vector<InitialCmdEntry> m_initial_commands; + std::vector<InitialCmdEntry> m_after_file_commands; + std::vector<InitialCmdEntry> m_after_crash_commands; + + bool m_source_quietly = false; + bool m_print_version = false; + bool m_print_python_path = false; + bool m_print_script_interpreter_info = false; + bool m_wait_for = false; + bool m_repl = false; + bool m_batch = false; + + // FIXME: When we have set/show variables we can remove this from here. + bool m_use_external_editor = false; + + using OptionSet = std::set<char>; + OptionSet m_seen_options; + }; + + lldb::SBDebugger &GetDebugger() { return m_debugger; } + + void ResizeWindow(unsigned short col); + +private: + lldb::SBDebugger m_debugger; + OptionData m_option_data; +}; + +#endif // LLDB_TOOLS_DRIVER_DRIVER_H |