Added support for indicating to the expression parser
that the result of an expression should be coerced to
a specific type.  Also made breakpoint conditions pass
in the bool type for this type.

The expression parser ignores this indication for now.


git-svn-id: https://llvm.org/svn/llvm-project/llvdb/trunk@119779 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/source/Expression/ClangUserExpression.cpp b/source/Expression/ClangUserExpression.cpp
index f351528..3e4827b 100644
--- a/source/Expression/ClangUserExpression.cpp
+++ b/source/Expression/ClangUserExpression.cpp
@@ -44,7 +44,8 @@
     m_jit_addr(LLDB_INVALID_ADDRESS),
     m_cplusplus(false),
     m_objectivec(false),
-    m_needs_object_ptr(false)
+    m_needs_object_ptr(false),
+    m_desired_type(NULL, NULL)
 {
 }
 
@@ -55,7 +56,8 @@
 clang::ASTConsumer *
 ClangUserExpression::ASTTransformer (clang::ASTConsumer *passthrough)
 {
-    return new ASTResultSynthesizer(passthrough);
+    return new ASTResultSynthesizer(passthrough,
+                                    m_desired_type);
 }
 
 void
@@ -115,7 +117,9 @@
 }
 
 bool
-ClangUserExpression::Parse (Stream &error_stream, ExecutionContext &exe_ctx)
+ClangUserExpression::Parse (Stream &error_stream, 
+                            ExecutionContext &exe_ctx,
+                            TypeFromUser desired_type)
 {
     lldb::LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_EXPRESSIONS));
     
@@ -194,6 +198,8 @@
     // Parse the expression
     //
     
+    m_desired_type = desired_type;
+    
     m_expr_decl_map.reset(new ClangExpressionDeclMap(&exe_ctx));
     
     ClangExpressionParser parser(target_triple.GetCString(), *this);
@@ -452,7 +458,7 @@
     
     StreamString error_stream;
     
-    if (!user_expression.Parse (error_stream, exe_ctx))
+    if (!user_expression.Parse (error_stream, exe_ctx, TypeFromUser(NULL, NULL)))
     {
         if (error_stream.GetString().empty())
             error.SetErrorString ("expression failed to parse, unknown error");