1dda28197Spatrick //===-- OptionGroupOutputFile.cpp -----------------------------------------===//
2061da546Spatrick //
3061da546Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4061da546Spatrick // See https://llvm.org/LICENSE.txt for license information.
5061da546Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6061da546Spatrick //
7061da546Spatrick //===----------------------------------------------------------------------===//
8061da546Spatrick
9061da546Spatrick #include "lldb/Interpreter/OptionGroupOutputFile.h"
10061da546Spatrick
11061da546Spatrick #include "lldb/Host/OptionParser.h"
12061da546Spatrick
13061da546Spatrick using namespace lldb;
14061da546Spatrick using namespace lldb_private;
15061da546Spatrick
OptionGroupOutputFile()16be691f3bSpatrick OptionGroupOutputFile::OptionGroupOutputFile() : m_append(false, false) {}
17061da546Spatrick
18061da546Spatrick static const uint32_t SHORT_OPTION_APND = 0x61706e64; // 'apnd'
19061da546Spatrick
20061da546Spatrick static constexpr OptionDefinition g_option_table[] = {
21061da546Spatrick {LLDB_OPT_SET_1, false, "outfile", 'o', OptionParser::eRequiredArgument,
22061da546Spatrick nullptr, {}, 0, eArgTypeFilename,
23061da546Spatrick "Specify a path for capturing command output."},
24061da546Spatrick {LLDB_OPT_SET_1, false, "append-outfile", SHORT_OPTION_APND,
25061da546Spatrick OptionParser::eNoArgument, nullptr, {}, 0, eArgTypeNone,
26061da546Spatrick "Append to the file specified with '--outfile <path>'."},
27061da546Spatrick };
28061da546Spatrick
GetDefinitions()29061da546Spatrick llvm::ArrayRef<OptionDefinition> OptionGroupOutputFile::GetDefinitions() {
30*f6aab3d8Srobert return llvm::ArrayRef(g_option_table);
31061da546Spatrick }
32061da546Spatrick
33061da546Spatrick Status
SetOptionValue(uint32_t option_idx,llvm::StringRef option_arg,ExecutionContext * execution_context)34061da546Spatrick OptionGroupOutputFile::SetOptionValue(uint32_t option_idx,
35061da546Spatrick llvm::StringRef option_arg,
36061da546Spatrick ExecutionContext *execution_context) {
37061da546Spatrick Status error;
38061da546Spatrick const int short_option = g_option_table[option_idx].short_option;
39061da546Spatrick
40061da546Spatrick switch (short_option) {
41061da546Spatrick case 'o':
42061da546Spatrick error = m_file.SetValueFromString(option_arg);
43061da546Spatrick break;
44061da546Spatrick
45061da546Spatrick case SHORT_OPTION_APND:
46061da546Spatrick m_append.SetCurrentValue(true);
47061da546Spatrick break;
48061da546Spatrick
49061da546Spatrick default:
50061da546Spatrick llvm_unreachable("Unimplemented option");
51061da546Spatrick }
52061da546Spatrick
53061da546Spatrick return error;
54061da546Spatrick }
55061da546Spatrick
OptionParsingStarting(ExecutionContext * execution_context)56061da546Spatrick void OptionGroupOutputFile::OptionParsingStarting(
57061da546Spatrick ExecutionContext *execution_context) {
58061da546Spatrick m_file.Clear();
59061da546Spatrick m_append.Clear();
60061da546Spatrick }
61