]> rtime.felk.cvut.cz Git - fpga/lx-cpu1/gcc-tumbl.git/commitdiff
In libobjc/:
authornicola <nicola@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 24 Dec 2010 20:10:46 +0000 (20:10 +0000)
committernicola <nicola@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 24 Dec 2010 20:10:46 +0000 (20:10 +0000)
2010-12-24  Nicola Pero  <nicola.pero@meta-innovation.com>

* selector.c (sel_getTypedSelector): Return NULL if given a NULL
argument.
(sel_registerTypedName): Same.
(sel_registerName): Same.
* objc/runtime.h: Updated documentation.

In gcc/testsuite/:
2010-12-24  Nicola Pero  <nicola.pero@meta-innovation.com>

* objc.dg/gnu-api-2-sel.m: Test calling sel_getUid,
sel_registerName and sel_registerTypedName with NULL arguments.
Updated the test to work with the Apple runtime as well.
* obj-c++.dg/gnu-api-2-sel.mm: Same change.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@168231 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/testsuite/ChangeLog
gcc/testsuite/obj-c++.dg/gnu-api-2-sel.mm
gcc/testsuite/objc.dg/gnu-api-2-sel.m
libobjc/ChangeLog
libobjc/objc/runtime.h
libobjc/selector.c

index 2e68afa4f213a1475f7bd6e2ab4e457a0996dae9..2f07ea6c7ff95293f84244a4a48649b52ef566f3 100644 (file)
@@ -1,3 +1,10 @@
+2010-12-24  Nicola Pero  <nicola.pero@meta-innovation.com>
+
+       * objc.dg/gnu-api-2-sel.m: Test calling sel_getUid,
+       sel_registerName and sel_registerTypedName with NULL arguments.
+       Updated the test to work with the Apple runtime as well.
+       * obj-c++.dg/gnu-api-2-sel.mm: Same change.
+       
 2010-12-24  Nicola Pero  <nicola.pero@meta-innovation.com>
 
        * objc.dg/gnu-api-2-class.m: Updated test to pass log_2 of the
index 956ba29ca838e8ea7f1a46ed536c0197923ed453..6d1d0fcf203777c3d80e1d6bb3c2dc245830623b 100644 (file)
@@ -3,7 +3,6 @@
   This is test 'sel', covering all functions starting with 'sel'.  */
 
 /* { dg-do run } */
-/* { dg-skip-if "" { *-*-* } { "-fnext-runtime" } { "" } } */
 
 /* To get the modern GNU Objective-C Runtime API, you include
    objc/runtime.h.  */
 { Class isa; }
 + alloc;
 - init;
++ initialize;
 @end
 
 @implementation MyRootClass
 + alloc { return class_createInstance (self, 0); }
 - init  { return self; }
++ initialize { return self; }
 @end
 
 @protocol MyProtocol
