In libobjc/: 2011-06-02 Nicola Pero <nicola.pero@meta-innovation.com>

In libobjc/:
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.
	
In gcc/testsuite/:
2011-06-02  Nicola Pero  <nicola.pero@meta-innovation.com>

	* objc.dg/torture/forward-1.m (main): Updated testcase.

From-SVN: r174587
This commit is contained in:
Nicola Pero 2011-06-02 23:15:14 +00:00 committed by Nicola Pero
parent a700b5f073
commit e79132c385
11 changed files with 25 additions and 199 deletions

View File

@ -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

View File

@ -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()

View File

@ -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

View File

@ -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 \

View File

@ -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);

View File

@ -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;
}

View File

@ -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

View File

@ -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;

View File

@ -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 */

View File

@ -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"

View File

@ -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;