2011-04-28 06:04:39 +08:00
//===-- OptionGroupValueObjectDisplay.cpp -----------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
2012-12-05 08:20:57 +08:00
# include "lldb/lldb-python.h"
2011-05-14 04:21:08 +08:00
# include "lldb/Interpreter/OptionGroupValueObjectDisplay.h"
2011-04-28 06:04:39 +08:00
// C Includes
// C++ Includes
// Other libraries and framework includes
// Project includes
2011-05-04 11:43:18 +08:00
# include "lldb/Target/Target.h"
# include "lldb/Interpreter/CommandInterpreter.h"
2011-09-10 08:48:33 +08:00
# include "lldb/Utility/Utils.h"
2011-04-28 06:04:39 +08:00
using namespace lldb ;
using namespace lldb_private ;
OptionGroupValueObjectDisplay : : OptionGroupValueObjectDisplay ( )
{
}
OptionGroupValueObjectDisplay : : ~ OptionGroupValueObjectDisplay ( )
{
}
2011-04-29 04:55:26 +08:00
static OptionDefinition
2011-04-28 06:04:39 +08:00
g_option_table [ ] =
{
2012-12-12 11:23:37 +08:00
{ LLDB_OPT_SET_1 , false , " dynamic-type " , ' d ' , required_argument , g_dynamic_value_types , 0 , eArgTypeNone , " Show the object as its full dynamic type, not its static type, if available. " } ,
{ LLDB_OPT_SET_1 , false , " synthetic-type " , ' S ' , required_argument , NULL , 0 , eArgTypeBoolean , " Show the object obeying its synthetic provider, if available. " } ,
{ LLDB_OPT_SET_1 , false , " depth " , ' D ' , required_argument , NULL , 0 , eArgTypeCount , " Set the max recurse depth when dumping aggregate types (default is infinity). " } ,
{ LLDB_OPT_SET_1 , false , " flat " , ' F ' , no_argument , NULL , 0 , eArgTypeNone , " Display results in a flat format that uses expression paths for each variable or member. " } ,
{ LLDB_OPT_SET_1 , false , " location " , ' L ' , no_argument , NULL , 0 , eArgTypeNone , " Show variable location information. " } ,
{ LLDB_OPT_SET_1 , false , " object-description " , ' O ' , no_argument , NULL , 0 , eArgTypeNone , " Print as an Objective-C object. " } ,
{ LLDB_OPT_SET_1 , false , " ptr-depth " , ' P ' , required_argument , NULL , 0 , eArgTypeCount , " The number of pointers to be traversed when dumping values (default is zero). " } ,
{ LLDB_OPT_SET_1 , false , " show-types " , ' T ' , no_argument , NULL , 0 , eArgTypeNone , " Show variable types when dumping values. " } ,
{ LLDB_OPT_SET_1 , false , " no-summary-depth " , ' Y ' , optional_argument , NULL , 0 , eArgTypeCount , " Set the depth at which omitting summary information stops (default is 1). " } ,
{ LLDB_OPT_SET_1 , false , " raw-output " , ' R ' , no_argument , NULL , 0 , eArgTypeNone , " Don't use formatting options. " } ,
{ LLDB_OPT_SET_1 , false , " show-all-children " , ' A ' , no_argument , NULL , 0 , eArgTypeNone , " Ignore the upper bound on the number of children to show. " } ,
2012-09-12 02:11:07 +08:00
{ 0 , false , NULL , 0 , 0 , NULL , 0 , eArgTypeNone , NULL }
2011-04-28 06:04:39 +08:00
} ;
uint32_t
OptionGroupValueObjectDisplay : : GetNumDefinitions ( )
{
2012-05-16 07:21:36 +08:00
return llvm : : array_lengthof ( g_option_table ) ;
2011-04-28 06:04:39 +08:00
}
const OptionDefinition *
OptionGroupValueObjectDisplay : : GetDefinitions ( )
{
return g_option_table ;
}
Error
OptionGroupValueObjectDisplay : : SetOptionValue ( CommandInterpreter & interpreter ,
uint32_t option_idx ,
const char * option_arg )
{
Error error ;
2012-12-04 08:32:51 +08:00
const int short_option = g_option_table [ option_idx ] . short_option ;
2011-04-28 06:04:39 +08:00
bool success = false ;
switch ( short_option )
{
2011-05-04 11:43:18 +08:00
case ' d ' :
{
int32_t result ;
2012-08-23 01:17:09 +08:00
result = Args : : StringToOptionEnum ( option_arg , g_dynamic_value_types , 2 , error ) ;
2011-10-08 02:58:12 +08:00
if ( error . Success ( ) )
2011-05-04 11:43:18 +08:00
use_dynamic = ( lldb : : DynamicValueType ) result ;
}
break ;
2011-04-29 04:55:26 +08:00
case ' T ' : show_types = true ; break ;
2011-04-28 06:04:39 +08:00
case ' L ' : show_location = true ; break ;
case ' F ' : flat_output = true ; break ;
2011-08-10 07:50:01 +08:00
case ' O ' : use_objc = true ; break ;
case ' R ' : be_raw = true ; break ;
2011-08-12 10:00:06 +08:00
case ' A ' : ignore_cap = true ; break ;
2011-08-10 07:50:01 +08:00
2011-04-29 04:55:26 +08:00
case ' D ' :
2011-04-28 06:04:39 +08:00
max_depth = Args : : StringToUInt32 ( option_arg , UINT32_MAX , 0 , & success ) ;
if ( ! success )
2011-10-26 08:56:27 +08:00
error . SetErrorStringWithFormat ( " invalid max depth '%s' " , option_arg ) ;
2011-04-28 06:04:39 +08:00
break ;
2011-04-29 04:55:26 +08:00
case ' P ' :
2011-04-28 06:04:39 +08:00
ptr_depth = Args : : StringToUInt32 ( option_arg , 0 , 0 , & success ) ;
if ( ! success )
2011-10-26 08:56:27 +08:00
error . SetErrorStringWithFormat ( " invalid pointer depth '%s' " , option_arg ) ;
2011-04-28 06:04:39 +08:00
break ;
2011-07-16 09:22:04 +08:00
case ' Y ' :
if ( option_arg )
{
no_summary_depth = Args : : StringToUInt32 ( option_arg , 0 , 0 , & success ) ;
if ( ! success )
2011-10-26 08:56:27 +08:00
error . SetErrorStringWithFormat ( " invalid pointer depth '%s' " , option_arg ) ;
2011-07-16 09:22:04 +08:00
}
else
no_summary_depth = 1 ;
break ;
2011-07-22 08:16:08 +08:00
case ' S ' :
use_synth = Args : : StringToBoolean ( option_arg , true , & success ) ;
if ( ! success )
2011-10-26 08:56:27 +08:00
error . SetErrorStringWithFormat ( " invalid synthetic-type '%s' " , option_arg ) ;
2011-07-22 08:16:08 +08:00
break ;
2011-04-28 06:04:39 +08:00
default :
2011-10-26 08:56:27 +08:00
error . SetErrorStringWithFormat ( " unrecognized option '%c' " , short_option ) ;
2011-04-28 06:04:39 +08:00
break ;
}
return error ;
}
void
OptionGroupValueObjectDisplay : : OptionParsingStarting ( CommandInterpreter & interpreter )
{
2011-10-26 12:32:38 +08:00
// If these defaults change, be sure to modify AnyOptionWasSet().
2011-07-16 09:22:04 +08:00
show_types = false ;
no_summary_depth = 0 ;
show_location = false ;
flat_output = false ;
use_objc = false ;
max_depth = UINT32_MAX ;
ptr_depth = 0 ;
2011-07-22 08:16:08 +08:00
use_synth = true ;
2011-08-10 07:50:01 +08:00
be_raw = false ;
2011-08-12 10:00:06 +08:00
ignore_cap = false ;
2011-05-04 11:43:18 +08:00
2011-09-22 12:58:26 +08:00
Target * target = interpreter . GetExecutionContext ( ) . GetTargetPtr ( ) ;
2011-05-04 11:43:18 +08:00
if ( target ! = NULL )
use_dynamic = target - > GetPreferDynamicValue ( ) ;
else
{
// If we don't have any targets, then dynamic values won't do us much good.
use_dynamic = lldb : : eNoDynamicValues ;
}
2011-05-14 04:21:08 +08:00
}
2013-03-27 02:04:53 +08:00
ValueObject : : DumpValueObjectOptions
OptionGroupValueObjectDisplay : : GetAsDumpOptions ( bool objc_is_compact ,
lldb : : Format format ,
lldb : : TypeSummaryImplSP summary_sp )
{
ValueObject : : DumpValueObjectOptions options ;
options . SetMaximumPointerDepth ( ptr_depth ) ;
if ( use_objc )
options . SetShowSummary ( false ) ;
else
options . SetOmitSummaryDepth ( no_summary_depth ) ;
options . SetMaximumDepth ( max_depth )
. SetShowTypes ( show_types )
. SetShowLocation ( show_location )
. SetUseObjectiveC ( use_objc )
. SetUseDynamicType ( use_dynamic )
. SetUseSyntheticValue ( use_synth )
. SetFlatOutput ( flat_output )
. SetIgnoreCap ( ignore_cap )
. SetFormat ( format )
. SetSummary ( summary_sp ) ;
if ( objc_is_compact )
options . SetHideRootType ( use_objc )
. SetHideName ( use_objc )
. SetHideValue ( use_objc ) ;
if ( be_raw )
options . SetRawDisplay ( true ) ;
return options ;
}