]> git.saurik.com Git - apple/objc4.git/commitdiff
objc4-781.2.tar.gz macos-10152 macos-10153 v781.2
authorApple <opensource@apple.com>
Thu, 2 Apr 2020 17:19:03 +0000 (17:19 +0000)
committerApple <opensource@apple.com>
Thu, 2 Apr 2020 17:19:03 +0000 (17:19 +0000)
runtime/objc-runtime-new.mm
test/runtime.m

index ee1212714af93e80be07e90f1aeedd0581f233e4..e1583755a6f1c46ad36cec4d93989cd13f2aee83 100644 (file)
@@ -5604,7 +5604,9 @@ objc_class::demangledName(bool needsLock)
 
     // Return previously demangled name if available.
     if (isRealized()  ||  isFuture()) {
-        if (!isAnySwift()) {
+        // Swift metaclasses don't have the is-Swift bit.
+        // We can't take this shortcut for them.
+        if (!isMetaClass() && !isAnySwift()) {
             return data()->ro()->name;
         }
         auto rwe = data()->ext();
index ec8fda8b7776ee294bc45eeedd7668269971b978..50bd68c04aff91f23f20020f44306281f607966d 100644 (file)
@@ -212,6 +212,14 @@ int main()
     testassert(list2[count] == NULL);
     free(list2);
     free(objc_copyClassList(NULL));
+    
+    // Make sure metaclasses get demangled too.
+    testassert(strcmp(class_getName([TestRoot class]), class_getName(object_getClass([TestRoot class]))) == 0);
+    testassert(strcmp(class_getName([Sub class]), class_getName(object_getClass([Sub class]))) == 0);
+    testassert(strcmp(class_getName([SwiftV1Class class]), class_getName(object_getClass([SwiftV1Class class]))) == 0);
+    testassert(strcmp(class_getName([SwiftV1Class2 class]), class_getName(object_getClass([SwiftV1Class2 class]))) == 0);
+    testassert(strcmp(class_getName([SwiftV1Class3 class]), class_getName(object_getClass([SwiftV1Class3 class]))) == 0);
+    testassert(strcmp(class_getName([SwiftV1Class4 class]), class_getName(object_getClass([SwiftV1Class4 class]))) == 0);
 
     succeed(__FILE__);
 }