@@ -49,6 +50,7 @@ int main ()
 {
   /* Functions are tested in alphabetical order.  */
 
+#ifdef __GNU_LIBOBJC__
   std::cout << "Testing sel_copyTypedSelectorList ()...\n";
   {
     unsigned int count;
@@ -72,6 +74,7 @@ int main ()
     if (list[2] != NULL)
       abort ();
   }
+#endif
 
   std::cout << "Testing sel_getName () ...\n";
   {
@@ -82,6 +85,7 @@ int main ()
       abort ();
   }
 
+#ifdef __GNU_LIBOBJC__
   std::cout << "Testing sel_getTypeEncoding () ...\n";
   {
     /* Get a selector from a real class, so it has interesting
@@ -96,7 +100,9 @@ int main ()
     if (sel_getTypeEncoding (NULL) != NULL)
       abort ();
   }
+#endif
 
+#ifdef __GNU_LIBOBJC__
   std::cout << "Testing sel_getTypedSelector () ...\n";
   {
     /* First try with a selector where we know that a typed one has
@@ -128,11 +134,15 @@ int main ()
     if (selector != NULL)
       abort ();
   }
+#endif
 
   std::cout << "Testing sel_getUid () ...\n";
   {
     if (std::strcmp (sel_getName (sel_getUid ("myMethod")), "myMethod") != 0)
       abort ();
+
+    if (sel_getUid (NULL) != NULL)
+      abort ();
   }
 
   std::cout << "Testing sel_isEqual () ...\n";
@@ -145,8 +155,12 @@ int main ()
   {
     if (std::strcmp (sel_getName (sel_registerName ("myMethod")), "myMethod") != 0)
       abort ();
+
+    if (sel_registerName (NULL) != NULL)
+      abort ();
   }
 
+#ifdef __GNU_LIBOBJC__
   std::cout << "Testing set_registerTypedName () ...\n";
   {
     const char *types = method_getTypeEncoding (class_getInstanceMethod 
@@ -159,7 +173,14 @@ int main ()
 
     if (std::strcmp (sel_getTypeEncoding (selector), types) != 0)
       abort ();
+
+    if (sel_registerTypedName (NULL, NULL) != NULL)
+      abort ();
+
+    if (sel_registerTypedName (NULL, types) != NULL)
+      abort ();
   }
+#endif
 
   return (0);
 }
index db2dcd3ec28b59d30a54c26fac6815a8d55ec725..70368cae1852b845246658bccb90079dc76b102b 100644 (file)
@@ -3,7 +3,6 @@
   This is test 'sel', covering all functions starting with 'sel'.  */
 
 /* { dg-do run } */
-/* { dg-skip-if "" { *-*-* } { "-fnext-runtime" } { "" } } */
 
 /* To get the modern GNU Objective-C Runtime API, you include
    objc/runtime.h.  */
 { Class isa; }
 + alloc;
 - init;
++ initialize;
 @end
 
 @implementation MyRootClass
 + alloc { return class_createInstance (self, 0); }
 - init  { return self; }
++ initialize { return self; }
 @end
 
 @protocol MyProtocol
@@ -49,6 +50,7 @@ int main(int argc, void **args)
 {
   /* Functions are tested in alphabetical order.  */
 
+#ifdef __GNU_LIBOBJC__
   printf ("Testing sel_copyTypedSelectorList ()...\n");
   {
     unsigned int count;
@@ -72,6 +74,7 @@ int main(int argc, void **args)
     if (list[2] != NULL)
       abort ();
   }
+#endif
 
   printf ("Testing sel_getName () ...\n");
   {
@@ -82,6 +85,7 @@ int main(int argc, void **args)
       abort ();
   }
 
+#ifdef __GNU_LIBOBJC__
   printf ("Testing sel_getTypeEncoding () ...\n");
   {
     /* Get a selector from a real class, so it has interesting
@@ -96,7 +100,9 @@ int main(int argc, void **args)
     if (sel_getTypeEncoding (NULL) != NULL)
       abort ();
   }
+#endif
 
+#ifdef __GNU_LIBOBJC__
   printf ("Testing sel_getTypedSelector () ...\n");
   {
     /* First try with a selector where we know that a typed one has
@@ -128,11 +134,15 @@ int main(int argc, void **args)
     if (selector != NULL)
       abort ();
   }
+#endif
 
   printf ("Testing sel_getUid () ...\n");
   {
     if (strcmp (sel_getName (sel_getUid ("myMethod")), "myMethod") != 0)
       abort ();
+
+    if (sel_getUid (NULL) != NULL)
+      abort ();
   }
 
   printf ("Testing sel_isEqual () ...\n");
@@ -145,8 +155,12 @@ int main(int argc, void **args)
   {
     if (strcmp (sel_getName (sel_registerName ("myMethod")), "myMethod") != 0)
       abort ();
+
+    if (sel_registerName (NULL) != NULL)
+      abort ();
   }
 
+#ifdef __GNU_LIBOBJC__
   printf ("Testing set_registerTypedName () ...\n");
   {
     const char *types = method_getTypeEncoding (class_getInstanceMethod 
@@ -159,7 +173,14 @@ int main(int argc, void **args)
 
     if (strcmp (sel_getTypeEncoding (selector), types) != 0)
       abort ();
+
+    if (sel_registerTypedName (NULL, NULL) != NULL)
+      abort ();
+
+    if (sel_registerTypedName (NULL, types) != NULL)
+      abort ();
   }
+#endif
 
   return 0;
 }
index d8f23f74c9a1c4c2d981b83696c5226ae87d4d87..f234a2654d153865efc4ce394cc130d965bf3818 100644 (file)
@@ -1,3 +1,11 @@
+2010-12-24  Nicola Pero  <nicola.pero@meta-innovation.com>
+
+       * selector.c (sel_getTypedSelector): Return NULL if given a NULL
+       argument.
+       (sel_registerTypedName): Same.
+       (sel_registerName): Same.
+       * objc/runtime.h: Updated documentation.
+       
 2010-12-24  Nicola Pero  <nicola.pero@meta-innovation.com>
 
        * objc/runtime.h (class_addIvar): Updated documentation.  The
index 9332f7be0692cf080af88e5eb9083f3b646a50e4..551c348d3074cb58100f4eea734d054eaec1edeb 100644 (file)
@@ -191,14 +191,14 @@ objc_EXPORT SEL sel_getUid (const char *name);
    you know the types, it is better to call sel_registerTypedName().
    If a selector with this name and no types already exists, it is
    returned.  Note that this function should really be called
-   'objc_registerSelector'.  */
+   'objc_registerSelector'.  Return NULL if 'name' is NULL.  */
 objc_EXPORT SEL sel_registerName (const char *name);
 
 /* Register a selector with a given name and types.  If a selector
    with this name and types already exists, it is returned.  Note that
    this function should really be called 'objc_registerTypedSelector',
    and it's called 'sel_registerTypedName' only for consistency with
-   'sel_registerName'.
+   'sel_registerName'.  Return NULL if 'name' is NULL.
 
    Compatibility Note: the Apple/NeXT runtime has untyped selectors,
    so it does not have this function, which is specific to the GNU
@@ -227,7 +227,7 @@ objc_EXPORT SEL * sel_copyTypedSelectorList (const char *name,
 
 /* Return a selector with name 'name' and a non-zero type encoding, if
    any such selector is registered with the runtime.  If there is no
-   such selector, NULL is returned.
+   such selector, NULL is returned.  Return NULL if 'name' is NULL.
 
    This is useful if you have the name of the selector, and would
    really like to get a selector for it that includes the type
index f8a7f14fdb16ad0266f05d48ea330ddadd8c7e38..4110df2662bb3f04ee092efdf1b7bc6ad4509a95 100644 (file)
@@ -357,8 +357,12 @@ SEL
 sel_getTypedSelector (const char *name)
 {
   sidx i;
-  objc_mutex_lock (__objc_runtime_mutex);
 
+  if (name == NULL)
+    return NULL;
+  
+  objc_mutex_lock (__objc_runtime_mutex);
+  
   /* Look for a typed selector.  */
   i = (sidx) objc_hash_value_for_key (__objc_selector_hash, name);
   if (i != 0)
@@ -658,6 +662,9 @@ SEL
 sel_registerName (const char *name)
 {
   SEL ret;
+
+  if (name == NULL)
+    return NULL;
     
   objc_mutex_lock (__objc_runtime_mutex);
   /* Assume that name is not constant static memory and needs to be
@@ -680,6 +687,9 @@ sel_registerTypedName (const char *name, const char *type)
 {
   SEL ret;
 
+  if (name == NULL)
+    return NULL;
+
   objc_mutex_lock (__objc_runtime_mutex);
   /* Assume that name and type are not constant static memory and need
      to be copied before put into a runtime structure.  is_const ==