Author: enrico Date: Wed Oct 26 14:17:49 2016 New Revision: 285226 URL: http://llvm.org/viewvc/llvm-project?rev=285226&view=rev Log: Fix an issue where frame variable -s <varname> would not show the scope even though the user asked for it
Part of rdar://28434047 Added: lldb/trunk/packages/Python/lldbsuite/test/functionalities/frame_var_scope/ lldb/trunk/packages/Python/lldbsuite/test/functionalities/frame_var_scope/Makefile lldb/trunk/packages/Python/lldbsuite/test/functionalities/frame_var_scope/TestFrameVariableScope.py lldb/trunk/packages/Python/lldbsuite/test/functionalities/frame_var_scope/main.c Modified: lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/unsigned_types/TestUnsignedTypes.py lldb/trunk/source/Commands/CommandObjectFrame.cpp Added: lldb/trunk/packages/Python/lldbsuite/test/functionalities/frame_var_scope/Makefile URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/functionalities/frame_var_scope/Makefile?rev=285226&view=auto ============================================================================== --- lldb/trunk/packages/Python/lldbsuite/test/functionalities/frame_var_scope/Makefile (added) +++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/frame_var_scope/Makefile Wed Oct 26 14:17:49 2016 @@ -0,0 +1,3 @@ +LEVEL = ../../make +C_SOURCES := main.c +include $(LEVEL)/Makefile.rules Added: lldb/trunk/packages/Python/lldbsuite/test/functionalities/frame_var_scope/TestFrameVariableScope.py URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/functionalities/frame_var_scope/TestFrameVariableScope.py?rev=285226&view=auto ============================================================================== --- lldb/trunk/packages/Python/lldbsuite/test/functionalities/frame_var_scope/TestFrameVariableScope.py (added) +++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/frame_var_scope/TestFrameVariableScope.py Wed Oct 26 14:17:49 2016 @@ -0,0 +1,5 @@ +from lldbsuite.test import lldbinline +from lldbsuite.test import decorators + +lldbinline.MakeInlineTest( + __file__, globals(), []) Added: lldb/trunk/packages/Python/lldbsuite/test/functionalities/frame_var_scope/main.c URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/functionalities/frame_var_scope/main.c?rev=285226&view=auto ============================================================================== --- lldb/trunk/packages/Python/lldbsuite/test/functionalities/frame_var_scope/main.c (added) +++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/frame_var_scope/main.c Wed Oct 26 14:17:49 2016 @@ -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 =']) +} Modified: lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/unsigned_types/TestUnsignedTypes.py URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/unsigned_types/TestUnsignedTypes.py?rev=285226&r1=285225&r2=285226&view=diff ============================================================================== --- lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/unsigned_types/TestUnsignedTypes.py (original) +++ lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/unsigned_types/TestUnsignedTypes.py Wed Oct 26 14:17:49 2016 @@ -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", Modified: lldb/trunk/source/Commands/CommandObjectFrame.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectFrame.cpp?rev=285226&r1=285225&r2=285226&view=diff ============================================================================== --- lldb/trunk/source/Commands/CommandObjectFrame.cpp (original) +++ lldb/trunk/source/Commands/CommandObjectFrame.cpp Wed Oct 26 14:17:49 2016 @@ -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 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits