124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- Options.h -----------------------------------------------*- C++ -*-===// 224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// The LLVM Compiler Infrastructure 424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source 624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details. 724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===// 924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef liblldb_Options_h_ 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_Options_h_ 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <getopt.h> 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <set> 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <vector> 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-private.h" 2334e9a98dcff785b0693594b6d6753f560abf8be2Jim Ingham#include "lldb/lldb-defines.h" 2484cdc15005983e5244d665fa779e33c2b6fac95fJim Ingham#include "lldb/Interpreter/Args.h" 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 268f00907e68af707b7728901f1ea1d9c40add5168Daniel Maleanamespace lldb_private { 272eafcaafe722598d937cc64fd5ae4a3bb49e8dcfDaniel Malea 282eafcaafe722598d937cc64fd5ae4a3bb49e8dcfDaniel Malea static inline bool 292eafcaafe722598d937cc64fd5ae4a3bb49e8dcfDaniel Malea isprint8 (int ch) 302eafcaafe722598d937cc64fd5ae4a3bb49e8dcfDaniel Malea { 312eafcaafe722598d937cc64fd5ae4a3bb49e8dcfDaniel Malea if (ch & 0xffffff00u) 322eafcaafe722598d937cc64fd5ae4a3bb49e8dcfDaniel Malea return false; 332eafcaafe722598d937cc64fd5ae4a3bb49e8dcfDaniel Malea return isprint(ch); 342eafcaafe722598d937cc64fd5ae4a3bb49e8dcfDaniel Malea } 352eafcaafe722598d937cc64fd5ae4a3bb49e8dcfDaniel Malea 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 3884cdc15005983e5244d665fa779e33c2b6fac95fJim Ingham/// @class Options Options.h "lldb/Interpreter/Options.h" 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @brief A command line option parsing protocol class. 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// Options is designed to be subclassed to contain all needed 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// options for a given command. The options can be parsed by calling: 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// \code 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// Error Args::ParseOptions (Options &); 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// \endcode 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// The options are specified using the format defined for the libc 483f2f741bb533b78e2fac5332c4698338ea2fd3acGreg Clayton/// options parsing function getopt_long_only: 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// \code 5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// #include <getopt.h> 513f2f741bb533b78e2fac5332c4698338ea2fd3acGreg Clayton/// int getopt_long_only(int argc, char * const *argv, const char *optstring, const struct option *longopts, int *longindex); 5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// \endcode 5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// 5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// Example code: 5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// \code 5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// #include <getopt.h> 5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// #include <string> 5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// 5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// class CommandOptions : public Options 6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// { 6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// public: 6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// virtual struct option * 6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// GetLongOptions() { 6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// return g_options; 6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// } 6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// 6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// virtual Error 68143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton/// SetOptionValue (uint32_t option_idx, int option_val, const char *option_arg) 6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// { 7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// Error error; 7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// switch (option_val) 7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// { 7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// case 'g': debug = true; break; 7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// case 'v': verbose = true; break; 7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// case 'l': log_file = option_arg; break; 7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// case 'f': log_flags = strtoull(option_arg, NULL, 0); break; 7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// default: 7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// error.SetErrorStringWithFormat("unrecognized short option %c", option_val); 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// break; 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// } 8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// return error; 8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// } 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// 85f15996eea072cdaa8a092f22d3a1212b3d95f0ecGreg Clayton/// CommandOptions (CommandInterpreter &interpreter) : debug (true), verbose (false), log_file (), log_flags (0) 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// {} 8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// 8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// bool debug; 8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// bool verbose; 9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// std::string log_file; 9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// uint32_t log_flags; 9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// 9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// static struct option g_options[]; 9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// 9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// }; 9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// 9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// struct option CommandOptions::g_options[] = 9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// { 9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// { "debug", no_argument, NULL, 'g' }, 10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// { "log-file", required_argument, NULL, 'l' }, 10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// { "log-flags", required_argument, NULL, 'f' }, 10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// { "verbose", no_argument, NULL, 'v' }, 10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// { NULL, 0, NULL, 0 } 10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// }; 10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// 10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// int main (int argc, const char **argv, const char **envp) 10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// { 10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// CommandOptions options; 10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// Args main_command; 11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// main_command.SetArguments(argc, argv, false); 11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// main_command.ParseOptions(options); 11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// 11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// if (options.verbose) 11424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// { 11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// std::cout << "verbose is on" << std::endl; 11624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// } 11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// } 11824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// \endcode 11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass Options 12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 124f15996eea072cdaa8a092f22d3a1212b3d95f0ecGreg Clayton Options (CommandInterpreter &interpreter); 12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual 12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~Options (); 12824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner BuildGetoptTable (); 13124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 13324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner BuildValidOptionSets (); 13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t 13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner NumCommandOptions (); 13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get the option definitions to use when parsing Args options. 14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see Args::ParseOptions (Options&) 1423f2f741bb533b78e2fac5332c4698338ea2fd3acGreg Clayton /// @see man getopt_long_only 14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner struct option * 14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetLongOptions (); 14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14734e9a98dcff785b0693594b6d6753f560abf8be2Jim Ingham // This gets passed the short option as an integer... 14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 14934e9a98dcff785b0693594b6d6753f560abf8be2Jim Ingham OptionSeen (int short_option); 15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner VerifyOptions (CommandReturnObject &result); 15324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 154143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton // Verify that the options given are in the options table and can 155143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton // be used together, but there may be some required options that are 156143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton // missing (used to verify options that get folded into command aliases). 15724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner VerifyPartialOptions (CommandReturnObject &result); 16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner OutputFormattedUsageText (Stream &strm, 16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char *text, 16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t output_max_columns); 16524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 167f15996eea072cdaa8a092f22d3a1212b3d95f0ecGreg Clayton GenerateOptionUsage (Stream &strm, 168238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton CommandObject *cmd); 16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 170d8a218d998d0dd805a8e4ec7bbaa9aeb229590ccGreg Clayton bool 171d8a218d998d0dd805a8e4ec7bbaa9aeb229590ccGreg Clayton SupportsLongOption (const char *long_option); 172d8a218d998d0dd805a8e4ec7bbaa9aeb229590ccGreg Clayton 173143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton // The following two pure virtual functions must be defined by every 174143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton // class that inherits from this class. 17524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 176b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton virtual const OptionDefinition* 1775bc7b67ccc8bb4a977d129e51313067dcbc7bb94Chris Lattner GetDefinitions () { return NULL; } 17824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 17924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton // Call this prior to parsing any options. This call will call the 180143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton // subclass OptionParsingStarting() and will avoid the need for all 181143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton // OptionParsingStarting() function instances from having to call the 182143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton // Option::OptionParsingStarting() like they did before. This was error 18324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton // prone and subclasses shouldn't have to do it. 18424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton void 185143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton NotifyOptionParsingStarting (); 186143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton 187143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton Error 188143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton NotifyOptionParsingFinished (); 18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Set the value of an option. 19224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] option_idx 19424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The index into the "struct option" array that was returned 19524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// by Options::GetLongOptions(). 19624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] option_arg 19824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The argument value for the option that the user entered, or 19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// NULL if there is no argument for the current option. 20024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 20124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 20224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see Args::ParseOptions (Options&) 2033f2f741bb533b78e2fac5332c4698338ea2fd3acGreg Clayton /// @see man getopt_long_only 20424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 20524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 206143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton SetOptionValue (uint32_t option_idx, const char *option_arg) = 0; 20724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 209143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton /// Handles the generic bits of figuring out whether we are in an 210143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton /// option, and if so completing it. 21124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 21224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] input 21324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The command line parsed into words 21424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 21524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] cursor_index 21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The index in \ainput of the word in which the cursor lies. 21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 21824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] char_pos 21924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The character position of the cursor in its argument word. 22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 22124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] match_start_point 22224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] match_return_elements 223143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton /// See CommandObject::HandleCompletions for a description of 224143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton /// how these work. 22524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 22624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] interpreter 22724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The interpreter that's doing the completing. 22824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 229802f8b0e11525a61f6becfd3562222b2cfaea965Jim Ingham /// @param[out] word_complete 230143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton /// \btrue if this is a complete option value (a space will be 231143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton /// inserted after the completion.) \b false otherwise. 232802f8b0e11525a61f6becfd3562222b2cfaea965Jim Ingham /// 23324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[out] matches 23424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The array of matches returned. 23524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 236143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton /// FIXME: This is the wrong return value, since we also need to 237143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton /// make a distinction between total number of matches, and the 238143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton /// window the user wants returned. 23924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 24024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 24124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \btrue if we were in an option, \bfalse otherwise. 24224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 24324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 244f15996eea072cdaa8a092f22d3a1212b3d95f0ecGreg Clayton HandleOptionCompletion (Args &input, 24524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner OptionElementVector &option_map, 24624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int cursor_index, 24724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int char_pos, 24824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int match_start_point, 24924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int max_return_elements, 250802f8b0e11525a61f6becfd3562222b2cfaea965Jim Ingham bool &word_complete, 25124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb_private::StringList &matches); 25224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 25324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 254143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton /// Handles the generic bits of figuring out whether we are in an 255143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton /// option, and if so completing it. 25624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 257802f8b0e11525a61f6becfd3562222b2cfaea965Jim Ingham /// @param[in] interpreter 258802f8b0e11525a61f6becfd3562222b2cfaea965Jim Ingham /// The command interpreter doing the completion. 259802f8b0e11525a61f6becfd3562222b2cfaea965Jim Ingham /// 26024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] input 26124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The command line parsed into words 26224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 26324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] cursor_index 26424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The index in \ainput of the word in which the cursor lies. 26524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 26624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] char_pos 26724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The character position of the cursor in its argument word. 26824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 26924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] opt_element_vector 27024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The results of the options parse of \a input. 27124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 27224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] opt_element_index 273143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton /// The position in \a opt_element_vector of the word in \a 274143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton /// input containing the cursor. 27524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 27624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] match_start_point 27724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] match_return_elements 278143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton /// See CommandObject::HandleCompletions for a description of 279143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton /// how these work. 28024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 281802f8b0e11525a61f6becfd3562222b2cfaea965Jim Ingham /// @param[out] word_complete 282143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton /// \btrue if this is a complete option value (a space will 283143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton /// be inserted after the completion.) \bfalse otherwise. 28424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 28524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[out] matches 28624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The array of matches returned. 28724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 288143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton /// FIXME: This is the wrong return value, since we also need to 289143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton /// make a distinction between total number of matches, and the 290143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton /// window the user wants returned. 29124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 29224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 29324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \btrue if we were in an option, \bfalse otherwise. 29424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 29524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual bool 296f15996eea072cdaa8a092f22d3a1212b3d95f0ecGreg Clayton HandleOptionArgumentCompletion (Args &input, 29763094e0bb161580564954dee512955c1c79d3476Greg Clayton int cursor_index, 29863094e0bb161580564954dee512955c1c79d3476Greg Clayton int char_pos, 29963094e0bb161580564954dee512955c1c79d3476Greg Clayton OptionElementVector &opt_element_vector, 30063094e0bb161580564954dee512955c1c79d3476Greg Clayton int opt_element_index, 30163094e0bb161580564954dee512955c1c79d3476Greg Clayton int match_start_point, 30263094e0bb161580564954dee512955c1c79d3476Greg Clayton int max_return_elements, 303802f8b0e11525a61f6becfd3562222b2cfaea965Jim Ingham bool &word_complete, 30463094e0bb161580564954dee512955c1c79d3476Greg Clayton StringList &matches); 30563094e0bb161580564954dee512955c1c79d3476Greg Clayton 30624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 30734e9a98dcff785b0693594b6d6753f560abf8be2Jim Ingham // This is a set of options expressed as indexes into the options table for this Option. 3086475c42148a8ea1ca86e5db465db7eca742d897dGreg Clayton typedef std::set<int> OptionSet; 3098b9af1caac91c9e66440370a79705a3370e0a360Jim Ingham typedef std::vector<OptionSet> OptionSetVector; 31024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 311f15996eea072cdaa8a092f22d3a1212b3d95f0ecGreg Clayton CommandInterpreter &m_interpreter; 31224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner std::vector<struct option> m_getopt_table; 31324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner OptionSet m_seen_options; 3148b9af1caac91c9e66440370a79705a3370e0a360Jim Ingham OptionSetVector m_required_options; 3158b9af1caac91c9e66440370a79705a3370e0a360Jim Ingham OptionSetVector m_optional_options; 3168b9af1caac91c9e66440370a79705a3370e0a360Jim Ingham 3178b9af1caac91c9e66440370a79705a3370e0a360Jim Ingham OptionSetVector &GetRequiredOptions () 3188b9af1caac91c9e66440370a79705a3370e0a360Jim Ingham { 3198b9af1caac91c9e66440370a79705a3370e0a360Jim Ingham BuildValidOptionSets(); 3208b9af1caac91c9e66440370a79705a3370e0a360Jim Ingham return m_required_options; 3218b9af1caac91c9e66440370a79705a3370e0a360Jim Ingham } 3228b9af1caac91c9e66440370a79705a3370e0a360Jim Ingham 3238b9af1caac91c9e66440370a79705a3370e0a360Jim Ingham OptionSetVector &GetOptionalOptions () 3248b9af1caac91c9e66440370a79705a3370e0a360Jim Ingham { 3258b9af1caac91c9e66440370a79705a3370e0a360Jim Ingham BuildValidOptionSets(); 3268b9af1caac91c9e66440370a79705a3370e0a360Jim Ingham return m_optional_options; 3278b9af1caac91c9e66440370a79705a3370e0a360Jim Ingham } 32824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 32924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 33024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner IsASubset (const OptionSet& set_a, const OptionSet& set_b); 33124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 33224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t 33324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner OptionsSetDiff (const OptionSet &set_a, const OptionSet &set_b, OptionSet &diffs); 33424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 33524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 33624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner OptionsSetUnion (const OptionSet &set_a, const OptionSet &set_b, OptionSet &union_set); 33724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 33824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton // Subclasses must reset their option values prior to starting a new 33924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton // option parse. Each subclass must override this function and revert 34024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton // all option settings to default values. 34124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton virtual void 342143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton OptionParsingStarting () = 0; 343143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton 344143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton virtual Error 345143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton OptionParsingFinished () 346143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton { 347143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton // If subclasses need to know when the options are done being parsed 348143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton // they can implement this function to do extra checking 349143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton Error error; 350143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton return error; 351143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton } 35224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 35324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 354143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton class OptionGroup 355143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton { 356143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton public: 357143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton OptionGroup () 358143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton { 359143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton } 360143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton 361143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton virtual 362143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton ~OptionGroup () 363143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton { 364143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton } 365143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton 366143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton virtual uint32_t 367143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton GetNumDefinitions () = 0; 368143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton 369143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton virtual const OptionDefinition* 370143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton GetDefinitions () = 0; 371143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton 372143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton virtual Error 373143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton SetOptionValue (CommandInterpreter &interpreter, 374143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton uint32_t option_idx, 375143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton const char *option_value) = 0; 376143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton 377143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton virtual void 378143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton OptionParsingStarting (CommandInterpreter &interpreter) = 0; 379143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton 380143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton virtual Error 381143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton OptionParsingFinished (CommandInterpreter &interpreter) 382143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton { 383143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton // If subclasses need to know when the options are done being parsed 384143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton // they can implement this function to do extra checking 385143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton Error error; 386143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton return error; 387143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton } 388143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton }; 389143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton 390143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton class OptionGroupOptions : public Options 391143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton { 392143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton public: 393143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton 394143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton OptionGroupOptions (CommandInterpreter &interpreter) : 395143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton Options (interpreter), 396143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton m_option_defs (), 3975e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton m_option_infos (), 398143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton m_did_finalize (false) 399143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton { 400143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton } 401143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton 402143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton virtual 403143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton ~OptionGroupOptions () 404143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton { 405143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton } 406143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton 40757b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton 40857b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton //---------------------------------------------------------------------- 40957b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton /// Append options from a OptionGroup class. 41057b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton /// 41157b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton /// Append all options from \a group using the exact same option groups 41257b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton /// that each option is defined with. 41357b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton /// 41457b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton /// @param[in] group 41557b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton /// A group of options to take option values from and copy their 41657b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton /// definitions into this class. 41757b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton //---------------------------------------------------------------------- 41857b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton void 41957b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton Append (OptionGroup* group); 42057b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton 4215e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton //---------------------------------------------------------------------- 4225e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton /// Append options from a OptionGroup class. 4235e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton /// 4245e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton /// Append options from \a group that have a usage mask that has any bits 4255e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton /// in "src_mask" set. After the option definition is copied into the 4265e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton /// options definitions in this class, set the usage_mask to "dst_mask". 4275e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton /// 4285e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton /// @param[in] group 4295e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton /// A group of options to take option values from and copy their 4305e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton /// definitions into this class. 4315e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton /// 4325e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton /// @param[in] src_mask 4335e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton /// When copying options from \a group, you might only want some of 4345e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton /// the options to be appended to this group. This mask allows you 4355e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton /// to control which options from \a group get added. It also allows 4365e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton /// you to specify the same options from \a group multiple times 4375e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton /// for different option sets. 4385e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton /// 4395e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton /// @param[in] dst_mask 4405e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton /// Set the usage mask for any copied options to \a dst_mask after 4415e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton /// copying the option definition. 4425e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton //---------------------------------------------------------------------- 443143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton void 4445e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton Append (OptionGroup* group, 4455e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton uint32_t src_mask, 4465e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton uint32_t dst_mask); 447143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton 448143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton void 449143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton Finalize (); 450143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton 451143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton virtual Error 452143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton SetOptionValue (uint32_t option_idx, 453143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton const char *option_arg); 454143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton 455143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton virtual void 456143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton OptionParsingStarting (); 457143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton 458143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton virtual Error 459143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton OptionParsingFinished (); 460143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton 461143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton const OptionDefinition* 462143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton GetDefinitions () 463143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton { 464143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton assert (m_did_finalize); 465143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton return &m_option_defs[0]; 466143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton } 4675e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton struct OptionInfo 4685e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton { 4695e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton OptionInfo (OptionGroup* g, uint32_t i) : 4705e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton option_group (g), 4715e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton option_index (i) 4725e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton { 4735e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton } 4745e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton OptionGroup* option_group; // The group that this option came from 4755e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton uint32_t option_index; // The original option index from the OptionGroup 4765e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton }; 4775e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton typedef std::vector<OptionInfo> OptionInfos; 478143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton 479143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton std::vector<OptionDefinition> m_option_defs; 4805e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton OptionInfos m_option_infos; 481143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton bool m_did_finalize; 482143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton }; 483143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton 484143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton 48524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private 48624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 48724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // liblldb_Options_h_ 488