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