[Lldb-commits] [PATCH] D11482: Add target setting to have the language follow the frame's CU.
Greg Clayton
clayborg at gmail.com
Fri Jul 24 15:41:47 PDT 2015
clayborg requested changes to this revision.
clayborg added a comment.
This revision now requires changes to proceed.
I think it is fine to add support for looking at the target.language and using it if set, but I don't think we need a "target.language-follows-frame" setting at all. We should just do the right thing. But the right thing I think it means just asking the frame for its expression language. See inlined comments.
================
Comment at: include/lldb/Target/Target.h:175-177
@@ -174,2 +174,5 @@
+ bool
+ GetLanguageFollowsFrame () const;
+
const char *
----------------
Remove this, we shouldn't need this setting.
================
Comment at: include/lldb/Target/Target.h:1443-1445
@@ -1439,2 +1442,5 @@
+ lldb::LanguageType
+ GetLanguageOfSelectedFrame () const;
+
SourceManager &
----------------
This should be on lldb_private::StackFrame and should be:
```
lldb::LanguageType
StackFrame::GetDefaultExpressionLanguage();
```
================
Comment at: source/Commands/CommandObjectExpression.cpp:303-312
@@ -302,8 +302,12 @@
options.SetDebug(m_command_options.debug);
-
- // If the language was not specified, set it from target's properties
+
+ // If the expression's language was not specified, check the
+ // target's properties to see if a language override was set,
+ // or if the language should match that of the frame.
if (m_command_options.language != eLanguageTypeUnknown)
options.SetLanguage(m_command_options.language);
- else
+ else if (target->GetLanguage() != eLanguageTypeUnknown)
options.SetLanguage(target->GetLanguage());
+ else if (target->GetLanguageFollowsFrame())
+ options.SetLanguage(target->GetLanguageOfSelectedFrame());
----------------
This should be:
```
if (m_command_options.language != eLanguageTypeUnknown)
options.SetLanguage(m_command_options.language);
else
{
StackFrame *frame = exe_ctx.GetFramePtr();
if (frame)
options.SetLanguage(frame-> GetDefaultExpressionLanguage());
}
````
================
Comment at: source/Target/Target.cpp:391-395
@@ -387,2 +390,7 @@
language = GetLanguage();
+ // If the target's language override wasn't set but
+ // was set to follow the selected frame, use that.
+ if (language == lldb::eLanguageTypeUnknown &&
+ GetLanguageFollowsFrame())
+ language = GetLanguageOfSelectedFrame();
----------------
Remove this.
================
Comment at: source/Target/Target.cpp:430-434
@@ -419,2 +429,7 @@
language = GetLanguage();
+ // If the target's language override wasn't set but
+ // was set to follow the selected frame, use that.
+ if (language == lldb::eLanguageTypeUnknown &&
+ GetLanguageFollowsFrame())
+ language = GetLanguageOfSelectedFrame();
----------------
Remove this.
================
Comment at: source/Target/Target.cpp:468-472
@@ -450,3 +467,7 @@
language = GetLanguage();
-
+ // If the target's language override wasn't set but
+ // was set to follow the selected frame, use that.
+ if (language == lldb::eLanguageTypeUnknown &&
+ GetLanguageFollowsFrame())
+ language = GetLanguageOfSelectedFrame();
----------------
Remove this.
================
Comment at: source/Target/Target.cpp:2158-2178
@@ -2136,1 +2157,23 @@
+// Return the language of the selected frame's CU.
+lldb::LanguageType
+Target::GetLanguageOfSelectedFrame () const
+{
+ LanguageType language = eLanguageTypeUnknown;
+ if (m_process_sp)
+ {
+ ThreadSP sel_thread_sp(m_process_sp->GetThreadList().GetSelectedThread());
+ if (sel_thread_sp)
+ {
+ StackFrameSP sel_frame_sp = sel_thread_sp->GetSelectedFrame();
+ if (sel_frame_sp)
+ {
+ CompileUnit *cu = sel_frame_sp->GetSymbolContext(eSymbolContextCompUnit).comp_unit;
+ if (cu)
+ language = cu->GetLanguage();
+ }
+ }
+ }
+ return language;
+}
+
----------------
This should be moved to the StackFrame as:
```
lldb::LanguageType
StackFrame::GetDefaultExpressionLanguage();
```
And it should check if the language is form of C, C++, ObjC, or ObjC ++, then return ObjC++, else return the language.
================
Comment at: source/Target/Target.cpp:2998
@@ -2955,1 +2997,3 @@
+ { "language" , OptionValue::eTypeLanguage , false, eLanguageTypeUnknown , NULL, NULL, "The language to use when interpreting expressions entered in commands." },
+ { "language-follows-frame" , OptionValue::eTypeBoolean , false, false , NULL, NULL, "If the target.language is unknown, default to the language of the selected frame." },
{ "expr-prefix" , OptionValue::eTypeFileSpec , false, 0 , NULL, NULL, "Path to a file containing expressions to be prepended to all expressions." },
----------------
I would prefer to not have this option as it doesn't really make sense and no one should have to worry about it.
================
Comment at: source/Target/Target.cpp:3058
@@ -3013,2 +3057,3 @@
ePropertyLanguage,
+ ePropertyLanguageFollowsFrame,
ePropertyExprPrefix,
----------------
Remove
================
Comment at: source/Target/Target.cpp:3516-3522
@@ -3470,2 +3515,9 @@
+bool
+TargetProperties::GetLanguageFollowsFrame () const
+{
+ const uint32_t idx = ePropertyLanguageFollowsFrame;
+ return m_collection_sp->GetPropertyAtIndexAsBoolean (NULL, idx, g_properties[idx].default_uint_value != 0);
+}
+
const char *
----------------
Remove
Repository:
rL LLVM
http://reviews.llvm.org/D11482
More information about the lldb-commits
mailing list