Author: enrico Date: Wed Sep 30 18:12:22 2015 New Revision: 248960 URL: http://llvm.org/viewvc/llvm-project?rev=248960&view=rev Log: Introudce a IsTopLevelFunction() API on Language and Function
This is meant to support languages that have a scripting mode with top-level code that acts as global For now, this flag only controls whether 'frame variable' will attempt to treat globals as locals when within such a function Modified: lldb/trunk/include/lldb/Symbol/Function.h lldb/trunk/include/lldb/Target/Language.h lldb/trunk/source/Commands/CommandObjectFrame.cpp lldb/trunk/source/Symbol/Function.cpp lldb/trunk/source/Target/Language.cpp Modified: lldb/trunk/include/lldb/Symbol/Function.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/Function.h?rev=248960&r1=248959&r2=248960&view=diff ============================================================================== --- lldb/trunk/include/lldb/Symbol/Function.h (original) +++ lldb/trunk/include/lldb/Symbol/Function.h Wed Sep 30 18:12:22 2015 @@ -631,6 +631,24 @@ public: //------------------------------------------------------------------ bool GetIsOptimized (); + + //------------------------------------------------------------------ + /// Get whether this function represents a 'top-level' function + /// + /// The concept of a top-level function is language-specific, mostly + /// meant to represent the notion of scripting-style code that has + /// global visibility of the variables/symbols/functions/... + /// defined within the containing file/module + /// + /// If stopped in a top-level function, LLDB will expose global variables + /// as-if locals in the 'frame variable' command + /// + /// @return + /// Returns 'true' if this function is a top-level function, + /// 'false' otherwise. + //------------------------------------------------------------------ + bool + IsTopLevelFunction (); lldb::DisassemblerSP GetInstructions (const ExecutionContext &exe_ctx, Modified: lldb/trunk/include/lldb/Target/Language.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/Language.h?rev=248960&r1=248959&r2=248960&view=diff ============================================================================== --- lldb/trunk/include/lldb/Target/Language.h (original) +++ lldb/trunk/include/lldb/Target/Language.h Wed Sep 30 18:12:22 2015 @@ -41,6 +41,9 @@ public: virtual lldb::LanguageType GetLanguageType () const = 0; + bool + IsTopLevelFunction (Function& function); + virtual lldb::TypeCategoryImplSP GetFormatters (); Modified: lldb/trunk/source/Commands/CommandObjectFrame.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectFrame.cpp?rev=248960&r1=248959&r2=248960&view=diff ============================================================================== --- lldb/trunk/source/Commands/CommandObjectFrame.cpp (original) +++ lldb/trunk/source/Commands/CommandObjectFrame.cpp Wed Sep 30 18:12:22 2015 @@ -35,6 +35,7 @@ #include "lldb/Interpreter/OptionGroupVariable.h" #include "lldb/Symbol/CompilerType.h" #include "lldb/Symbol/ClangASTContext.h" +#include "lldb/Symbol/Function.h" #include "lldb/Symbol/ObjectFile.h" #include "lldb/Symbol/SymbolContext.h" #include "lldb/Symbol/Type.h" @@ -409,6 +410,10 @@ protected: DumpValueObjectOptions options(m_varobj_options.GetAsDumpOptions(eLanguageRuntimeDescriptionDisplayVerbosityFull,eFormatDefault,summary_format_sp)); + const SymbolContext& sym_ctx = frame->GetSymbolContext(eSymbolContextFunction); + if (sym_ctx.function && sym_ctx.function->IsTopLevelFunction()) + m_option_variable.show_globals = true; + if (variable_list) { const Format format = m_option_format.GetFormat(); Modified: lldb/trunk/source/Symbol/Function.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/Function.cpp?rev=248960&r1=248959&r2=248960&view=diff ============================================================================== --- lldb/trunk/source/Symbol/Function.cpp (original) +++ lldb/trunk/source/Symbol/Function.cpp Wed Sep 30 18:12:22 2015 @@ -17,6 +17,7 @@ #include "lldb/Symbol/LineTable.h" #include "lldb/Symbol/SymbolFile.h" #include "lldb/Symbol/SymbolVendor.h" +#include "lldb/Target/Language.h" #include "llvm/Support/Casting.h" using namespace lldb; @@ -481,6 +482,17 @@ Function::GetIsOptimized () return result; } +bool +Function::IsTopLevelFunction () +{ + bool result = false; + + if (Language* language = Language::FindPlugin(GetLanguage())) + result = language->IsTopLevelFunction(*this); + + return result; +} + ConstString Function::GetDisplayName () const { Modified: lldb/trunk/source/Target/Language.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/Language.cpp?rev=248960&r1=248959&r2=248960&view=diff ============================================================================== --- lldb/trunk/source/Target/Language.cpp (original) +++ lldb/trunk/source/Target/Language.cpp Wed Sep 30 18:12:22 2015 @@ -89,6 +89,12 @@ Language::ForEach (std::function<bool(La } } +bool +Language::IsTopLevelFunction (Function& function) +{ + return false; +} + lldb::TypeCategoryImplSP Language::GetFormatters () { _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits