Improved the expression parser's detection of the
current context.  Previously, if there was a variable
called "self" available, the expression parser
assumed it was inside a method.  But class methods
in Objective-C also take a "self" parameter, of DWARF
type "id".  We now detect this properly, and only
assume we're in an instance method if "self" is a
pointer to an Objective-C object.

llvm-svn: 136784
diff --git a/lldb/source/Expression/ClangUserExpression.cpp b/lldb/source/Expression/ClangUserExpression.cpp
index 9bc4188..71a5282 100644
--- a/lldb/source/Expression/ClangUserExpression.cpp
+++ b/lldb/source/Expression/ClangUserExpression.cpp
@@ -68,9 +68,6 @@
 void
 ClangUserExpression::ScanContext(ExecutionContext &exe_ctx)
 {
-    if (!exe_ctx.frame)
-        return;
-    
     VariableList *vars = exe_ctx.frame->GetVariableList(false);
     
     if (!vars)
@@ -102,6 +99,13 @@
     else if (self_var.get())
     {
         m_objectivec = true;
+        
+        Type *self_type = self_var->GetType();
+                
+        if (self_type->GetClangForwardType() == self_type->GetClangASTContext().GetBuiltInType_objc_id())
+        {
+            m_objectivec = false;
+        }
     }
 }