The "desired result type" code in the expression
parser has hitherto been an implementation waiting
for a use. I have now tied the '-o' option for
the expression command -- which indicates that the
result is an Objective-C object and needs to be
printed -- to the ExpressionParser, which
communicates the desired type to Clang.
Now, if the result of an expression is determined
by an Objective-C method call for which there is
no type information, that result is implicitly
cast to id if and only if the -o option is passed
to the expression command. (Otherwise if there
is no explicit cast Clang will issue an error.
This behavior is identical to what happened before
r146756.)
Also added a testcase for -o enabled and disabled.
git-svn-id: https://llvm.org/svn/llvm-project/lldb/trunk@147099 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/source/Target/Target.cpp b/source/Target/Target.cpp
index 902ffc7..c31b0b1 100644
--- a/source/Target/Target.cpp
+++ b/source/Target/Target.cpp
@@ -1462,6 +1462,7 @@
const char *expr_cstr,
StackFrame *frame,
lldb_private::ExecutionPolicy execution_policy,
+ bool coerce_to_id,
bool unwind_on_error,
bool keep_in_memory,
lldb::DynamicValueType use_dynamic,
@@ -1587,6 +1588,7 @@
execution_results = ClangUserExpression::Evaluate (exe_ctx,
execution_policy,
lldb::eLanguageTypeUnknown,
+ coerce_to_id ? ClangUserExpression::eResultTypeId : ClangUserExpression::eResultTypeAny,
unwind_on_error,
expr_cstr,
prefix,