Fix an issue where frame variable -s <varname> would not show the scope even though the user asked for it
Part of rdar://28434047 llvm-svn: 285226
This commit is contained in:
parent
0f45998bc6
commit
73418dfe61
|
@ -0,0 +1,3 @@
|
|||
LEVEL = ../../make
|
||||
C_SOURCES := main.c
|
||||
include $(LEVEL)/Makefile.rules
|
|
@ -0,0 +1,5 @@
|
|||
from lldbsuite.test import lldbinline
|
||||
from lldbsuite.test import decorators
|
||||
|
||||
lldbinline.MakeInlineTest(
|
||||
__file__, globals(), [])
|
|
@ -0,0 +1,21 @@
|
|||
//===-- main.c --------------------------------------------------*- C++ -*-===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
int foo(int x, int y) {
|
||||
int z = 3 + x;
|
||||
return z + y; //% self.expect("frame variable -s", substrs=['ARG: (int) x = -3','ARG: (int) y = 0'])
|
||||
//% self.expect("frame variable -s x", substrs=['ARG: (int) x = -3'])
|
||||
//% self.expect("frame variable -s y", substrs=['ARG: (int) y = 0'])
|
||||
//% self.expect("frame variable -s z", substrs=['LOCAL: (int) z = 0'])
|
||||
}
|
||||
|
||||
int main (int argc, char const *argv[])
|
||||
{
|
||||
return foo(-3,0); //% self.expect("frame variable -s argc argv", substrs=['ARG: (int) argc ='])
|
||||
}
|
|
@ -55,9 +55,9 @@ class UnsignedTypesTestCase(TestBase):
|
|||
self.expect(
|
||||
"frame variable --show-types --no-args",
|
||||
VARIABLES_DISPLAYED_CORRECTLY,
|
||||
startstr="(unsigned char) the_unsigned_char = 'c'",
|
||||
patterns=["\((short unsigned int|unsigned short)\) the_unsigned_short = 99"],
|
||||
substrs=[
|
||||
"(unsigned char) the_unsigned_char = 'c'",
|
||||
"(unsigned int) the_unsigned_int = 99",
|
||||
"(unsigned long) the_unsigned_long = 99",
|
||||
"(unsigned long long) the_unsigned_long_long = 99",
|
||||
|
|
|
@ -489,6 +489,28 @@ public:
|
|||
}
|
||||
|
||||
protected:
|
||||
llvm::StringRef GetScopeString(VariableSP var_sp) {
|
||||
if (!var_sp)
|
||||
return llvm::StringRef::withNullAsEmpty(nullptr);
|
||||
|
||||
switch (var_sp->GetScope()) {
|
||||
case eValueTypeVariableGlobal:
|
||||
return "GLOBAL: ";
|
||||
case eValueTypeVariableStatic:
|
||||
return "STATIC: ";
|
||||
case eValueTypeVariableArgument:
|
||||
return "ARG: ";
|
||||
case eValueTypeVariableLocal:
|
||||
return "LOCAL: ";
|
||||
case eValueTypeVariableThreadLocal:
|
||||
return "THREAD: ";
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return llvm::StringRef::withNullAsEmpty(nullptr);
|
||||
}
|
||||
|
||||
bool DoExecute(Args &command, CommandReturnObject &result) override {
|
||||
// No need to check "frame" for validity as eCommandRequiresFrame ensures it
|
||||
// is valid
|
||||
|
@ -564,6 +586,13 @@ protected:
|
|||
// valobj_sp->SetFormat
|
||||
// (format);
|
||||
|
||||
std::string scope_string;
|
||||
if (m_option_variable.show_scope)
|
||||
scope_string = GetScopeString(var_sp).str();
|
||||
|
||||
if (!scope_string.empty())
|
||||
s.PutCString(scope_string.c_str());
|
||||
|
||||
if (m_option_variable.show_decl &&
|
||||
var_sp->GetDeclaration().GetFile()) {
|
||||
bool show_fullpaths = false;
|
||||
|
@ -603,6 +632,13 @@ protected:
|
|||
name_cstr, m_varobj_options.use_dynamic, expr_path_options,
|
||||
var_sp, error);
|
||||
if (valobj_sp) {
|
||||
std::string scope_string;
|
||||
if (m_option_variable.show_scope)
|
||||
scope_string = GetScopeString(var_sp).str();
|
||||
|
||||
if (!scope_string.empty())
|
||||
s.PutCString(scope_string.c_str());
|
||||
|
||||
// if (format != eFormatDefault)
|
||||
// valobj_sp->SetFormat (format);
|
||||
if (m_option_variable.show_decl && var_sp &&
|
||||
|
@ -639,41 +675,8 @@ protected:
|
|||
var_sp = variable_list->GetVariableAtIndex(i);
|
||||
bool dump_variable = true;
|
||||
std::string scope_string;
|
||||
switch (var_sp->GetScope()) {
|
||||
case eValueTypeVariableGlobal:
|
||||
// Always dump globals since we only fetched them if
|
||||
// m_option_variable.show_scope was true
|
||||
if (dump_variable && m_option_variable.show_scope)
|
||||
scope_string = "GLOBAL: ";
|
||||
break;
|
||||
|
||||
case eValueTypeVariableStatic:
|
||||
// Always dump globals since we only fetched them if
|
||||
// m_option_variable.show_scope was true, or this is
|
||||
// a static variable from a block in the current scope
|
||||
if (dump_variable && m_option_variable.show_scope)
|
||||
scope_string = "STATIC: ";
|
||||
break;
|
||||
|
||||
case eValueTypeVariableArgument:
|
||||
dump_variable = m_option_variable.show_args;
|
||||
if (dump_variable && m_option_variable.show_scope)
|
||||
scope_string = " ARG: ";
|
||||
break;
|
||||
|
||||
case eValueTypeVariableLocal:
|
||||
dump_variable = m_option_variable.show_locals;
|
||||
if (dump_variable && m_option_variable.show_scope)
|
||||
scope_string = " LOCAL: ";
|
||||
break;
|
||||
|
||||
case eValueTypeVariableThreadLocal:
|
||||
if (dump_variable && m_option_variable.show_scope)
|
||||
scope_string = "THREAD: ";
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (dump_variable && m_option_variable.show_scope)
|
||||
scope_string = GetScopeString(var_sp).str();
|
||||
|
||||
if (dump_variable) {
|
||||
// Use the variable object code to make sure we are
|
||||
|
|
Loading…
Reference in New Issue