124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- Args.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_Command_h_ 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_Command_h_ 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <getopt.h> 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <list> 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <string> 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <vector> 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <utility> 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes 24b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton#include "lldb/lldb-private-types.h" 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-types.h" 26b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton#include "lldb/Core/Error.h" 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private { 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3044c841d68a439da13e3f170427675bff8c7f2731Caroline Ticetypedef std::pair<int, std::string> OptionArgValue; 3144c841d68a439da13e3f170427675bff8c7f2731Caroline Ticetypedef std::pair<std::string, OptionArgValue> OptionArgPair; 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnertypedef std::vector<OptionArgPair> OptionArgVector; 33102b2c2681c9a830afe25bfea35557421905e42cGreg Claytontypedef std::shared_ptr<OptionArgVector> OptionArgVectorSP; 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerstruct OptionArgElement 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 37adb8429ff57c3d54300dd6a8a1ed993d655c1931Jim Ingham enum { 38adb8429ff57c3d54300dd6a8a1ed993d655c1931Jim Ingham eUnrecognizedArg = -1, 39adb8429ff57c3d54300dd6a8a1ed993d655c1931Jim Ingham eBareDash = -2, 40adb8429ff57c3d54300dd6a8a1ed993d655c1931Jim Ingham eBareDoubleDash = -3 41adb8429ff57c3d54300dd6a8a1ed993d655c1931Jim Ingham }; 42adb8429ff57c3d54300dd6a8a1ed993d655c1931Jim Ingham 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner OptionArgElement (int defs_index, int pos, int arg_pos) : 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner opt_defs_index(defs_index), 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner opt_pos (pos), 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner opt_arg_pos (arg_pos) 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int opt_defs_index; 5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int opt_pos; 5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int opt_arg_pos; 5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnertypedef std::vector<OptionArgElement> OptionElementVector; 5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 5884cdc15005983e5244d665fa779e33c2b6fac95fJim Ingham/// @class Args Args.h "lldb/Interpreter/Args.h" 5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @brief A command line argument class. 6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// 6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// The Args class is designed to be fed a command line. The 6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// command line is copied into an internal buffer and then split up 6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// into arguments. Arguments are space delimited if there are no quotes 6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// (single, double, or backtick quotes) surrounding the argument. Spaces 6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// can be escaped using a \ character to avoid having to surround an 6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// argument that contains a space with quotes. 6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass Args 6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Construct with an option command string. 7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] command 7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A NULL terminated command that will be copied and split up 7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// into arguments. 7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see Args::SetCommandString(const char *) 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Args (const char *command = NULL); 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Args (const char *command, size_t len); 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 85b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Args (const Args &rhs); 86b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 87b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton const Args & 88b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton operator= (const Args &rhs); 89b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Destructor. 9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~Args(); 9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Dump all arguments to the stream \a s. 9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] s 9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The stream to which to dump all arguments in the argument 10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// vector. 10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Dump (Stream *s); 10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Sets the command string contained by this object. 10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The command string will be copied and split up into arguments 10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// that can be accessed via the accessor functions. 11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] command 11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A NULL terminated command that will be copied and split up 11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// into arguments. 11424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see Args::GetArgumentCount() const 11624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see Args::GetArgumentAtIndex (size_t) const 11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see Args::GetArgumentVector () 11824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see Args::Shift () 11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see Args::Unshift (const char *) 12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetCommandString (const char *command); 12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetCommandString (const char *command, size_t len); 12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 128431d26daf9c89fd34310f39dbc00f26ee39c520fGreg Clayton GetCommandString (std::string &command) const; 12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 130d9105c2f5e1a4b6bb1a9d424e3f1631e0e6296cdCaroline Tice bool 131431d26daf9c89fd34310f39dbc00f26ee39c520fGreg Clayton GetQuotedCommandString (std::string &command) const; 132d9105c2f5e1a4b6bb1a9d424e3f1631e0e6296cdCaroline Tice 13324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Gets the number of arguments left in this command object. 13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number or arguments in this object. 13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t 14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetArgumentCount () const; 14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Gets the NULL terminated C string argument pointer for the 14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// argument at index \a idx. 14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The NULL terminated C string argument pointer if \a idx is a 14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// valid argument index, NULL otherwise. 14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char * 15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetArgumentAtIndex (size_t idx) const; 15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 15324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner char 15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetArgumentQuoteCharAtIndex (size_t idx) const; 15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 15624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 15724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Gets the argument vector. 15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The value returned by this function can be used by any function 16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// that takes and vector. The return value is just like \a argv 16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// in the standard C entry point function: 16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \code 16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// int main (int argc, const char **argv); 16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \endcode 16524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 16724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// An array of NULL terminated C string argument pointers that 16824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// also has a terminating NULL C string pointer 16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 17024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner char ** 17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetArgumentVector (); 17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 17324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 17424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Gets the argument vector. 17524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 17624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The value returned by this function can be used by any function 17724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// that takes and vector. The return value is just like \a argv 17824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// in the standard C entry point function: 17924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \code 18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// int main (int argc, const char **argv); 18124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \endcode 18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// An array of NULL terminate C string argument pointers that 18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// also has a terminating NULL C string pointer 18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char ** 18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetConstArgumentVector () const; 18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 19224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Appends a new argument to the end of the list argument list. 19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 19424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] arg_cstr 19524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The new argument as a NULL terminated C string. 19624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] quote_char 19824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If the argument was originally quoted, put in the quote char here. 19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 20024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 20124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The NULL terminated C string of the copy of \a arg_cstr. 20224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 20324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char * 20424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner AppendArgument (const char *arg_cstr, char quote_char = '\0'); 20524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 20724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner AppendArguments (const Args &rhs); 20836bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton 20936bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton void 21036bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton AppendArguments (const char **argv); 21136bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton 21224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 21324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Insert the argument value at index \a idx to \a arg_cstr. 21424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 21524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] idx 21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The index of where to insert the argument. 21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 21824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] arg_cstr 21924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The new argument as a NULL terminated C string. 22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 22124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] quote_char 22224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If the argument was originally quoted, put in the quote char here. 22324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 22424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 22524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The NULL terminated C string of the copy of \a arg_cstr. 22624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 22724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char * 22824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner InsertArgumentAtIndex (size_t idx, const char *arg_cstr, char quote_char = '\0'); 22924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 23024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 23124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Replaces the argument value at index \a idx to \a arg_cstr 23224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// if \a idx is a valid argument index. 23324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 23424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] idx 23524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The index of the argument that will have its value replaced. 23624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 23724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] arg_cstr 23824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The new argument as a NULL terminated C string. 23924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 24024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] quote_char 24124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If the argument was originally quoted, put in the quote char here. 24224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 24324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 24424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The NULL terminated C string of the copy of \a arg_cstr if 24524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \a idx was a valid index, NULL otherwise. 24624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 24724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char * 24824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ReplaceArgumentAtIndex (size_t idx, const char *arg_cstr, char quote_char = '\0'); 24924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 25024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 25124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Deletes the argument value at index 25224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// if \a idx is a valid argument index. 25324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 25424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] idx 25524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The index of the argument that will have its value replaced. 25624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 25724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 25824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 25924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DeleteArgumentAtIndex (size_t idx); 26024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 26124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 26224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Sets the argument vector value, optionally copying all 26324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// arguments into an internal buffer. 26424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 26524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Sets the arguments to match those found in \a argv. All argument 26624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// strings will be copied into an internal buffers. 26724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // 26824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // FIXME: Handle the quote character somehow. 26924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 27024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 27136da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton SetArguments (size_t argc, const char **argv); 27224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 27336bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton void 27436bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton SetArguments (const char **argv); 27536bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton 27624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 27724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Shifts the first argument C string value of the array off the 27824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// argument array. 27924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 28024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The string value will be freed, so a copy of the string should 28124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// be made by calling Args::GetArgumentAtIndex (size_t) const 28224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// first and copying the returned value before calling 28324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Args::Shift(). 28424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 28524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see Args::GetArgumentAtIndex (size_t) const 28624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 28724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 28824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Shift (); 28924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 29024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 29124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Inserts a class owned copy of \a arg_cstr at the beginning of 29224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// the argument vector. 29324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 29424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A copy \a arg_cstr will be made. 29524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 29624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] arg_cstr 29724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The argument to push on the front the the argument stack. 29824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 29924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] quote_char 30024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If the argument was originally quoted, put in the quote char here. 30124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 30224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 30324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A pointer to the copy of \a arg_cstr that was made. 30424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 30524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char * 30624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Unshift (const char *arg_cstr, char quote_char = '\0'); 30724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 30824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 30924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Parse the arguments in the contained arguments. 31024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 31124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The arguments that are consumed by the argument parsing process 31224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// will be removed from the argument vector. The arguements that 31324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// get processed start at the second argument. The first argument 31424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// is assumed to be the command and will not be touched. 31524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 31624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see class Options 31724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 31824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Error 31924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ParseOptions (Options &options); 32044c841d68a439da13e3f170427675bff8c7f2731Caroline Tice 32144c841d68a439da13e3f170427675bff8c7f2731Caroline Tice size_t 32244c841d68a439da13e3f170427675bff8c7f2731Caroline Tice FindArgumentIndexForOption (struct option *long_options, int long_options_index); 32344c841d68a439da13e3f170427675bff8c7f2731Caroline Tice 32444c841d68a439da13e3f170427675bff8c7f2731Caroline Tice bool 32544c841d68a439da13e3f170427675bff8c7f2731Caroline Tice IsPositionalArgument (const char *arg); 32624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 32724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // The following works almost identically to ParseOptions, except that no option is required to have arguments, 32824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // and it builds up the option_arg_vector as it parses the options. 32924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 33024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 331e0da7a5ba288669df3a4d51059aa0f78f729c6b1Caroline Tice ParseAliasOptions (Options &options, CommandReturnObject &result, OptionArgVector *option_arg_vector, 332e0da7a5ba288669df3a4d51059aa0f78f729c6b1Caroline Tice std::string &raw_input_line); 33324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 33424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 335adb8429ff57c3d54300dd6a8a1ed993d655c1931Jim Ingham ParseArgsForCompletion (Options &options, OptionElementVector &option_element_vector, uint32_t cursor_index); 33624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 33724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 33824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Clear the arguments. 33924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // 34024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // For re-setting or blanking out the list of arguments. 34124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 34224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 34324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Clear (); 34424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 345b4b4081ade73ef2d35474bee5d249ed8507874b5Greg Clayton static const char * 346b4b4081ade73ef2d35474bee5d249ed8507874b5Greg Clayton StripSpaces (std::string &s, 347b4b4081ade73ef2d35474bee5d249ed8507874b5Greg Clayton bool leading = true, 348b4b4081ade73ef2d35474bee5d249ed8507874b5Greg Clayton bool trailing = true, 349b4b4081ade73ef2d35474bee5d249ed8507874b5Greg Clayton bool return_null_if_empty = true); 350b4b4081ade73ef2d35474bee5d249ed8507874b5Greg Clayton 35124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static int32_t 35224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner StringToSInt32 (const char *s, int32_t fail_value = 0, int base = 0, bool *success_ptr = NULL); 35324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 35424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static uint32_t 35524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner StringToUInt32 (const char *s, uint32_t fail_value = 0, int base = 0, bool *success_ptr = NULL); 35624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 35724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static int64_t 35824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner StringToSInt64 (const char *s, int64_t fail_value = 0, int base = 0, bool *success_ptr = NULL); 35924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 36024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static uint64_t 36124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner StringToUInt64 (const char *s, uint64_t fail_value = 0, int base = 0, bool *success_ptr = NULL); 36224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 363061b79dbf1fefaf157d414747e98a463a0f32edaGreg Clayton static bool 364061b79dbf1fefaf157d414747e98a463a0f32edaGreg Clayton UInt64ValueIsValidForByteSize (uint64_t uval64, size_t total_byte_size) 365061b79dbf1fefaf157d414747e98a463a0f32edaGreg Clayton { 366061b79dbf1fefaf157d414747e98a463a0f32edaGreg Clayton if (total_byte_size > 8) 367061b79dbf1fefaf157d414747e98a463a0f32edaGreg Clayton return false; 368061b79dbf1fefaf157d414747e98a463a0f32edaGreg Clayton 369061b79dbf1fefaf157d414747e98a463a0f32edaGreg Clayton if (total_byte_size == 8) 370061b79dbf1fefaf157d414747e98a463a0f32edaGreg Clayton return true; 371061b79dbf1fefaf157d414747e98a463a0f32edaGreg Clayton 372061b79dbf1fefaf157d414747e98a463a0f32edaGreg Clayton const uint64_t max = ((uint64_t)1 << (uint64_t)(total_byte_size * 8)) - 1; 373061b79dbf1fefaf157d414747e98a463a0f32edaGreg Clayton return uval64 <= max; 374061b79dbf1fefaf157d414747e98a463a0f32edaGreg Clayton } 375061b79dbf1fefaf157d414747e98a463a0f32edaGreg Clayton 376061b79dbf1fefaf157d414747e98a463a0f32edaGreg Clayton static bool 377061b79dbf1fefaf157d414747e98a463a0f32edaGreg Clayton SInt64ValueIsValidForByteSize (int64_t sval64, size_t total_byte_size) 378061b79dbf1fefaf157d414747e98a463a0f32edaGreg Clayton { 379061b79dbf1fefaf157d414747e98a463a0f32edaGreg Clayton if (total_byte_size > 8) 380061b79dbf1fefaf157d414747e98a463a0f32edaGreg Clayton return false; 381061b79dbf1fefaf157d414747e98a463a0f32edaGreg Clayton 382061b79dbf1fefaf157d414747e98a463a0f32edaGreg Clayton if (total_byte_size == 8) 383061b79dbf1fefaf157d414747e98a463a0f32edaGreg Clayton return true; 384061b79dbf1fefaf157d414747e98a463a0f32edaGreg Clayton 385061b79dbf1fefaf157d414747e98a463a0f32edaGreg Clayton const int64_t max = ((int64_t)1 << (uint64_t)(total_byte_size * 8 - 1)) - 1; 386061b79dbf1fefaf157d414747e98a463a0f32edaGreg Clayton const int64_t min = ~(max); 387061b79dbf1fefaf157d414747e98a463a0f32edaGreg Clayton return min <= sval64 && sval64 <= max; 388061b79dbf1fefaf157d414747e98a463a0f32edaGreg Clayton } 389061b79dbf1fefaf157d414747e98a463a0f32edaGreg Clayton 39024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static lldb::addr_t 39149d888d8c3e4de1d2f38d541559f533f1c0bcab3Greg Clayton StringToAddress (const ExecutionContext *exe_ctx, 39249d888d8c3e4de1d2f38d541559f533f1c0bcab3Greg Clayton const char *s, 39349d888d8c3e4de1d2f38d541559f533f1c0bcab3Greg Clayton lldb::addr_t fail_value, 39449d888d8c3e4de1d2f38d541559f533f1c0bcab3Greg Clayton Error *error); 39524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 39624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static bool 39724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner StringToBoolean (const char *s, bool fail_value, bool *success_ptr); 39824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 39936da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton static int64_t 40061aca5dd78f07de66e997d41af521ab9d8c16b89Greg Clayton StringToOptionEnum (const char *s, OptionEnumValueElement *enum_values, int32_t fail_value, Error &error); 40124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 40224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static lldb::ScriptLanguage 40324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner StringToScriptLanguage (const char *s, lldb::ScriptLanguage fail_value, bool *success_ptr); 40424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 40524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static Error 40656bbdaf817cb19a2f133e8501473f499be447c2dGreg Clayton StringToFormat (const char *s, 40756bbdaf817cb19a2f133e8501473f499be447c2dGreg Clayton lldb::Format &format, 40836da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton size_t *byte_size_ptr); // If non-NULL, then a byte size can precede the format character 40924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 41088b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton static lldb::Encoding 41188b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton StringToEncoding (const char *s, 41288b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton lldb::Encoding fail_value = lldb::eEncodingInvalid); 41388b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton 41488b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton static uint32_t 41588b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton StringToGenericRegister (const char *s); 41688b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton 417b1888f24fa181489840b9acf193e224d125d0776Greg Clayton static const char * 418b1888f24fa181489840b9acf193e224d125d0776Greg Clayton StringToVersion (const char *s, uint32_t &major, uint32_t &minor, uint32_t &update); 419b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 420527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton static const char * 421527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton GetShellSafeArgument (const char *unsafe_arg, std::string &safe_arg); 422527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton 4233b1afc6cc5689b749a48a1506f17ca593b1cda42Greg Clayton // EncodeEscapeSequences will change the textual representation of common 4243b1afc6cc5689b749a48a1506f17ca593b1cda42Greg Clayton // escape sequences like "\n" (two characters) into a single '\n'. It does 4253b1afc6cc5689b749a48a1506f17ca593b1cda42Greg Clayton // this for all of the supported escaped sequences and for the \0ooo (octal) 4263b1afc6cc5689b749a48a1506f17ca593b1cda42Greg Clayton // and \xXX (hex). The resulting "dst" string will contain the character 4273b1afc6cc5689b749a48a1506f17ca593b1cda42Greg Clayton // versions of all supported escape sequences. The common supported escape 4283b1afc6cc5689b749a48a1506f17ca593b1cda42Greg Clayton // sequences are: "\a", "\b", "\f", "\n", "\r", "\t", "\v", "\'", "\"", "\\". 4293b1afc6cc5689b749a48a1506f17ca593b1cda42Greg Clayton 4303b1afc6cc5689b749a48a1506f17ca593b1cda42Greg Clayton static void 4313b1afc6cc5689b749a48a1506f17ca593b1cda42Greg Clayton EncodeEscapeSequences (const char *src, std::string &dst); 4323b1afc6cc5689b749a48a1506f17ca593b1cda42Greg Clayton 4333b1afc6cc5689b749a48a1506f17ca593b1cda42Greg Clayton // ExpandEscapeSequences will change a string of possibly non-printable 4343b1afc6cc5689b749a48a1506f17ca593b1cda42Greg Clayton // characters and expand them into text. So '\n' will turn into two chracters 4353b1afc6cc5689b749a48a1506f17ca593b1cda42Greg Clayton // like "\n" which is suitable for human reading. When a character is not 4363b1afc6cc5689b749a48a1506f17ca593b1cda42Greg Clayton // printable and isn't one of the common in escape sequences listed in the 4373b1afc6cc5689b749a48a1506f17ca593b1cda42Greg Clayton // help for EncodeEscapeSequences, then it will be encoded as octal. Printable 4383b1afc6cc5689b749a48a1506f17ca593b1cda42Greg Clayton // characters are left alone. 4393b1afc6cc5689b749a48a1506f17ca593b1cda42Greg Clayton static void 4403b1afc6cc5689b749a48a1506f17ca593b1cda42Greg Clayton ExpandEscapedCharacters (const char *src, std::string &dst); 4413b1afc6cc5689b749a48a1506f17ca593b1cda42Greg Clayton 44224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // This one isn't really relevant to Arguments per se, but we're using the Args as a 44324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // general strings container, so... 44424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 44524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner LongestCommonPrefix (std::string &common_prefix); 44624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 44724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 44824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 44924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Classes that inherit from Args can see and modify these 45024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 45124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner typedef std::list<std::string> arg_sstr_collection; 45224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner typedef std::vector<const char *> arg_cstr_collection; 45324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner typedef std::vector<char> arg_quote_char_collection; 45424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner arg_sstr_collection m_args; 45524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner arg_cstr_collection m_argv; ///< The current argument vector. 45624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner arg_quote_char_collection m_args_quote_char; 45724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 45824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 45924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner UpdateArgsAfterOptionParsing (); 46024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 46124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 46224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner UpdateArgvFromArgs (); 46324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 46424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 46524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private 46624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 46724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // liblldb_Command_h_ 468