Pulled in a new version of LLVM/Clang to solve a variety
of problems with Objective-C object completion.  To go
along with the LLVM/Clang-side fixes, we have a variety
of Objective-C improvements.

Fixes include:

- It is now possible to run expressions when stopped in
  an Objective-C class method and have "self" act just
  like "self" would act in the class method itself (i.e.,
  [self classMethod] works without casting the return
  type if debug info is present).  To accomplish this,
  the expression masquerades as a class method added by
  a category.

- Objective-C objects can now provide methods and
  properties and methods to Clang on demand (i.e., the
  ASTImporter sets hasExternalVisibleDecls on Objective-C
  interface objects).

- Objective-C built-in types, which had long been a bone
  of contention (should we be using "id"?  "id*"?), are
  now fetched correctly using accessor functions on
  ClangASTContext.  We inhibit searches for them in the
  debug information.

There are also a variety of logging fixes, and I made two
changes to the test suite:

- Enabled a test case for Objective-C properties in the
  current translation unit.

- Added a test case for calling Objective-C class methods
  when stopped in a class method.


git-svn-id: https://llvm.org/svn/llvm-project/lldb/trunk@144607 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/source/Expression/ExpressionSourceCode.cpp b/source/Expression/ExpressionSourceCode.cpp
index 4b749b5..b1719b3 100644
--- a/source/Expression/ExpressionSourceCode.cpp
+++ b/source/Expression/ExpressionSourceCode.cpp
@@ -13,7 +13,7 @@
 
 using namespace lldb_private;
 
-bool ExpressionSourceCode::GetText (std::string &text, lldb::LanguageType wrapping_language, bool const_object) const
+bool ExpressionSourceCode::GetText (std::string &text, lldb::LanguageType wrapping_language, bool const_object, bool static_method) const
 {
     if (m_wrap)
     {
@@ -59,21 +59,42 @@
                                m_body.c_str());
             break;
         case lldb::eLanguageTypeObjC:
-            wrap_stream.Printf("%s                                                      \n"
-                                "typedef unsigned short unichar;                        \n"
-                                "@interface $__lldb_objc_class ($__lldb_category)       \n"
-                                "-(void)%s:(void *)$__lldb_arg;                         \n"
-                                "@end                                                   \n"
-                                "@implementation $__lldb_objc_class ($__lldb_category)  \n"
-                                "-(void)%s:(void *)$__lldb_arg                          \n"
-                                "{                                                      \n"
-                                "    %s;                                                \n"
-                                "}                                                      \n"
-                                "@end                                                   \n",
-                                m_prefix.c_str(),
-                                m_name.c_str(),
-                                m_name.c_str(),
-                                m_body.c_str());
+            if (static_method)
+            {
+                wrap_stream.Printf("%s                                                      \n"
+                                    "typedef unsigned short unichar;                        \n"
+                                    "@interface $__lldb_objc_class ($__lldb_category)       \n"
+                                    "+(void)%s:(void *)$__lldb_arg;                         \n"
+                                    "@end                                                   \n"
+                                    "@implementation $__lldb_objc_class ($__lldb_category)  \n"
+                                    "+(void)%s:(void *)$__lldb_arg                          \n"
+                                    "{                                                      \n"
+                                    "    %s;                                                \n"
+                                    "}                                                      \n"
+                                    "@end                                                   \n",
+                                    m_prefix.c_str(),
+                                    m_name.c_str(),
+                                    m_name.c_str(),
+                                    m_body.c_str());
+            }
+            else
+            {
+                wrap_stream.Printf("%s                                                      \n"
+                                   "typedef unsigned short unichar;                        \n"
+                                   "@interface $__lldb_objc_class ($__lldb_category)       \n"
+                                   "-(void)%s:(void *)$__lldb_arg;                         \n"
+                                   "@end                                                   \n"
+                                   "@implementation $__lldb_objc_class ($__lldb_category)  \n"
+                                   "-(void)%s:(void *)$__lldb_arg                          \n"
+                                   "{                                                      \n"
+                                   "    %s;                                                \n"
+                                   "}                                                      \n"
+                                   "@end                                                   \n",
+                                   m_prefix.c_str(),
+                                   m_name.c_str(),
+                                   m_name.c_str(),
+                                   m_body.c_str());
+            }
             break;
         }