Files
llvm/lldb/source/Interpreter/OptionGroupWatchpoint.cpp
Todd Fiala 9734280f33 Fix broken tests due to new error output.
This reverses out the options validators changes.  We'll get these
back in once the changes to the output can be resolved.

Restores broken tests on FreeBSD, Linux, MacOSX.

Changes reverted: r212500, r212317, r212290.

llvm-svn: 212543
2014-07-08 15:55:32 +00:00

122 lines
3.3 KiB
C++

//===-- OptionGroupWatchpoint.cpp -------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#include "lldb/Interpreter/OptionGroupWatchpoint.h"
// C Includes
// C++ Includes
// Other libraries and framework includes
// Project includes
#include "lldb/lldb-enumerations.h"
#include "lldb/Interpreter/Args.h"
#include "lldb/Utility/Utils.h"
using namespace lldb;
using namespace lldb_private;
static OptionEnumValueElement g_watch_type[] =
{
{ OptionGroupWatchpoint::eWatchRead, "read", "Watch for read"},
{ OptionGroupWatchpoint::eWatchWrite, "write", "Watch for write"},
{ OptionGroupWatchpoint::eWatchReadWrite, "read_write", "Watch for read/write"},
{ 0, nullptr, nullptr }
};
static 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"},
{ 0, nullptr, nullptr }
};
static OptionDefinition
g_option_table[] =
{
{ LLDB_OPT_SET_1, false, "watch", 'w', OptionParser::eRequiredArgument, g_watch_type, 0, eArgTypeWatchType, "Specify the type of watching to perform."},
{ LLDB_OPT_SET_1, false, "xsize", 'x', OptionParser::eRequiredArgument, g_watch_size, 0, eArgTypeByteSize, "Number of bytes to use to watch a region."}
};
bool
OptionGroupWatchpoint::IsWatchSizeSupported(uint32_t watch_size)
{
for (uint32_t i = 0; i < llvm::array_lengthof(g_watch_size); ++i)
{
if (g_watch_size[i].value == 0)
break;
if (watch_size == g_watch_size[i].value)
return true;
}
return false;
}
OptionGroupWatchpoint::OptionGroupWatchpoint () :
OptionGroup()
{
}
OptionGroupWatchpoint::~OptionGroupWatchpoint ()
{
}
Error
OptionGroupWatchpoint::SetOptionValue (CommandInterpreter &interpreter,
uint32_t option_idx,
const char *option_arg)
{
Error 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) Args::StringToOptionEnum(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 'x':
watch_size = (uint32_t) Args::StringToOptionEnum(option_arg, g_option_table[option_idx].enum_values, 0, error);
break;
default:
error.SetErrorStringWithFormat("unrecognized short option '%c'", short_option);
break;
}
return error;
}
void
OptionGroupWatchpoint::OptionParsingStarting (CommandInterpreter &interpreter)
{
watch_type_specified = false;
watch_type = eWatchInvalid;
watch_size = 0;
}
const OptionDefinition*
OptionGroupWatchpoint::GetDefinitions ()
{
return g_option_table;
}
uint32_t
OptionGroupWatchpoint::GetNumDefinitions ()
{
return llvm::array_lengthof(g_option_table);
}