[Lldb-commits] [lldb] r152473 - /lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp

Jim Ingham jingham at apple.com
Fri Mar 9 18:03:37 PST 2012


Author: jingham
Date: Fri Mar  9 20:03:37 2012
New Revision: 152473

URL: http://llvm.org/viewvc/llvm-project?rev=152473&view=rev
Log:
Meta classes can't have dynamic types...
<rdar://problem/11021925>

Modified:
    lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp

Modified: lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp?rev=152473&r1=152472&r2=152473&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp (original)
+++ lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp Fri Mar  9 20:03:37 2012
@@ -58,6 +58,7 @@
     extern void *gdb_class_getClass (void *objc_class);                                           \n\
     extern void *class_getName(void *objc_class);                                                 \n\
     extern int printf(const char *format, ...);                                                   \n\
+    extern unsigned char class_isMetaClass (void *objc_class);                                    \n\
 }                                                                                                 \n\
                                                                                                   \n\
 struct __lldb_objc_object {                                                                       \n\
@@ -77,7 +78,17 @@
     {                                                                                             \n\
         void *actual_class = (void *) [(id) object_ptr class];                                    \n\
         if (actual_class != 0)                                                                    \n\
-            name = class_getName((void *) actual_class);                                          \n\
+        {                                                                                         \n\
+            if (class_isMetaClass(actual_class) == 1)                                             \n\
+            {                                                                                     \n\
+                if (debug)                                                                        \n\
+                    printf (\"\\n*** Found metaclass.\\n\");                                      \n\
+            }                                                                                     \n\
+            else                                                                                  \n\
+            {                                                                                     \n\
+                name = class_getName((void *) actual_class);                                      \n\
+            }                                                                                     \n\
+        }                                                                                         \n\
         if (debug)                                                                                \n\
             printf (\"\\n*** Found name: %s\\n\", name ? name : \"<NOT FOUND>\");                 \n\
     }                                                                                             \n\
@@ -298,6 +309,11 @@
                     {
                         if (sc.symbol->GetType() == eSymbolTypeObjCClass)
                             class_name = sc.symbol->GetName().GetCString();
+                        else if (sc.symbol->GetType() == eSymbolTypeObjCMetaClass)
+                        {
+                            // FIXME: Meta-classes can't have dynamic types...
+                            return false;
+                        }
                     }
                 }
             }





More information about the lldb-commits mailing list