2010-06-09 00:52:24 +08:00
//===-- CommandObjectSettings.cpp -------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
# include "CommandObjectSettings.h"
// C Includes
// C++ Includes
// Other libraries and framework includes
// Project includes
# include "lldb/Interpreter/CommandInterpreter.h"
# include "lldb/Interpreter/CommandReturnObject.h"
2010-09-04 08:03:46 +08:00
# include "lldb/Interpreter/CommandCompletions.h"
2010-06-09 00:52:24 +08:00
using namespace lldb ;
using namespace lldb_private ;
//-------------------------------------------------------------------------
2010-09-04 08:03:46 +08:00
// CommandObjectMultiwordSettings
2010-06-09 00:52:24 +08:00
//-------------------------------------------------------------------------
2010-09-04 08:03:46 +08:00
CommandObjectMultiwordSettings : : CommandObjectMultiwordSettings ( CommandInterpreter & interpreter ) :
2010-09-18 09:14:36 +08:00
CommandObjectMultiword ( interpreter ,
" settings " ,
2010-09-04 08:03:46 +08:00
" A set of commands for manipulating internal settable debugger variables. " ,
" settings <command> [<command-options>] " )
2010-06-09 00:52:24 +08:00
{
2010-09-04 08:03:46 +08:00
bool status ;
2010-09-18 09:14:36 +08:00
CommandObjectSP set_command_object ( new CommandObjectSettingsSet ( interpreter ) ) ;
CommandObjectSP show_command_object ( new CommandObjectSettingsShow ( interpreter ) ) ;
CommandObjectSP list_command_object ( new CommandObjectSettingsList ( interpreter ) ) ;
CommandObjectSP remove_command_object ( new CommandObjectSettingsRemove ( interpreter ) ) ;
CommandObjectSP replace_command_object ( new CommandObjectSettingsReplace ( interpreter ) ) ;
CommandObjectSP insert_before_command_object ( new CommandObjectSettingsInsertBefore ( interpreter ) ) ;
CommandObjectSP insert_after_command_object ( new CommandObjectSettingsInsertAfter ( interpreter ) ) ;
CommandObjectSP append_command_object ( new CommandObjectSettingsAppend ( interpreter ) ) ;
CommandObjectSP clear_command_object ( new CommandObjectSettingsClear ( interpreter ) ) ;
status = LoadSubCommand ( " set " , set_command_object ) ;
status = LoadSubCommand ( " show " , show_command_object ) ;
status = LoadSubCommand ( " list " , list_command_object ) ;
status = LoadSubCommand ( " remove " , remove_command_object ) ;
status = LoadSubCommand ( " replace " , replace_command_object ) ;
status = LoadSubCommand ( " insert-before " , insert_before_command_object ) ;
status = LoadSubCommand ( " insert-after " , insert_after_command_object ) ;
status = LoadSubCommand ( " append " , append_command_object ) ;
status = LoadSubCommand ( " clear " , clear_command_object ) ;
2010-09-04 08:03:46 +08:00
}
CommandObjectMultiwordSettings : : ~ CommandObjectMultiwordSettings ( )
{
}
//-------------------------------------------------------------------------
// CommandObjectSettingsSet
//-------------------------------------------------------------------------
2010-09-18 09:14:36 +08:00
CommandObjectSettingsSet : : CommandObjectSettingsSet ( CommandInterpreter & interpreter ) :
CommandObject ( interpreter ,
" settings set " ,
2010-09-09 05:06:11 +08:00
" Set or change the value of a single debugger setting variable. " ,
2010-10-05 06:28:36 +08:00
NULL ) ,
2010-09-04 08:03:46 +08:00
m_options ( )
{
2010-10-05 06:28:36 +08:00
CommandArgumentEntry arg1 ;
CommandArgumentEntry arg2 ;
CommandArgumentData var_name_arg ;
CommandArgumentData value_arg ;
// Define the first (and only) variant of this arg.
var_name_arg . arg_type = eArgTypeSettingVariableName ;
var_name_arg . arg_repetition = eArgRepeatPlain ;
// There is only one variant this argument could be; put it into the argument entry.
arg1 . push_back ( var_name_arg ) ;
// Define the first (and only) variant of this arg.
value_arg . arg_type = eArgTypeValue ;
value_arg . arg_repetition = eArgRepeatPlain ;
// There is only one variant this argument could be; put it into the argument entry.
arg2 . push_back ( value_arg ) ;
// Push the data for the first argument into the m_arguments vector.
m_arguments . push_back ( arg1 ) ;
m_arguments . push_back ( arg2 ) ;
2010-12-10 08:26:54 +08:00
SetHelpLong (
" When setting a dictionary or array variable, you can set multiple entries \n \
at once by giving the values to the set command . For example : \ n \
\ n \
( lldb ) settings set target . process . run - args value1 value2 value3 \ n \
( lldb ) settings set target . process . env - vars [ \ " MYPATH \" ]=~/.:/usr/bin [ \" SOME_ENV_VAR \" ]=12345 \n \
\ n \
( lldb ) settings show target . process . run - args \ n \
[ 0 ] : ' value1 ' \ n \
[ 1 ] : ' value2 ' \ n \
[ 3 ] : ' value3 ' \ n \
( lldb ) settings show target . process . env - vars \ n \
' MYPATH = ~ / . : / usr / bin ' \ n \
' SOME_ENV_VAR = 12345 ' \ n \
\ n \
Note the special syntax for setting a dictionary element : [ \ " <key> \" ]=<value> \n \
\ n \
Warning : The ' set ' command re - sets the entire array or dictionary . If you \ n \
just want to add , remove or update individual values ( or add something to \ n \
the end ) , use one of the other settings sub - commands : append , replace , \ n \
insert - before or insert - after . \ n " );
2010-09-04 08:03:46 +08:00
}
CommandObjectSettingsSet : : ~ CommandObjectSettingsSet ( )
{
}
bool
2010-09-18 09:14:36 +08:00
CommandObjectSettingsSet : : Execute ( Args & command , CommandReturnObject & result )
2010-09-04 08:03:46 +08:00
{
UserSettingsControllerSP root_settings = Debugger : : GetSettingsController ( ) ;
const int argc = command . GetArgumentCount ( ) ;
2010-09-08 02:35:40 +08:00
if ( ( argc < 2 ) & & ( ! m_options . m_reset ) )
2010-09-04 08:03:46 +08:00
{
result . AppendError ( " 'settings set' takes more arguments " ) ;
result . SetStatus ( eReturnStatusFailed ) ;
return false ;
}
const char * var_name = command . GetArgumentAtIndex ( 0 ) ;
std : : string var_name_string ;
if ( ( var_name = = NULL ) | | ( var_name [ 0 ] = = ' \0 ' ) )
{
result . AppendError ( " 'settings set' command requires a valid variable name; No value supplied " ) ;
result . SetStatus ( eReturnStatusFailed ) ;
return false ;
}
var_name_string = var_name ;
command . Shift ( ) ;
const char * var_value ;
std : : string value_string ;
2010-12-10 08:26:54 +08:00
command . GetQuotedCommandString ( value_string ) ;
2010-09-04 08:03:46 +08:00
var_value = value_string . c_str ( ) ;
if ( ! m_options . m_reset
& & var_value = = NULL )
{
result . AppendError ( " 'settings set' command requires a valid variable value unless using '--reset' option; "
" No value supplied " ) ;
result . SetStatus ( eReturnStatusFailed ) ;
}
else
{
2010-09-18 09:14:36 +08:00
Error err = root_settings - > SetVariable ( var_name_string . c_str ( ) ,
var_value ,
lldb : : eVarSetOperationAssign ,
2010-09-09 14:25:08 +08:00
m_options . m_override ,
2010-09-18 09:14:36 +08:00
m_interpreter . GetDebugger ( ) . GetInstanceName ( ) . AsCString ( ) ) ;
2010-09-04 08:03:46 +08:00
if ( err . Fail ( ) )
{
result . AppendError ( err . AsCString ( ) ) ;
result . SetStatus ( eReturnStatusFailed ) ;
}
else
result . SetStatus ( eReturnStatusSuccessFinishNoResult ) ;
}
return result . Succeeded ( ) ;
}
int
2010-09-18 09:14:36 +08:00
CommandObjectSettingsSet : : HandleArgumentCompletion ( Args & input ,
2010-09-04 08:03:46 +08:00
int & cursor_index ,
int & cursor_char_position ,
OptionElementVector & opt_element_vector ,
int match_start_point ,
int max_return_elements ,
bool & word_complete ,
StringList & matches )
{
std : : string completion_str ( input . GetArgumentAtIndex ( cursor_index ) ) ;
completion_str . erase ( cursor_char_position ) ;
// Attempting to complete variable name
if ( cursor_index = = 1 )
2010-09-18 09:14:36 +08:00
CommandCompletions : : InvokeCommonCompletionCallbacks ( m_interpreter ,
2010-09-04 08:03:46 +08:00
CommandCompletions : : eSettingsNameCompletion ,
completion_str . c_str ( ) ,
match_start_point ,
max_return_elements ,
NULL ,
word_complete ,
matches ) ;
// Attempting to complete value
if ( ( cursor_index = = 2 ) // Partly into the variable's value
| | ( cursor_index = = 1 // Or at the end of a completed valid variable name
& & matches . GetSize ( ) = = 1
& & completion_str . compare ( matches . GetStringAtIndex ( 0 ) ) = = 0 ) )
{
matches . Clear ( ) ;
lldb : : UserSettingsControllerSP root_settings = Debugger : : GetSettingsController ( ) ;
if ( cursor_index = = 1 )
{
// The user is at the end of the variable name, which is complete and valid.
UserSettingsController : : CompleteSettingsValue ( root_settings ,
input . GetArgumentAtIndex ( 1 ) , // variable name
NULL , // empty value string
word_complete ,
matches ) ;
}
else
{
// The user is partly into the variable value.
UserSettingsController : : CompleteSettingsValue ( root_settings ,
input . GetArgumentAtIndex ( 1 ) , // variable name
completion_str . c_str ( ) , // partial value string
word_complete ,
matches ) ;
}
}
return matches . GetSize ( ) ;
}
//-------------------------------------------------------------------------
// CommandObjectSettingsSet::CommandOptions
//-------------------------------------------------------------------------
CommandObjectSettingsSet : : CommandOptions : : CommandOptions ( ) :
Options ( ) ,
2010-09-27 08:30:10 +08:00
m_override ( true ) ,
2010-09-04 08:03:46 +08:00
m_reset ( false )
{
}
CommandObjectSettingsSet : : CommandOptions : : ~ CommandOptions ( )
{
}
lldb : : OptionDefinition
CommandObjectSettingsSet : : CommandOptions : : g_option_table [ ] =
{
2010-10-02 03:59:14 +08:00
{ LLDB_OPT_SET_1 , false , " no-override " , ' n ' , no_argument , NULL , NULL , eArgTypeNone , " Prevents already existing instances and pending settings from being assigned this new value. Using this option means that only the default or specified instance setting values will be updated. " } ,
{ LLDB_OPT_SET_2 , false , " reset " , ' r ' , no_argument , NULL , NULL , eArgTypeNone , " Causes value to be reset to the original default for this variable. No value needs to be specified when this option is used. " } ,
{ 0 , false , NULL , 0 , 0 , NULL , 0 , eArgTypeNone , NULL }
2010-09-04 08:03:46 +08:00
} ;
const lldb : : OptionDefinition *
CommandObjectSettingsSet : : CommandOptions : : GetDefinitions ( )
{
return g_option_table ;
}
Error
CommandObjectSettingsSet : : CommandOptions : : SetOptionValue ( int option_idx , const char * option_arg )
{
Error error ;
char short_option = ( char ) m_getopt_table [ option_idx ] . val ;
switch ( short_option )
{
2010-09-27 08:30:10 +08:00
case ' n ' :
m_override = false ;
2010-09-04 08:03:46 +08:00
break ;
case ' r ' :
m_reset = true ;
break ;
default :
error . SetErrorStringWithFormat ( " Unrecognized options '%c'. \n " , short_option ) ;
break ;
}
return error ;
}
void
CommandObjectSettingsSet : : CommandOptions : : ResetOptionValues ( )
{
Options : : ResetOptionValues ( ) ;
2010-09-27 08:30:10 +08:00
m_override = true ;
2010-09-04 08:03:46 +08:00
m_reset = false ;
}
Options *
CommandObjectSettingsSet : : GetOptions ( )
{
return & m_options ;
}
//-------------------------------------------------------------------------
// CommandObjectSettingsShow -- Show current values
//-------------------------------------------------------------------------
2010-09-18 09:14:36 +08:00
CommandObjectSettingsShow : : CommandObjectSettingsShow ( CommandInterpreter & interpreter ) :
CommandObject ( interpreter ,
" settings show " ,
" Show the specified internal debugger setting variable and its value, or show all the currently set variables and their values, if nothing is specified. " ,
2010-10-05 06:28:36 +08:00
NULL )
2010-09-04 08:03:46 +08:00
{
2010-10-05 06:28:36 +08:00
CommandArgumentEntry arg1 ;
CommandArgumentData var_name_arg ;
// Define the first (and only) variant of this arg.
var_name_arg . arg_type = eArgTypeSettingVariableName ;
var_name_arg . arg_repetition = eArgRepeatOptional ;
// There is only one variant this argument could be; put it into the argument entry.
arg1 . push_back ( var_name_arg ) ;
// Push the data for the first argument into the m_arguments vector.
m_arguments . push_back ( arg1 ) ;
2010-09-04 08:03:46 +08:00
}
CommandObjectSettingsShow : : ~ CommandObjectSettingsShow ( )
{
}
bool
2010-09-21 04:44:43 +08:00
CommandObjectSettingsShow : : Execute ( Args & command ,
2010-09-04 08:03:46 +08:00
CommandReturnObject & result )
{
UserSettingsControllerSP root_settings = Debugger : : GetSettingsController ( ) ;
std : : string current_prefix = root_settings - > GetLevelName ( ) . AsCString ( ) ;
Error err ;
if ( command . GetArgumentCount ( ) )
{
// The user requested to see the value of a particular variable.
lldb : : SettableVariableType var_type ;
const char * variable_name = command . GetArgumentAtIndex ( 0 ) ;
2010-09-21 04:44:43 +08:00
StringList value = root_settings - > GetVariable ( variable_name , var_type ,
m_interpreter . GetDebugger ( ) . GetInstanceName ( ) . AsCString ( ) ,
err ) ;
2010-09-04 08:03:46 +08:00
2010-09-21 04:44:43 +08:00
if ( err . Fail ( ) )
2010-09-04 08:03:46 +08:00
{
2010-09-21 04:44:43 +08:00
result . AppendError ( err . AsCString ( ) ) ;
2010-09-04 08:03:46 +08:00
result . SetStatus ( eReturnStatusFailed ) ;
}
else
{
char * type_name = ( char * ) " " ;
if ( var_type ! = eSetVarTypeNone )
{
StreamString tmp_str ;
tmp_str . Printf ( " (%s) " , UserSettingsController : : GetTypeString ( var_type ) ) ;
type_name = ( char * ) tmp_str . GetData ( ) ;
}
2010-09-21 04:44:43 +08:00
if ( value . GetSize ( ) = = 0 )
result . AppendMessageWithFormat ( " %s%s = '' \n " , variable_name , type_name ) ;
2010-12-10 08:26:54 +08:00
else if ( ( var_type ! = lldb : : eSetVarTypeArray ) & & ( var_type ! = lldb : : eSetVarTypeDictionary ) )
2010-09-04 08:03:46 +08:00
result . AppendMessageWithFormat ( " %s%s = '%s' \n " , variable_name , type_name , value . GetStringAtIndex ( 0 ) ) ;
else
{
result . AppendMessageWithFormat ( " %s%s: \n " , variable_name , type_name ) ;
2010-09-09 06:55:31 +08:00
for ( unsigned i = 0 , e = value . GetSize ( ) ; i ! = e ; + + i )
2010-09-04 08:03:46 +08:00
{
2010-12-10 08:26:54 +08:00
if ( var_type = = lldb : : eSetVarTypeArray )
result . AppendMessageWithFormat ( " [%d]: '%s' \n " , i , value . GetStringAtIndex ( i ) ) ;
else if ( var_type = = lldb : : eSetVarTypeDictionary )
result . AppendMessageWithFormat ( " '%s' \n " , value . GetStringAtIndex ( i ) ) ;
2010-09-04 08:03:46 +08:00
}
}
result . SetStatus ( eReturnStatusSuccessFinishNoResult ) ;
}
}
else
{
2010-09-18 09:14:36 +08:00
UserSettingsController : : GetAllVariableValues ( m_interpreter ,
root_settings ,
current_prefix ,
result . GetOutputStream ( ) ,
err ) ;
2010-09-04 08:03:46 +08:00
if ( err . Fail ( ) )
{
result . AppendError ( err . AsCString ( ) ) ;
result . SetStatus ( eReturnStatusFailed ) ;
}
else
{
result . SetStatus ( eReturnStatusSuccessFinishNoResult ) ;
}
}
return result . Succeeded ( ) ;
2010-06-09 00:52:24 +08:00
}
2010-09-04 08:03:46 +08:00
int
2010-09-18 09:14:36 +08:00
CommandObjectSettingsShow : : HandleArgumentCompletion ( Args & input ,
2010-09-04 08:03:46 +08:00
int & cursor_index ,
int & cursor_char_position ,
OptionElementVector & opt_element_vector ,
int match_start_point ,
int max_return_elements ,
bool & word_complete ,
StringList & matches )
{
std : : string completion_str ( input . GetArgumentAtIndex ( cursor_index ) ) ;
completion_str . erase ( cursor_char_position ) ;
2010-09-18 09:14:36 +08:00
CommandCompletions : : InvokeCommonCompletionCallbacks ( m_interpreter ,
2010-09-04 08:03:46 +08:00
CommandCompletions : : eSettingsNameCompletion ,
completion_str . c_str ( ) ,
match_start_point ,
max_return_elements ,
NULL ,
word_complete ,
matches ) ;
return matches . GetSize ( ) ;
}
//-------------------------------------------------------------------------
// CommandObjectSettingsList
//-------------------------------------------------------------------------
2010-09-18 09:14:36 +08:00
CommandObjectSettingsList : : CommandObjectSettingsList ( CommandInterpreter & interpreter ) :
CommandObject ( interpreter ,
" settings list " ,
2010-09-15 14:56:39 +08:00
" List and describe all the internal debugger settings variables that are available to the user to 'set' or 'show', or describe a particular variable or set of variables (by specifying the variable name or a common prefix). " ,
2010-10-05 06:28:36 +08:00
NULL )
2010-09-04 08:03:46 +08:00
{
2010-10-05 06:28:36 +08:00
CommandArgumentEntry arg ;
CommandArgumentData var_name_arg ;
CommandArgumentData prefix_name_arg ;
// Define the first variant of this arg.
var_name_arg . arg_type = eArgTypeSettingVariableName ;
var_name_arg . arg_repetition = eArgRepeatOptional ;
// Define the second variant of this arg.
prefix_name_arg . arg_type = eArgTypeSettingPrefix ;
prefix_name_arg . arg_repetition = eArgRepeatOptional ;
arg . push_back ( var_name_arg ) ;
arg . push_back ( prefix_name_arg ) ;
// Push the data for the first argument into the m_arguments vector.
m_arguments . push_back ( arg ) ;
2010-09-04 08:03:46 +08:00
}
CommandObjectSettingsList : : ~ CommandObjectSettingsList ( )
2010-06-09 00:52:24 +08:00
{
}
bool
2010-09-18 09:14:36 +08:00
CommandObjectSettingsList : : Execute ( Args & command ,
2010-09-15 14:56:39 +08:00
CommandReturnObject & result )
2010-06-09 00:52:24 +08:00
{
2010-09-04 08:03:46 +08:00
UserSettingsControllerSP root_settings = Debugger : : GetSettingsController ( ) ;
std : : string current_prefix = root_settings - > GetLevelName ( ) . AsCString ( ) ;
Error err ;
2010-09-15 14:56:39 +08:00
if ( command . GetArgumentCount ( ) = = 0 )
{
2010-09-18 09:14:36 +08:00
UserSettingsController : : FindAllSettingsDescriptions ( m_interpreter ,
root_settings ,
current_prefix ,
result . GetOutputStream ( ) ,
err ) ;
2010-09-15 14:56:39 +08:00
}
else if ( command . GetArgumentCount ( ) = = 1 )
{
const char * search_name = command . GetArgumentAtIndex ( 0 ) ;
2010-09-18 09:14:36 +08:00
UserSettingsController : : FindSettingsDescriptions ( m_interpreter ,
root_settings ,
current_prefix ,
search_name ,
result . GetOutputStream ( ) ,
err ) ;
2010-09-15 14:56:39 +08:00
}
else
{
result . AppendError ( " Too many aguments for 'settings list' command. \n " ) ;
result . SetStatus ( eReturnStatusFailed ) ;
return false ;
}
2010-06-09 00:52:24 +08:00
2010-09-04 08:03:46 +08:00
if ( err . Fail ( ) )
2010-06-09 00:52:24 +08:00
{
2010-09-04 08:03:46 +08:00
result . AppendError ( err . AsCString ( ) ) ;
2010-06-09 00:52:24 +08:00
result . SetStatus ( eReturnStatusFailed ) ;
}
else
{
result . SetStatus ( eReturnStatusSuccessFinishNoResult ) ;
}
return result . Succeeded ( ) ;
}
2010-09-15 14:56:39 +08:00
int
2010-09-18 09:14:36 +08:00
CommandObjectSettingsList : : HandleArgumentCompletion ( Args & input ,
2010-09-15 14:56:39 +08:00
int & cursor_index ,
int & cursor_char_position ,
OptionElementVector & opt_element_vector ,
int match_start_point ,
int max_return_elements ,
bool & word_complete ,
StringList & matches )
{
std : : string completion_str ( input . GetArgumentAtIndex ( cursor_index ) ) ;
completion_str . erase ( cursor_char_position ) ;
2010-09-18 09:14:36 +08:00
CommandCompletions : : InvokeCommonCompletionCallbacks ( m_interpreter ,
2010-09-15 14:56:39 +08:00
CommandCompletions : : eSettingsNameCompletion ,
completion_str . c_str ( ) ,
match_start_point ,
max_return_elements ,
NULL ,
word_complete ,
matches ) ;
return matches . GetSize ( ) ;
}
2010-09-04 08:03:46 +08:00
//-------------------------------------------------------------------------
// CommandObjectSettingsRemove
//-------------------------------------------------------------------------
2010-09-18 09:14:36 +08:00
CommandObjectSettingsRemove : : CommandObjectSettingsRemove ( CommandInterpreter & interpreter ) :
CommandObject ( interpreter ,
" settings remove " ,
2010-09-09 05:06:11 +08:00
" Remove the specified element from an internal debugger settings array or dictionary variable. " ,
2010-10-05 06:28:36 +08:00
NULL )
2010-09-04 08:03:46 +08:00
{
2010-10-05 06:28:36 +08:00
CommandArgumentEntry arg1 ;
CommandArgumentEntry arg2 ;
CommandArgumentData var_name_arg ;
CommandArgumentData index_arg ;
CommandArgumentData key_arg ;
// Define the first (and only) variant of this arg.
var_name_arg . arg_type = eArgTypeSettingVariableName ;
var_name_arg . arg_repetition = eArgRepeatPlain ;
// There is only one variant this argument could be; put it into the argument entry.
arg1 . push_back ( var_name_arg ) ;
// Define the first variant of this arg.
index_arg . arg_type = eArgTypeSettingIndex ;
index_arg . arg_repetition = eArgRepeatPlain ;
// Define the second variant of this arg.
key_arg . arg_type = eArgTypeSettingKey ;
key_arg . arg_repetition = eArgRepeatPlain ;
// Push both variants into this arg
arg2 . push_back ( index_arg ) ;
arg2 . push_back ( key_arg ) ;
// Push the data for the first argument into the m_arguments vector.
m_arguments . push_back ( arg1 ) ;
m_arguments . push_back ( arg2 ) ;
2010-09-04 08:03:46 +08:00
}
CommandObjectSettingsRemove : : ~ CommandObjectSettingsRemove ( )
{
}
bool
2010-09-18 09:14:36 +08:00
CommandObjectSettingsRemove : : Execute ( Args & command ,
2010-09-04 08:03:46 +08:00
CommandReturnObject & result )
{
UserSettingsControllerSP root_settings = Debugger : : GetSettingsController ( ) ;
const int argc = command . GetArgumentCount ( ) ;
if ( argc ! = 2 )
{
result . AppendError ( " 'settings remove' takes two arguments " ) ;
result . SetStatus ( eReturnStatusFailed ) ;
return false ;
}
const char * var_name = command . GetArgumentAtIndex ( 0 ) ;
std : : string var_name_string ;
if ( ( var_name = = NULL ) | | ( var_name [ 0 ] = = ' \0 ' ) )
{
result . AppendError ( " 'settings remove' command requires a valid variable name; No value supplied " ) ;
result . SetStatus ( eReturnStatusFailed ) ;
return false ;
}
var_name_string = var_name ;
command . Shift ( ) ;
const char * index_value = command . GetArgumentAtIndex ( 0 ) ;
std : : string index_value_string ;
if ( ( index_value = = NULL ) | | ( index_value [ 0 ] = = ' \0 ' ) )
{
result . AppendError ( " 'settings remove' command requires an index or key value; no value supplied " ) ;
result . SetStatus ( eReturnStatusFailed ) ;
return false ;
}
index_value_string = index_value ;
2010-09-18 09:14:36 +08:00
Error err = root_settings - > SetVariable ( var_name_string . c_str ( ) ,
NULL ,
lldb : : eVarSetOperationRemove ,
2010-09-27 08:30:10 +08:00
true ,
2010-09-18 09:14:36 +08:00
m_interpreter . GetDebugger ( ) . GetInstanceName ( ) . AsCString ( ) ,
2010-09-09 14:25:08 +08:00
index_value_string . c_str ( ) ) ;
2010-09-04 08:03:46 +08:00
if ( err . Fail ( ) )
{
result . AppendError ( err . AsCString ( ) ) ;
result . SetStatus ( eReturnStatusFailed ) ;
}
else
result . SetStatus ( eReturnStatusSuccessFinishNoResult ) ;
return result . Succeeded ( ) ;
}
int
2010-09-18 09:14:36 +08:00
CommandObjectSettingsRemove : : HandleArgumentCompletion ( Args & input ,
2010-09-04 08:03:46 +08:00
int & cursor_index ,
int & cursor_char_position ,
OptionElementVector & opt_element_vector ,
int match_start_point ,
int max_return_elements ,
bool & word_complete ,
StringList & matches )
{
std : : string completion_str ( input . GetArgumentAtIndex ( cursor_index ) ) ;
completion_str . erase ( cursor_char_position ) ;
// Attempting to complete variable name
if ( cursor_index < 2 )
2010-09-18 09:14:36 +08:00
CommandCompletions : : InvokeCommonCompletionCallbacks ( m_interpreter ,
2010-09-04 08:03:46 +08:00
CommandCompletions : : eSettingsNameCompletion ,
completion_str . c_str ( ) ,
match_start_point ,
max_return_elements ,
NULL ,
word_complete ,
matches ) ;
return matches . GetSize ( ) ;
}
//-------------------------------------------------------------------------
// CommandObjectSettingsReplace
//-------------------------------------------------------------------------
2010-09-18 09:14:36 +08:00
CommandObjectSettingsReplace : : CommandObjectSettingsReplace ( CommandInterpreter & interpreter ) :
CommandObject ( interpreter ,
" settings replace " ,
2010-09-09 05:06:11 +08:00
" Replace the specified element from an internal debugger settings array or dictionary variable with the specified new value. " ,
2010-10-05 06:28:36 +08:00
NULL )
2010-09-04 08:03:46 +08:00
{
2010-10-05 06:28:36 +08:00
CommandArgumentEntry arg1 ;
CommandArgumentEntry arg2 ;
CommandArgumentEntry arg3 ;
CommandArgumentData var_name_arg ;
CommandArgumentData index_arg ;
CommandArgumentData key_arg ;
CommandArgumentData value_arg ;
// Define the first (and only) variant of this arg.
var_name_arg . arg_type = eArgTypeSettingVariableName ;
var_name_arg . arg_repetition = eArgRepeatPlain ;
// There is only one variant this argument could be; put it into the argument entry.
arg1 . push_back ( var_name_arg ) ;
// Define the first (variant of this arg.
index_arg . arg_type = eArgTypeSettingIndex ;
index_arg . arg_repetition = eArgRepeatPlain ;
// Define the second (variant of this arg.
key_arg . arg_type = eArgTypeSettingKey ;
key_arg . arg_repetition = eArgRepeatPlain ;
// Put both variants into this arg
arg2 . push_back ( index_arg ) ;
arg2 . push_back ( key_arg ) ;
// Define the first (and only) variant of this arg.
value_arg . arg_type = eArgTypeValue ;
value_arg . arg_repetition = eArgRepeatPlain ;
// There is only one variant this argument could be; put it into the argument entry.
arg3 . push_back ( value_arg ) ;
// Push the data for the first argument into the m_arguments vector.
m_arguments . push_back ( arg1 ) ;
m_arguments . push_back ( arg2 ) ;
m_arguments . push_back ( arg3 ) ;
2010-09-04 08:03:46 +08:00
}
CommandObjectSettingsReplace : : ~ CommandObjectSettingsReplace ( )
{
}
bool
2010-09-18 09:14:36 +08:00
CommandObjectSettingsReplace : : Execute ( Args & command ,
2010-09-04 08:03:46 +08:00
CommandReturnObject & result )
{
UserSettingsControllerSP root_settings = Debugger : : GetSettingsController ( ) ;
const int argc = command . GetArgumentCount ( ) ;
if ( argc < 3 )
{
result . AppendError ( " 'settings replace' takes more arguments " ) ;
result . SetStatus ( eReturnStatusFailed ) ;
return false ;
}
const char * var_name = command . GetArgumentAtIndex ( 0 ) ;
std : : string var_name_string ;
if ( ( var_name = = NULL ) | | ( var_name [ 0 ] = = ' \0 ' ) )
{
result . AppendError ( " 'settings replace' command requires a valid variable name; No value supplied " ) ;
result . SetStatus ( eReturnStatusFailed ) ;
return false ;
}
var_name_string = var_name ;
command . Shift ( ) ;
const char * index_value = command . GetArgumentAtIndex ( 0 ) ;
std : : string index_value_string ;
if ( ( index_value = = NULL ) | | ( index_value [ 0 ] = = ' \0 ' ) )
{
result . AppendError ( " 'settings insert-before' command requires an index value; no value supplied " ) ;
result . SetStatus ( eReturnStatusFailed ) ;
return false ;
}
index_value_string = index_value ;
command . Shift ( ) ;
const char * var_value ;
std : : string value_string ;
2010-12-10 08:26:54 +08:00
command . GetQuotedCommandString ( value_string ) ;
2010-09-04 08:03:46 +08:00
var_value = value_string . c_str ( ) ;
if ( ( var_value = = NULL ) | | ( var_value [ 0 ] = = ' \0 ' ) )
{
result . AppendError ( " 'settings replace' command requires a valid variable value; no value supplied " ) ;
result . SetStatus ( eReturnStatusFailed ) ;
}
else
{
2010-09-18 09:14:36 +08:00
Error err = root_settings - > SetVariable ( var_name_string . c_str ( ) ,
var_value ,
lldb : : eVarSetOperationReplace ,
2010-09-27 08:30:10 +08:00
true ,
2010-09-18 09:14:36 +08:00
m_interpreter . GetDebugger ( ) . GetInstanceName ( ) . AsCString ( ) ,
2010-09-09 14:25:08 +08:00
index_value_string . c_str ( ) ) ;
2010-09-04 08:03:46 +08:00
if ( err . Fail ( ) )
{
result . AppendError ( err . AsCString ( ) ) ;
result . SetStatus ( eReturnStatusFailed ) ;
}
else
result . SetStatus ( eReturnStatusSuccessFinishNoResult ) ;
}
return result . Succeeded ( ) ;
}
int
2010-09-18 09:14:36 +08:00
CommandObjectSettingsReplace : : HandleArgumentCompletion ( Args & input ,
2010-09-04 08:03:46 +08:00
int & cursor_index ,
int & cursor_char_position ,
OptionElementVector & opt_element_vector ,
int match_start_point ,
int max_return_elements ,
bool & word_complete ,
StringList & matches )
{
std : : string completion_str ( input . GetArgumentAtIndex ( cursor_index ) ) ;
completion_str . erase ( cursor_char_position ) ;
// Attempting to complete variable name
if ( cursor_index < 2 )
2010-09-18 09:14:36 +08:00
CommandCompletions : : InvokeCommonCompletionCallbacks ( m_interpreter ,
2010-09-04 08:03:46 +08:00
CommandCompletions : : eSettingsNameCompletion ,
completion_str . c_str ( ) ,
match_start_point ,
max_return_elements ,
NULL ,
word_complete ,
matches ) ;
return matches . GetSize ( ) ;
}
//-------------------------------------------------------------------------
// CommandObjectSettingsInsertBefore
//-------------------------------------------------------------------------
2010-09-18 09:14:36 +08:00
CommandObjectSettingsInsertBefore : : CommandObjectSettingsInsertBefore ( CommandInterpreter & interpreter ) :
CommandObject ( interpreter ,
" settings insert-before " ,
2010-09-09 05:06:11 +08:00
" Insert value(s) into an internal debugger settings array variable, immediately before the specified element. " ,
2010-10-05 06:28:36 +08:00
NULL )
2010-09-04 08:03:46 +08:00
{
2010-10-05 06:28:36 +08:00
CommandArgumentEntry arg1 ;
CommandArgumentEntry arg2 ;
CommandArgumentEntry arg3 ;
CommandArgumentData var_name_arg ;
CommandArgumentData index_arg ;
CommandArgumentData value_arg ;
// Define the first (and only) variant of this arg.
var_name_arg . arg_type = eArgTypeSettingVariableName ;
var_name_arg . arg_repetition = eArgRepeatPlain ;
// There is only one variant this argument could be; put it into the argument entry.
arg1 . push_back ( var_name_arg ) ;
// Define the first (variant of this arg.
index_arg . arg_type = eArgTypeSettingIndex ;
index_arg . arg_repetition = eArgRepeatPlain ;
// There is only one variant this argument could be; put it into the argument entry.
arg2 . push_back ( index_arg ) ;
// Define the first (and only) variant of this arg.
value_arg . arg_type = eArgTypeValue ;
value_arg . arg_repetition = eArgRepeatPlain ;
// There is only one variant this argument could be; put it into the argument entry.
arg3 . push_back ( value_arg ) ;
// Push the data for the first argument into the m_arguments vector.
m_arguments . push_back ( arg1 ) ;
m_arguments . push_back ( arg2 ) ;
m_arguments . push_back ( arg3 ) ;
2010-09-04 08:03:46 +08:00
}
CommandObjectSettingsInsertBefore : : ~ CommandObjectSettingsInsertBefore ( )
{
}
bool
2010-09-18 09:14:36 +08:00
CommandObjectSettingsInsertBefore : : Execute ( Args & command ,
2010-09-04 08:03:46 +08:00
CommandReturnObject & result )
{
UserSettingsControllerSP root_settings = Debugger : : GetSettingsController ( ) ;
const int argc = command . GetArgumentCount ( ) ;
if ( argc < 3 )
{
result . AppendError ( " 'settings insert-before' takes more arguments " ) ;
result . SetStatus ( eReturnStatusFailed ) ;
return false ;
}
const char * var_name = command . GetArgumentAtIndex ( 0 ) ;
std : : string var_name_string ;
if ( ( var_name = = NULL ) | | ( var_name [ 0 ] = = ' \0 ' ) )
{
result . AppendError ( " 'settings insert-before' command requires a valid variable name; No value supplied " ) ;
result . SetStatus ( eReturnStatusFailed ) ;
return false ;
}
var_name_string = var_name ;
command . Shift ( ) ;
const char * index_value = command . GetArgumentAtIndex ( 0 ) ;
std : : string index_value_string ;
if ( ( index_value = = NULL ) | | ( index_value [ 0 ] = = ' \0 ' ) )
{
result . AppendError ( " 'settings insert-before' command requires an index value; no value supplied " ) ;
result . SetStatus ( eReturnStatusFailed ) ;
return false ;
}
index_value_string = index_value ;
command . Shift ( ) ;
const char * var_value ;
std : : string value_string ;
2010-12-10 08:26:54 +08:00
command . GetQuotedCommandString ( value_string ) ;
2010-09-04 08:03:46 +08:00
var_value = value_string . c_str ( ) ;
if ( ( var_value = = NULL ) | | ( var_value [ 0 ] = = ' \0 ' ) )
{
result . AppendError ( " 'settings insert-before' command requires a valid variable value; "
" No value supplied " ) ;
result . SetStatus ( eReturnStatusFailed ) ;
}
else
{
2010-09-18 09:14:36 +08:00
Error err = root_settings - > SetVariable ( var_name_string . c_str ( ) ,
var_value ,
lldb : : eVarSetOperationInsertBefore ,
2010-09-27 08:30:10 +08:00
true ,
2010-09-18 09:14:36 +08:00
m_interpreter . GetDebugger ( ) . GetInstanceName ( ) . AsCString ( ) ,
2010-09-09 14:25:08 +08:00
index_value_string . c_str ( ) ) ;
2010-09-04 08:03:46 +08:00
if ( err . Fail ( ) )
{
result . AppendError ( err . AsCString ( ) ) ;
result . SetStatus ( eReturnStatusFailed ) ;
}
else
result . SetStatus ( eReturnStatusSuccessFinishNoResult ) ;
}
return result . Succeeded ( ) ;
}
int
2010-09-18 09:14:36 +08:00
CommandObjectSettingsInsertBefore : : HandleArgumentCompletion ( Args & input ,
2010-09-04 08:03:46 +08:00
int & cursor_index ,
int & cursor_char_position ,
OptionElementVector & opt_element_vector ,
int match_start_point ,
int max_return_elements ,
bool & word_complete ,
StringList & matches )
{
std : : string completion_str ( input . GetArgumentAtIndex ( cursor_index ) ) ;
completion_str . erase ( cursor_char_position ) ;
// Attempting to complete variable name
if ( cursor_index < 2 )
2010-09-18 09:14:36 +08:00
CommandCompletions : : InvokeCommonCompletionCallbacks ( m_interpreter ,
2010-09-04 08:03:46 +08:00
CommandCompletions : : eSettingsNameCompletion ,
completion_str . c_str ( ) ,
match_start_point ,
max_return_elements ,
NULL ,
word_complete ,
matches ) ;
return matches . GetSize ( ) ;
}
//-------------------------------------------------------------------------
// CommandObjectSettingInsertAfter
//-------------------------------------------------------------------------
2010-09-18 09:14:36 +08:00
CommandObjectSettingsInsertAfter : : CommandObjectSettingsInsertAfter ( CommandInterpreter & interpreter ) :
CommandObject ( interpreter ,
" settings insert-after " ,
2010-09-09 05:06:11 +08:00
" Insert value(s) into an internal debugger settings array variable, immediately after the specified element. " ,
2010-10-05 06:28:36 +08:00
NULL )
2010-09-04 08:03:46 +08:00
{
2010-10-05 06:28:36 +08:00
CommandArgumentEntry arg1 ;
CommandArgumentEntry arg2 ;
CommandArgumentEntry arg3 ;
CommandArgumentData var_name_arg ;
CommandArgumentData index_arg ;
CommandArgumentData value_arg ;
// Define the first (and only) variant of this arg.
var_name_arg . arg_type = eArgTypeSettingVariableName ;
var_name_arg . arg_repetition = eArgRepeatPlain ;
// There is only one variant this argument could be; put it into the argument entry.
arg1 . push_back ( var_name_arg ) ;
// Define the first (variant of this arg.
index_arg . arg_type = eArgTypeSettingIndex ;
index_arg . arg_repetition = eArgRepeatPlain ;
// There is only one variant this argument could be; put it into the argument entry.
arg2 . push_back ( index_arg ) ;
// Define the first (and only) variant of this arg.
value_arg . arg_type = eArgTypeValue ;
value_arg . arg_repetition = eArgRepeatPlain ;
// There is only one variant this argument could be; put it into the argument entry.
arg3 . push_back ( value_arg ) ;
// Push the data for the first argument into the m_arguments vector.
m_arguments . push_back ( arg1 ) ;
m_arguments . push_back ( arg2 ) ;
m_arguments . push_back ( arg3 ) ;
2010-09-04 08:03:46 +08:00
}
CommandObjectSettingsInsertAfter : : ~ CommandObjectSettingsInsertAfter ( )
{
}
bool
2010-09-18 09:14:36 +08:00
CommandObjectSettingsInsertAfter : : Execute ( Args & command ,
2010-09-04 08:03:46 +08:00
CommandReturnObject & result )
{
UserSettingsControllerSP root_settings = Debugger : : GetSettingsController ( ) ;
const int argc = command . GetArgumentCount ( ) ;
if ( argc < 3 )
{
result . AppendError ( " 'settings insert-after' takes more arguments " ) ;
result . SetStatus ( eReturnStatusFailed ) ;
return false ;
}
const char * var_name = command . GetArgumentAtIndex ( 0 ) ;
std : : string var_name_string ;
if ( ( var_name = = NULL ) | | ( var_name [ 0 ] = = ' \0 ' ) )
{
result . AppendError ( " 'settings insert-after' command requires a valid variable name; No value supplied " ) ;
result . SetStatus ( eReturnStatusFailed ) ;
return false ;
}
var_name_string = var_name ;
command . Shift ( ) ;
const char * index_value = command . GetArgumentAtIndex ( 0 ) ;
std : : string index_value_string ;
if ( ( index_value = = NULL ) | | ( index_value [ 0 ] = = ' \0 ' ) )
{
result . AppendError ( " 'settings insert-after' command requires an index value; no value supplied " ) ;
result . SetStatus ( eReturnStatusFailed ) ;
return false ;
}
index_value_string = index_value ;
command . Shift ( ) ;
const char * var_value ;
std : : string value_string ;
2010-12-10 08:26:54 +08:00
command . GetQuotedCommandString ( value_string ) ;
2010-09-04 08:03:46 +08:00
var_value = value_string . c_str ( ) ;
if ( ( var_value = = NULL ) | | ( var_value [ 0 ] = = ' \0 ' ) )
{
result . AppendError ( " 'settings insert-after' command requires a valid variable value; "
" No value supplied " ) ;
result . SetStatus ( eReturnStatusFailed ) ;
}
else
{
2010-09-18 09:14:36 +08:00
Error err = root_settings - > SetVariable ( var_name_string . c_str ( ) ,
var_value ,
lldb : : eVarSetOperationInsertAfter ,
2010-09-27 08:30:10 +08:00
true ,
2010-09-18 09:14:36 +08:00
m_interpreter . GetDebugger ( ) . GetInstanceName ( ) . AsCString ( ) ,
2010-09-09 14:25:08 +08:00
index_value_string . c_str ( ) ) ;
2010-09-04 08:03:46 +08:00
if ( err . Fail ( ) )
{
result . AppendError ( err . AsCString ( ) ) ;
result . SetStatus ( eReturnStatusFailed ) ;
}
else
result . SetStatus ( eReturnStatusSuccessFinishNoResult ) ;
}
return result . Succeeded ( ) ;
}
int
2010-09-18 09:14:36 +08:00
CommandObjectSettingsInsertAfter : : HandleArgumentCompletion ( Args & input ,
2010-09-04 08:03:46 +08:00
int & cursor_index ,
int & cursor_char_position ,
OptionElementVector & opt_element_vector ,
int match_start_point ,
int max_return_elements ,
bool & word_complete ,
StringList & matches )
{
std : : string completion_str ( input . GetArgumentAtIndex ( cursor_index ) ) ;
completion_str . erase ( cursor_char_position ) ;
// Attempting to complete variable name
if ( cursor_index < 2 )
2010-09-18 09:14:36 +08:00
CommandCompletions : : InvokeCommonCompletionCallbacks ( m_interpreter ,
2010-09-04 08:03:46 +08:00
CommandCompletions : : eSettingsNameCompletion ,
completion_str . c_str ( ) ,
match_start_point ,
max_return_elements ,
NULL ,
word_complete ,
matches ) ;
return matches . GetSize ( ) ;
}
//-------------------------------------------------------------------------
// CommandObjectSettingsAppend
//-------------------------------------------------------------------------
2010-09-18 09:14:36 +08:00
CommandObjectSettingsAppend : : CommandObjectSettingsAppend ( CommandInterpreter & interpreter ) :
CommandObject ( interpreter ,
" settings append " ,
2010-09-09 05:06:11 +08:00
" Append a new value to the end of an internal debugger settings array, dictionary or string variable. " ,
2010-10-05 06:28:36 +08:00
NULL )
2010-09-04 08:03:46 +08:00
{
2010-10-05 06:28:36 +08:00
CommandArgumentEntry arg1 ;
CommandArgumentEntry arg2 ;
CommandArgumentData var_name_arg ;
CommandArgumentData value_arg ;
// Define the first (and only) variant of this arg.
var_name_arg . arg_type = eArgTypeSettingVariableName ;
var_name_arg . arg_repetition = eArgRepeatPlain ;
// There is only one variant this argument could be; put it into the argument entry.
arg1 . push_back ( var_name_arg ) ;
// Define the first (and only) variant of this arg.
value_arg . arg_type = eArgTypeValue ;
value_arg . arg_repetition = eArgRepeatPlain ;
// There is only one variant this argument could be; put it into the argument entry.
arg2 . push_back ( value_arg ) ;
// Push the data for the first argument into the m_arguments vector.
m_arguments . push_back ( arg1 ) ;
m_arguments . push_back ( arg2 ) ;
2010-09-04 08:03:46 +08:00
}
CommandObjectSettingsAppend : : ~ CommandObjectSettingsAppend ( )
{
}
bool
2010-09-27 08:30:10 +08:00
CommandObjectSettingsAppend : : Execute ( Args & command ,
CommandReturnObject & result )
2010-09-04 08:03:46 +08:00
{
UserSettingsControllerSP root_settings = Debugger : : GetSettingsController ( ) ;
const int argc = command . GetArgumentCount ( ) ;
if ( argc < 2 )
{
result . AppendError ( " 'settings append' takes more arguments " ) ;
result . SetStatus ( eReturnStatusFailed ) ;
return false ;
}
const char * var_name = command . GetArgumentAtIndex ( 0 ) ;
std : : string var_name_string ;
if ( ( var_name = = NULL ) | | ( var_name [ 0 ] = = ' \0 ' ) )
{
result . AppendError ( " 'settings append' command requires a valid variable name; No value supplied " ) ;
result . SetStatus ( eReturnStatusFailed ) ;
return false ;
}
var_name_string = var_name ;
command . Shift ( ) ;
const char * var_value ;
std : : string value_string ;
2010-12-10 08:26:54 +08:00
command . GetQuotedCommandString ( value_string ) ;
2010-09-04 08:03:46 +08:00
var_value = value_string . c_str ( ) ;
if ( ( var_value = = NULL ) | | ( var_value [ 0 ] = = ' \0 ' ) )
{
result . AppendError ( " 'settings append' command requires a valid variable value; "
" No value supplied " ) ;
result . SetStatus ( eReturnStatusFailed ) ;
}
else
{
2010-09-18 09:14:36 +08:00
Error err = root_settings - > SetVariable ( var_name_string . c_str ( ) ,
var_value ,
lldb : : eVarSetOperationAppend ,
2010-09-27 08:30:10 +08:00
true ,
2010-09-18 09:14:36 +08:00
m_interpreter . GetDebugger ( ) . GetInstanceName ( ) . AsCString ( ) ) ;
2010-09-04 08:03:46 +08:00
if ( err . Fail ( ) )
{
result . AppendError ( err . AsCString ( ) ) ;
result . SetStatus ( eReturnStatusFailed ) ;
}
else
result . SetStatus ( eReturnStatusSuccessFinishNoResult ) ;
}
return result . Succeeded ( ) ;
}
int
2010-09-18 09:14:36 +08:00
CommandObjectSettingsAppend : : HandleArgumentCompletion ( Args & input ,
2010-09-04 08:03:46 +08:00
int & cursor_index ,
int & cursor_char_position ,
OptionElementVector & opt_element_vector ,
int match_start_point ,
int max_return_elements ,
bool & word_complete ,
StringList & matches )
{
std : : string completion_str ( input . GetArgumentAtIndex ( cursor_index ) ) ;
completion_str . erase ( cursor_char_position ) ;
// Attempting to complete variable name
if ( cursor_index < 2 )
2010-09-18 09:14:36 +08:00
CommandCompletions : : InvokeCommonCompletionCallbacks ( m_interpreter ,
2010-09-04 08:03:46 +08:00
CommandCompletions : : eSettingsNameCompletion ,
completion_str . c_str ( ) ,
match_start_point ,
max_return_elements ,
NULL ,
word_complete ,
matches ) ;
return matches . GetSize ( ) ;
}
//-------------------------------------------------------------------------
// CommandObjectSettingsClear
//-------------------------------------------------------------------------
2010-09-18 09:14:36 +08:00
CommandObjectSettingsClear : : CommandObjectSettingsClear ( CommandInterpreter & interpreter ) :
CommandObject ( interpreter ,
" settings clear " ,
2010-09-09 05:06:11 +08:00
" Erase all the contents of an internal debugger settings variables; this is only valid for variables with clearable types, i.e. strings, arrays or dictionaries. " ,
2010-10-05 06:28:36 +08:00
NULL )
2010-09-04 08:03:46 +08:00
{
2010-10-05 06:28:36 +08:00
CommandArgumentEntry arg ;
CommandArgumentData var_name_arg ;
// Define the first (and only) variant of this arg.
var_name_arg . arg_type = eArgTypeSettingVariableName ;
var_name_arg . arg_repetition = eArgRepeatPlain ;
// There is only one variant this argument could be; put it into the argument entry.
arg . push_back ( var_name_arg ) ;
// Push the data for the first argument into the m_arguments vector.
m_arguments . push_back ( arg ) ;
2010-09-04 08:03:46 +08:00
}
CommandObjectSettingsClear : : ~ CommandObjectSettingsClear ( )
{
}
bool
2010-09-18 09:14:36 +08:00
CommandObjectSettingsClear : : Execute ( Args & command ,
2010-09-04 08:03:46 +08:00
CommandReturnObject & result )
{
UserSettingsControllerSP root_settings = Debugger : : GetSettingsController ( ) ;
const int argc = command . GetArgumentCount ( ) ;
if ( argc ! = 1 )
{
result . AppendError ( " 'setttings clear' takes exactly one argument " ) ;
result . SetStatus ( eReturnStatusFailed ) ;
return false ;
}
const char * var_name = command . GetArgumentAtIndex ( 0 ) ;
if ( ( var_name = = NULL ) | | ( var_name [ 0 ] = = ' \0 ' ) )
{
result . AppendError ( " 'settings clear' command requires a valid variable name; No value supplied " ) ;
result . SetStatus ( eReturnStatusFailed ) ;
return false ;
}
2010-09-18 09:14:36 +08:00
Error err = root_settings - > SetVariable ( var_name ,
NULL ,
lldb : : eVarSetOperationClear ,
false ,
m_interpreter . GetDebugger ( ) . GetInstanceName ( ) . AsCString ( ) ) ;
2010-09-04 08:03:46 +08:00
if ( err . Fail ( ) )
{
result . AppendError ( err . AsCString ( ) ) ;
result . SetStatus ( eReturnStatusFailed ) ;
}
else
result . SetStatus ( eReturnStatusSuccessFinishNoResult ) ;
return result . Succeeded ( ) ;
}
int
2010-09-18 09:14:36 +08:00
CommandObjectSettingsClear : : HandleArgumentCompletion ( Args & input ,
2010-09-04 08:03:46 +08:00
int & cursor_index ,
int & cursor_char_position ,
OptionElementVector & opt_element_vector ,
int match_start_point ,
int max_return_elements ,
bool & word_complete ,
StringList & matches )
{
std : : string completion_str ( input . GetArgumentAtIndex ( cursor_index ) ) ;
completion_str . erase ( cursor_char_position ) ;
// Attempting to complete variable name
if ( cursor_index < 2 )
2010-09-18 09:14:36 +08:00
CommandCompletions : : InvokeCommonCompletionCallbacks ( m_interpreter ,
2010-09-04 08:03:46 +08:00
CommandCompletions : : eSettingsNameCompletion ,
completion_str . c_str ( ) ,
match_start_point ,
max_return_elements ,
NULL ,
word_complete ,
matches ) ;
return matches . GetSize ( ) ;
}