summaryrefslogtreecommitdiffstats
path: root/lldb/source/Target/StackFrame.cpp
diff options
context:
space:
mode:
authorShafik Yaghmour <syaghmour@apple.com>2018-09-20 17:06:34 +0000
committerShafik Yaghmour <syaghmour@apple.com>2018-09-20 17:06:34 +0000
commite23d0b636ca317347e84b3006a89eb185a130983 (patch)
treee7996dd12ef9f139aaf2b502c99462f0eaac117d /lldb/source/Target/StackFrame.cpp
parent6d0e4fce1accff627f01313dda6e100b0bce09a3 (diff)
downloadbcm5719-llvm-e23d0b636ca317347e84b3006a89eb185a130983.tar.gz
bcm5719-llvm-e23d0b636ca317347e84b3006a89eb185a130983.zip
Refactor FindVariable() core functionality into StackFrame out of SBFrame
rdar://problem/14365983 Patch by Shafik Yaghmour Differential Revision: https://reviews.llvm.org/D52247 llvm-svn: 342663
Diffstat (limited to 'lldb/source/Target/StackFrame.cpp')
-rw-r--r--lldb/source/Target/StackFrame.cpp35
1 files changed, 35 insertions, 0 deletions
diff --git a/lldb/source/Target/StackFrame.cpp b/lldb/source/Target/StackFrame.cpp
index ce7aa0e6848..0e9c6df2bf7 100644
--- a/lldb/source/Target/StackFrame.cpp
+++ b/lldb/source/Target/StackFrame.cpp
@@ -1709,6 +1709,41 @@ lldb::ValueObjectSP StackFrame::GuessValueForRegisterAndOffset(ConstString reg,
GetFrameCodeAddress());
}
+lldb::ValueObjectSP StackFrame::FindVariable(ConstString name) {
+ ValueObjectSP value_sp;
+
+ if (!name)
+ return value_sp;
+
+ TargetSP target_sp = CalculateTarget();
+ ProcessSP process_sp = CalculateProcess();
+
+ if (!target_sp && !process_sp)
+ return value_sp;
+
+ VariableList variable_list;
+ VariableSP var_sp;
+ SymbolContext sc(GetSymbolContext(eSymbolContextBlock));
+
+ if (sc.block) {
+ const bool can_create = true;
+ const bool get_parent_variables = true;
+ const bool stop_if_block_is_inlined_function = true;
+
+ if (sc.block->AppendVariables(
+ can_create, get_parent_variables, stop_if_block_is_inlined_function,
+ [this](Variable *v) { return v->IsInScope(this); },
+ &variable_list)) {
+ var_sp = variable_list.FindVariable(name);
+ }
+
+ if (var_sp)
+ value_sp = GetValueObjectForFrameVariable(var_sp, eNoDynamicValues);
+ }
+
+ return value_sp;
+}
+
TargetSP StackFrame::CalculateTarget() {
TargetSP target_sp;
ThreadSP thread_sp(GetThread());
OpenPOWER on IntegriCloud