Files
llvm/lldb/source/Interpreter/OptionGroupWatchpoint.cpp
Raphael Isemann 36162014c4 [lldb][NFC] Remove dead code that is supposed to handle invalid command options
Summary:
We currently have a bunch of code that is supposed to handle invalid command options, but
all this code is unreachable because invalid options are already handled in `Options::Parse`.
The only way we can reach this code is when we declare but then not implement an option
(which will be made impossible with D65386, which is also when we can completely remove
the `default` cases).

This patch replaces all this code with `llvm_unreachable` to make clear this is dead code
that can't be reached.

Reviewers: JDevlieghere

Reviewed By: JDevlieghere

Subscribers: lldb-commits

Tags: #lldb

Differential Revision: https://reviews.llvm.org/D66522

llvm-svn: 369625
2019-08-22 08:08:05 +00:00

120 lines
3.2 KiB
C++

//===-- OptionGroupWatchpoint.cpp -------------------------------*- 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
//
//===----------------------------------------------------------------------===//
#include "lldb/Interpreter/OptionGroupWatchpoint.h"
#include "lldb/Host/OptionParser.h"
#include "lldb/Interpreter/OptionArgParser.h"
#include "lldb/lldb-enumerations.h"
using namespace lldb;
using namespace lldb_private;
static constexpr OptionEnumValueElement g_watch_type[] = {
{
OptionGroupWatchpoint::eWatchRead,
"read",
"Watch for read",
},
{
OptionGroupWatchpoint::eWatchWrite,
"write",
"Watch for write",
},
{
OptionGroupWatchpoint::eWatchReadWrite,
"read_write",
"Watch for read/write",
},
};
static constexpr OptionEnumValueElement g_watch_size[] = {
{
1,
"1",
"Watch for byte size of 1",
},
{
2,
"2",
"Watch for byte size of 2",
},
{
4,
"4",
"Watch for byte size of 4",
},
{
8,
"8",
"Watch for byte size of 8",
},
};
static constexpr OptionDefinition g_option_table[] = {
{LLDB_OPT_SET_1, false, "watch", 'w', OptionParser::eRequiredArgument,
nullptr, OptionEnumValues(g_watch_type), 0, eArgTypeWatchType,
"Specify the type of watching to perform."},
{LLDB_OPT_SET_1, false, "size", 's', OptionParser::eRequiredArgument,
nullptr, OptionEnumValues(g_watch_size), 0, eArgTypeByteSize,
"Number of bytes to use to watch a region."}};
bool OptionGroupWatchpoint::IsWatchSizeSupported(uint32_t watch_size) {
for (const auto& size : g_watch_size) {
if (0 == size.value)
break;
if (watch_size == size.value)
return true;
}
return false;
}
OptionGroupWatchpoint::OptionGroupWatchpoint() : OptionGroup() {}
OptionGroupWatchpoint::~OptionGroupWatchpoint() {}
Status
OptionGroupWatchpoint::SetOptionValue(uint32_t option_idx,
llvm::StringRef option_arg,
ExecutionContext *execution_context) {
Status error;
const int short_option = g_option_table[option_idx].short_option;
switch (short_option) {
case 'w': {
WatchType tmp_watch_type;
tmp_watch_type = (WatchType)OptionArgParser::ToOptionEnum(
option_arg, g_option_table[option_idx].enum_values, 0, error);
if (error.Success()) {
watch_type = tmp_watch_type;
watch_type_specified = true;
}
break;
}
case 's':
watch_size = (uint32_t)OptionArgParser::ToOptionEnum(
option_arg, g_option_table[option_idx].enum_values, 0, error);
break;
default:
llvm_unreachable("Unimplemented option");
}
return error;
}
void OptionGroupWatchpoint::OptionParsingStarting(
ExecutionContext *execution_context) {
watch_type_specified = false;
watch_type = eWatchInvalid;
watch_size = 0;
}
llvm::ArrayRef<OptionDefinition> OptionGroupWatchpoint::GetDefinitions() {
return llvm::makeArrayRef(g_option_table);
}