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

In libobjc/:
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.

From-SVN: r168231
This commit is contained in:
Nicola Pero 2010-12-24 20:10:46 +00:00 committed by Nicola Pero
parent 410644c41a
commit 9cacfc3eb3
6 changed files with 73 additions and 6 deletions

View 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

View 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. */
@ -16,11 +15,13 @@
{ 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);
}

View 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. */
@ -16,11 +15,13 @@
{ 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;
}

View 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

View 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

View 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 ==