|
|
|
@ -41,11 +41,9 @@ extern "C" {
|
|
|
|
/* For functions which return Method_t */
|
|
|
|
/* For functions which return Method_t */
|
|
|
|
#define METHOD_NULL (Method_t)0
|
|
|
|
#define METHOD_NULL (Method_t)0
|
|
|
|
/* Boolean typedefs */
|
|
|
|
/* Boolean typedefs */
|
|
|
|
/*
|
|
|
|
/* Method descriptor returned by introspective Object methods.
|
|
|
|
** Method descriptor returned by introspective Object methods.
|
|
|
|
This is really just the first part of the more complete objc_method
|
|
|
|
** This is really just the first part of the more complete objc_method
|
|
|
|
structure defined below and used internally by the runtime. */
|
|
|
|
** structure defined below and used internally by the runtime.
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
struct objc_method_description
|
|
|
|
struct objc_method_description
|
|
|
|
{
|
|
|
|
{
|
|
|
|
SEL name; /* this is a selector, not a string */
|
|
|
|
SEL name; /* this is a selector, not a string */
|
|
|
|
@ -85,36 +83,32 @@ struct objc_method_description
|
|
|
|
#define _C_COMPLEX 'j'
|
|
|
|
#define _C_COMPLEX 'j'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
/* Error handling
|
|
|
|
** Error handling
|
|
|
|
|
|
|
|
**
|
|
|
|
Call objc_error() or objc_verror() to record an error; this error
|
|
|
|
** Call objc_error() or objc_verror() to record an error; this error
|
|
|
|
routine will generally exit the program but not necessarily if the
|
|
|
|
** routine will generally exit the program but not necessarily if the
|
|
|
|
user has installed his own error handler.
|
|
|
|
** user has installed his own error handler.
|
|
|
|
|
|
|
|
**
|
|
|
|
Call objc_set_error_handler to assign your own function for
|
|
|
|
** Call objc_set_error_handler to assign your own function for
|
|
|
|
handling errors. The function should return YES if it is ok
|
|
|
|
** handling errors. The function should return YES if it is ok
|
|
|
|
to continue execution, or return NO or just abort if the
|
|
|
|
** to continue execution, or return NO or just abort if the
|
|
|
|
program should be stopped. The default error handler is just to
|
|
|
|
** program should be stopped. The default error handler is just to
|
|
|
|
print a message on stderr.
|
|
|
|
** print a message on stderr.
|
|
|
|
|
|
|
|
**
|
|
|
|
The error handler function should be of type objc_error_handler
|
|
|
|
** The error handler function should be of type objc_error_handler
|
|
|
|
The first parameter is an object instance of relevance.
|
|
|
|
** The first parameter is an object instance of relevance.
|
|
|
|
The second parameter is an error code.
|
|
|
|
** The second parameter is an error code.
|
|
|
|
The third parameter is a format string in the printf style.
|
|
|
|
** The third parameter is a format string in the printf style.
|
|
|
|
The fourth parameter is a variable list of arguments. */
|
|
|
|
** The fourth parameter is a variable list of arguments.
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
extern void objc_error(id object, int code, const char* fmt, ...);
|
|
|
|
extern void objc_error(id object, int code, const char* fmt, ...);
|
|
|
|
extern void objc_verror(id object, int code, const char* fmt, va_list ap);
|
|
|
|
extern 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);
|
|
|
|
typedef BOOL (*objc_error_handler)(id, int code, const char *fmt, va_list ap);
|
|
|
|
extern objc_error_handler objc_set_error_handler(objc_error_handler func);
|
|
|
|
extern objc_error_handler objc_set_error_handler(objc_error_handler func);
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
/* Error codes
|
|
|
|
** Error codes
|
|
|
|
These are used by the runtime library, and your
|
|
|
|
** These are used by the runtime library, and your
|
|
|
|
error handling may use them to determine if the error is
|
|
|
|
** error handling may use them to determine if the error is
|
|
|
|
hard or soft thus whether execution can continue or abort. */
|
|
|
|
** hard or soft thus whether execution can continue or abort.
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
#define OBJC_ERR_UNKNOWN 0 /* Generic error */
|
|
|
|
#define OBJC_ERR_UNKNOWN 0 /* Generic error */
|
|
|
|
|
|
|
|
|
|
|
|
#define OBJC_ERR_OBJC_VERSION 1 /* Incorrect runtime version */
|
|
|
|
#define OBJC_ERR_OBJC_VERSION 1 /* Incorrect runtime version */
|
|
|
|
@ -139,10 +133,8 @@ extern objc_error_handler objc_set_error_handler(objc_error_handler func);
|
|
|
|
|
|
|
|
|
|
|
|
#define OBJC_ERR_BAD_STATE 40 /* Bad thread state */
|
|
|
|
#define OBJC_ERR_BAD_STATE 40 /* Bad thread state */
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
/* Set this variable nonzero to print a line describing each
|
|
|
|
** Set this variable nonzero to print a line describing each
|
|
|
|
message that is sent. (this is currently disabled) */
|
|
|
|
** message that is sent. (this is currently disabled)
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
extern BOOL objc_trace;
|
|
|
|
extern BOOL objc_trace;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -160,14 +152,12 @@ struct objc_static_instances
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
/* Whereas a Module (defined further down) is the root (typically) of a file,
|
|
|
|
** Whereas a Module (defined further down) is the root (typically) of a file,
|
|
|
|
a Symtab is the root of the class and category definitions within the
|
|
|
|
** a Symtab is the root of the class and category definitions within the
|
|
|
|
module.
|
|
|
|
** module.
|
|
|
|
|
|
|
|
**
|
|
|
|
A Symtab contains a variable length array of pointers to classes and
|
|
|
|
** A Symtab contains a variable length array of pointers to classes and
|
|
|
|
categories defined in the module. */
|
|
|
|
** categories defined in the module.
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
typedef struct objc_symtab {
|
|
|
|
typedef struct objc_symtab {
|
|
|
|
unsigned long sel_ref_cnt; /* Unknown. */
|
|
|
|
unsigned long sel_ref_cnt; /* Unknown. */
|
|
|
|
SEL refs; /* Unknown. */
|
|
|
|
SEL refs; /* Unknown. */
|
|
|
|
|