OptionGroupVariable.cpp revision 6475c42148a8ea1ca86e5db465db7eca742d897d
1368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton//===-- OptionGroupVariable.cpp -----------------------*- C++ -*-===// 2368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton// 3368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton// The LLVM Compiler Infrastructure 4368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton// 5368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton// This file is distributed under the University of Illinois Open Source 6368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton// License. See LICENSE.TXT for details. 7368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton// 8368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton//===----------------------------------------------------------------------===// 9368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton 10368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton#include "lldb/Interpreter/OptionGroupVariable.h" 11368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton 12368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton// C Includes 13368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton// C++ Includes 14368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton// Other libraries and framework includes 15368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton// Project includes 16368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton#include "lldb/Target/Target.h" 17368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton#include "lldb/Interpreter/CommandInterpreter.h" 18cfbf7fefda349bccf3eda8d56579cd261c9c8b89Johnny Chen#include "lldb/Utility/Utils.h" 19368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton 20368f8226b1f75fbb4758748fafcee70f18fc248eGreg Claytonusing namespace lldb; 21368f8226b1f75fbb4758748fafcee70f18fc248eGreg Claytonusing namespace lldb_private; 22368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton 231a102087f54079c25c8827afac6153a44ca535daEnrico Granata// if you add any options here, remember to update the counters in OptionGroupVariable::GetNumDefinitions() 24368f8226b1f75fbb4758748fafcee70f18fc248eGreg Claytonstatic OptionDefinition 25368f8226b1f75fbb4758748fafcee70f18fc248eGreg Claytong_option_table[] = 26368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton{ 276475c42148a8ea1ca86e5db465db7eca742d897dGreg Clayton { LLDB_OPT_SET_1 | LLDB_OPT_SET_2, false, "no-args", 'a', no_argument, NULL, 0, eArgTypeNone, "Omit function arguments."}, 286475c42148a8ea1ca86e5db465db7eca742d897dGreg Clayton { LLDB_OPT_SET_1 | LLDB_OPT_SET_2, false, "no-locals", 'l', no_argument, NULL, 0, eArgTypeNone, "Omit local variables."}, 296475c42148a8ea1ca86e5db465db7eca742d897dGreg Clayton { LLDB_OPT_SET_1 | LLDB_OPT_SET_2, false, "show-globals", 'g', no_argument, NULL, 0, eArgTypeNone, "Show the current frame source file global and static variables."}, 306475c42148a8ea1ca86e5db465db7eca742d897dGreg Clayton { LLDB_OPT_SET_1 | LLDB_OPT_SET_2, false, "show-declaration",'c', no_argument, NULL, 0, eArgTypeNone, "Show variable declaration information (source file and line where the variable was declared)."}, 316475c42148a8ea1ca86e5db465db7eca742d897dGreg Clayton { LLDB_OPT_SET_1 | LLDB_OPT_SET_2, false, "regex", 'r', no_argument, NULL, 0, eArgTypeRegularExpression, "The <variable-name> argument for name lookups are regular expressions."}, 326475c42148a8ea1ca86e5db465db7eca742d897dGreg Clayton { LLDB_OPT_SET_1 | LLDB_OPT_SET_2, false, "scope", 's', no_argument, NULL, 0, eArgTypeNone, "Show variable scope (argument, local, global, static)."}, 336475c42148a8ea1ca86e5db465db7eca742d897dGreg Clayton { LLDB_OPT_SET_1, false, "summary", 'y', required_argument, NULL, 0, eArgTypeName, "Specify the summary that the variable output should use."}, 346475c42148a8ea1ca86e5db465db7eca742d897dGreg Clayton { LLDB_OPT_SET_2, false, "summary-string", 'z', required_argument, NULL, 0, eArgTypeName, "Specify a summary string to use to format the variable output."}, 35368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton}; 36368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton 37368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton 38368f8226b1f75fbb4758748fafcee70f18fc248eGreg ClaytonOptionGroupVariable::OptionGroupVariable (bool show_frame_options) : 39368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton OptionGroup(), 40368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton include_frame_options (show_frame_options) 41368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton{ 42368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton} 43368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton 44368f8226b1f75fbb4758748fafcee70f18fc248eGreg ClaytonOptionGroupVariable::~OptionGroupVariable () 45368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton{ 46368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton} 47368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton 48368f8226b1f75fbb4758748fafcee70f18fc248eGreg ClaytonError 49368f8226b1f75fbb4758748fafcee70f18fc248eGreg ClaytonOptionGroupVariable::SetOptionValue (CommandInterpreter &interpreter, 50368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton uint32_t option_idx, 51368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton const char *option_arg) 52368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton{ 53368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton Error error; 54368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton if (!include_frame_options) 55368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton option_idx += 3; 566475c42148a8ea1ca86e5db465db7eca742d897dGreg Clayton const int short_option = g_option_table[option_idx].short_option; 57368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton switch (short_option) 58368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton { 59368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton case 'r': use_regex = true; break; 60368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton case 'a': show_args = false; break; 61368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton case 'l': show_locals = false; break; 62368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton case 'g': show_globals = true; break; 63368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton case 'c': show_decl = true; break; 64368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton case 's': 65368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton show_scope = true; 66368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton break; 671a102087f54079c25c8827afac6153a44ca535daEnrico Granata case 'y': 68879de484c7ef1d0971ac6c007b319b8285723e69Enrico Granata summary.SetCurrentValue(option_arg); 69879de484c7ef1d0971ac6c007b319b8285723e69Enrico Granata break; 70879de484c7ef1d0971ac6c007b319b8285723e69Enrico Granata case 'z': 71879de484c7ef1d0971ac6c007b319b8285723e69Enrico Granata summary_string.SetCurrentValue(option_arg); 721a102087f54079c25c8827afac6153a44ca535daEnrico Granata break; 73368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton default: 749c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Clayton error.SetErrorStringWithFormat("unrecognized short option '%c'", short_option); 75368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton break; 76368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton } 77368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton 78368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton return error; 79368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton} 80368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton 81368f8226b1f75fbb4758748fafcee70f18fc248eGreg Claytonvoid 82368f8226b1f75fbb4758748fafcee70f18fc248eGreg ClaytonOptionGroupVariable::OptionParsingStarting (CommandInterpreter &interpreter) 83368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton{ 84368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton show_args = true; // Frame option only 85368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton show_locals = true; // Frame option only 86368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton show_globals = false; // Frame option only 87368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton show_decl = false; 88368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton use_regex = false; 89368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton show_scope = false; 90879de484c7ef1d0971ac6c007b319b8285723e69Enrico Granata summary.Clear(); 91879de484c7ef1d0971ac6c007b319b8285723e69Enrico Granata summary_string.Clear(); 92368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton} 93368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton 94cfbf7fefda349bccf3eda8d56579cd261c9c8b89Johnny Chen#define NUM_FRAME_OPTS 3 95368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton 96368f8226b1f75fbb4758748fafcee70f18fc248eGreg Claytonconst OptionDefinition* 97368f8226b1f75fbb4758748fafcee70f18fc248eGreg ClaytonOptionGroupVariable::GetDefinitions () 98368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton{ 99368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton // Show the "--no-args", "--no-locals" and "--show-globals" 100368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton // options if we are showing frame specific options 101368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton if (include_frame_options) 102368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton return g_option_table; 103368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton 104368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton // Skip the "--no-args", "--no-locals" and "--show-globals" 105368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton // options if we are not showing frame specific options (globals only) 106cfbf7fefda349bccf3eda8d56579cd261c9c8b89Johnny Chen return &g_option_table[NUM_FRAME_OPTS]; 107368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton} 108368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton 109368f8226b1f75fbb4758748fafcee70f18fc248eGreg Claytonuint32_t 110368f8226b1f75fbb4758748fafcee70f18fc248eGreg ClaytonOptionGroupVariable::GetNumDefinitions () 111368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton{ 112cfbf7fefda349bccf3eda8d56579cd261c9c8b89Johnny Chen // Count the "--no-args", "--no-locals" and "--show-globals" 113cfbf7fefda349bccf3eda8d56579cd261c9c8b89Johnny Chen // options if we are showing frame specific options. 114368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton if (include_frame_options) 11508af5983cb349e7167f3832d00d36ca611bfa2f1Johnny Chen return llvm::array_lengthof(g_option_table); 116368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton else 11708af5983cb349e7167f3832d00d36ca611bfa2f1Johnny Chen return llvm::array_lengthof(g_option_table) - NUM_FRAME_OPTS; 118368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton} 119368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton 120368f8226b1f75fbb4758748fafcee70f18fc248eGreg Clayton 121