diff options
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/objc.dg/torture/forward-1.m | 4 | ||||
-rw-r--r-- | libobjc/ChangeLog | 16 | ||||
-rw-r--r-- | libobjc/Makefile.in | 1 | ||||
-rw-r--r-- | libobjc/Object.m | 63 | ||||
-rw-r--r-- | libobjc/error.c | 50 | ||||
-rw-r--r-- | libobjc/libobjc.def | 2 | ||||
-rw-r--r-- | libobjc/objc/deprecated/Object.h | 14 | ||||
-rw-r--r-- | libobjc/objc/deprecated/objc_error.h | 56 | ||||
-rw-r--r-- | libobjc/objc/objc-api.h | 2 | ||||
-rw-r--r-- | libobjc/sendmsg.c | 12 |
11 files changed, 25 insertions, 199 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7c9adb1..3b1c8b9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2011-06-02 Nicola Pero <nicola.pero@meta-innovation.com> + + * objc.dg/torture/forward-1.m (main): Updated testcase. + 2011-06-02 Kaz Kojima <kkojima@gcc.gnu.org> PR target/49163 diff --git a/gcc/testsuite/objc.dg/torture/forward-1.m b/gcc/testsuite/objc.dg/torture/forward-1.m index bccf4a1..0d6f9ac 100644 --- a/gcc/testsuite/objc.dg/torture/forward-1.m +++ b/gcc/testsuite/objc.dg/torture/forward-1.m @@ -71,7 +71,9 @@ id forwarder, receiver; /* If we have a reciever try to perform on that object */ if (receiver) return [receiver performv: theSel: theArgFrame]; - return [self doesNotRecognize:theSel]; + + /* Normally you'd emit an error here. */ + printf ("Unrecognized selector\n"); } @end int main() diff --git a/libobjc/ChangeLog b/libobjc/ChangeLog index 00cf2ac..cb2a847 100644 --- a/libobjc/ChangeLog +++ b/libobjc/ChangeLog @@ -1,3 +1,19 @@ +2011-06-02 Nicola Pero <nicola.pero@meta-innovation.com> + + * Makefile.in (OBJC_DEPRECATED_H): Removed objc_error.h. + * objc/deprecated/objc_error.h: Removed. + * objc/objc-api.h: Do not include deprecated/objc_error.h. + * libobjc.def (objc_error, objc_verror): Removed. + * error.c (_objc_error_handler, objc_error, objc_verror, + objc_set_error_handler): Removed. + * Object.m ([-error:], [-perform:], [-perform:with:], + [-perform:with:with], [-subclassResponsibility:], + [-notImplemented:], [-shouldNotImplement:], [-doesNotRecognize:]): + Removed. + * objc/deprecated/Object.h: Removed the same methods. + * sendmsg.c (__objc_forward): Do not try to invoke the "error:" + method after trying to invoke the "doesNotRecognize:" method. + 2011-05-26 Nicola Pero <nicola.pero@meta-innovation.com> * sendmsg.c: Reindented part of the file. No non-trivial changes diff --git a/libobjc/Makefile.in b/libobjc/Makefile.in index e52f441..12f3e83 100644 --- a/libobjc/Makefile.in +++ b/libobjc/Makefile.in @@ -139,7 +139,6 @@ OBJC_DEPRECATED_H = \ STR.h \ hash.h \ objc-list.h \ - objc_error.h \ objc_get_uninstalled_dtable.h \ objc_malloc.h \ objc_msg_sendv.h \ diff --git a/libobjc/Object.m b/libobjc/Object.m index 224c0aa..f83d072 100644 --- a/libobjc/Object.m +++ b/libobjc/Object.m @@ -248,30 +248,6 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see :class_get_class_method(self->isa, aSel))); } -- perform:(SEL)aSel -{ - IMP msg = objc_msg_lookup(self, aSel); - if (!msg) - return [self error:"invalid selector passed to %s", sel_get_name(_cmd)]; - return (*msg)(self, aSel); -} - -- perform:(SEL)aSel with:anObject -{ - IMP msg = objc_msg_lookup(self, aSel); - if (!msg) - return [self error:"invalid selector passed to %s", sel_get_name(_cmd)]; - return (*msg)(self, aSel, anObject); -} - -- perform:(SEL)aSel with:anObject1 with:anObject2 -{ - IMP msg = objc_msg_lookup(self, aSel); - if (!msg) - return [self error:"invalid selector passed to %s", sel_get_name(_cmd)]; - return (*msg)(self, aSel, anObject1, anObject2); -} - - (retval_t)forward:(SEL)aSel :(arglist_t)argFrame { (void) argFrame; /* UNUSED */ @@ -302,45 +278,6 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see return nil; } -- subclassResponsibility:(SEL)aSel -{ - return [self error:"subclass should override %s", sel_get_name(aSel)]; -} - -- notImplemented:(SEL)aSel -{ - return [self error:"method %s not implemented", sel_get_name(aSel)]; -} - -- shouldNotImplement:(SEL)aSel -{ - return [self error:"%s should not implement %s", - object_get_class_name(self), sel_get_name(aSel)]; -} - -- doesNotRecognize:(SEL)aSel -{ - return [self error:"%s does not recognize %s", - object_get_class_name(self), sel_get_name(aSel)]; -} - -- error:(const char *)aString, ... -{ -#define FMT "error: %s (%s)\n%s\n" - char fmt[(strlen((char*)FMT)+strlen((char*)object_get_class_name(self)) - +((aString!=NULL)?strlen((char*)aString):0)+8)]; - va_list ap; - - sprintf(fmt, FMT, object_get_class_name(self), - object_is_instance(self)?"instance":"class", - (aString!=NULL)?aString:""); - va_start(ap, aString); - objc_verror(self, OBJC_ERR_UNKNOWN, fmt, ap); - va_end(ap); - return nil; -#undef FMT -} - + (int)version { return class_get_version(self); diff --git a/libobjc/error.c b/libobjc/error.c index 1dae365..51d6402 100644 --- a/libobjc/error.c +++ b/libobjc/error.c @@ -45,53 +45,3 @@ _objc_abort (const char *fmt, ...) abort (); va_end (ap); } - -/* The rest of the file is deprecated. */ -#include "objc/objc-api.h" /* For objc_error_handler. */ - -/* -** Error handler function -** NULL so that default is to just print to stderr -*/ -static objc_error_handler _objc_error_handler = NULL; - -/* Trigger an objc error */ -void -objc_error (id object, int code, const char *fmt, ...) -{ - va_list ap; - - va_start (ap, fmt); - objc_verror (object, code, fmt, ap); - va_end (ap); -} - -/* Trigger an objc error */ -void -objc_verror (id object, int code, const char *fmt, va_list ap) -{ - BOOL result = NO; - - /* Call the error handler if its there - Otherwise print to stderr */ - if (_objc_error_handler) - result = (*_objc_error_handler) (object, code, fmt, ap); - else - vfprintf (stderr, fmt, ap); - - /* Continue if the error handler says its ok - Otherwise abort the program */ - if (result) - return; - else - abort (); -} - -/* Set the error handler */ -objc_error_handler -objc_set_error_handler (objc_error_handler func) -{ - objc_error_handler temp = _objc_error_handler; - _objc_error_handler = func; - return temp; -} diff --git a/libobjc/libobjc.def b/libobjc/libobjc.def index e84d839..a8d6620 100644 --- a/libobjc/libobjc.def +++ b/libobjc/libobjc.def @@ -25,7 +25,6 @@ search_for_method_in_list objc_get_uninstalled_dtable objc_hash_is_key_in_hash hash_is_key_in_hash -objc_verror _objc_load_callback objc_malloc objc_atomic_malloc @@ -53,7 +52,6 @@ objc_thread_remove __objc_class_name_Object __objc_class_name_Protocol __objc_class_name_NXConstantString -objc_error __objc_object_alloc __objc_object_copy __objc_object_dispose diff --git a/libobjc/objc/deprecated/Object.h b/libobjc/objc/deprecated/Object.h index e15cf7d..7a13449 100644 --- a/libobjc/objc/deprecated/Object.h +++ b/libobjc/objc/deprecated/Object.h @@ -48,11 +48,6 @@ + (struct objc_method_description *)descriptionForInstanceMethod:(SEL)aSel; - (struct objc_method_description *)descriptionForMethod:(SEL)aSel; -/* Sending messages determined at run time */ -- perform:(SEL)aSel; -- perform:(SEL)aSel with:anObject; -- perform:(SEL)aSel with:anObject1 with:anObject2; - /* Forwarding */ - (retval_t)forward:(SEL)aSel :(arglist_t)argFrame; - (retval_t)performv:(SEL)aSel :(arglist_t)argFrame; @@ -61,15 +56,6 @@ + poseAs:(Class)aClassObject; - (Class)transmuteClassTo:(Class)aClassObject; -/* Enforcing intentions */ -- subclassResponsibility:(SEL)aSel; -- notImplemented:(SEL)aSel; -- shouldNotImplement:(SEL)aSel; - -/* Error handling */ -- doesNotRecognize:(SEL)aSel; -- error:(const char *)aString, ...; - /* Archiving */ + (int)version; + setVersion:(int)aVersion; diff --git a/libobjc/objc/deprecated/objc_error.h b/libobjc/objc/deprecated/objc_error.h deleted file mode 100644 index 7a7ebe9..0000000 --- a/libobjc/objc/deprecated/objc_error.h +++ /dev/null @@ -1,56 +0,0 @@ -/* This API is incredibly limited and unsophisticated. objc_error() - generally causes the program to abort, so it should only be used - when something so dramatic happens that it could be pointless to - continue. Only two cases I can think of: failure to allocate new - memory or failure to load an Objective-C module. -*/ -/* Error handling - - Call objc_error() or objc_verror() to record an error; this error - routine will generally exit the program but not necessarily if the - user has installed his own error handler. - - Call objc_set_error_handler to assign your own function for - handling errors. The function should return YES if it is ok - to continue execution, or return NO or just abort if the - program should be stopped. The default error handler is just to - print a message on stderr. - - The error handler function should be of type objc_error_handler - The first parameter is an object instance of relevance. - The second parameter is an error code. - The third parameter is a format string in the printf style. - The fourth parameter is a variable list of arguments. */ -void objc_error(id object, int code, const char* fmt, ...); -void objc_verror(id object, int code, const char* fmt, va_list ap); -typedef BOOL (*objc_error_handler)(id, int code, const char *fmt, va_list ap); -objc_error_handler objc_set_error_handler(objc_error_handler func); - -/* Error codes - These are used by the runtime library, and your - error handling may use them to determine if the error is - hard or soft thus whether execution can continue or abort. */ -#define OBJC_ERR_UNKNOWN 0 /* Generic error */ - -#define OBJC_ERR_OBJC_VERSION 1 /* Incorrect runtime version */ -#define OBJC_ERR_GCC_VERSION 2 /* Incorrect compiler version */ -#define OBJC_ERR_MODULE_SIZE 3 /* Bad module size */ -#define OBJC_ERR_PROTOCOL_VERSION 4 /* Incorrect protocol version */ - -#define OBJC_ERR_MEMORY 10 /* Out of memory */ - -#define OBJC_ERR_RECURSE_ROOT 20 /* Attempt to archive the root - object more than once. */ -#define OBJC_ERR_BAD_DATA 21 /* Didn't read expected data */ -#define OBJC_ERR_BAD_KEY 22 /* Bad key for object */ -#define OBJC_ERR_BAD_CLASS 23 /* Unknown class */ -#define OBJC_ERR_BAD_TYPE 24 /* Bad type specification */ -#define OBJC_ERR_NO_READ 25 /* Cannot read stream */ -#define OBJC_ERR_NO_WRITE 26 /* Cannot write stream */ -#define OBJC_ERR_STREAM_VERSION 27 /* Incorrect stream version */ -#define OBJC_ERR_BAD_OPCODE 28 /* Bad opcode */ - -#define OBJC_ERR_UNIMPLEMENTED 30 /* Method is not implemented */ - -#define OBJC_ERR_BAD_STATE 40 /* Bad thread state */ - diff --git a/libobjc/objc/objc-api.h b/libobjc/objc/objc-api.h index 521f79e..42bec77 100644 --- a/libobjc/objc/objc-api.h +++ b/libobjc/objc/objc-api.h @@ -109,8 +109,6 @@ struct objc_method_description equivalent to "*". */ #define _C_ATOM '%' -#include "deprecated/objc_error.h" - #include "deprecated/struct_objc_static_instances.h" #include "deprecated/struct_objc_symtab.h" #include "deprecated/struct_objc_module.h" diff --git a/libobjc/sendmsg.c b/libobjc/sendmsg.c index c84e90f..137731a 100644 --- a/libobjc/sendmsg.c +++ b/libobjc/sendmsg.c @@ -977,16 +977,8 @@ __objc_forward (id object, SEL sel, arglist_t args) : "instance" ), object->class_pointer->name, sel_getName (sel)); - /* TODO: support for error: is surely deprecated ? */ - err_sel = sel_get_any_uid ("error:"); - if (__objc_responds_to (object, err_sel)) - { - imp = get_implementation (object, object->class_pointer, err_sel); - return (*imp) (object, sel_get_any_uid ("error:"), msg); - } - - /* The object doesn't respond to doesNotRecognize: or error:; - Therefore, a default action is taken. */ + /* The object doesn't respond to doesNotRecognize:. Therefore, a + default action is taken. */ _objc_abort ("%s\n", msg); return 0; |