Commit 12d94bff by Richard Kenner

(objc_module): Eliminate statics variable.

From-SVN: r13713
parent d3d71914
...@@ -134,6 +134,16 @@ objc_error_handler objc_set_error_handler(objc_error_handler func); ...@@ -134,6 +134,16 @@ objc_error_handler objc_set_error_handler(objc_error_handler func);
extern BOOL objc_trace; extern BOOL objc_trace;
/* For every class which happens to have statically allocated instances in
this module, one OBJC_STATIC_INSTANCES is allocated by the compiler.
INSTANCES is NULL terminated and points to all statically allocated
instances of this class. */
struct objc_static_instances
{
char *class_name;
id instances[0];
};
/* /*
** 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
...@@ -150,23 +160,16 @@ typedef struct objc_symtab { ...@@ -150,23 +160,16 @@ typedef struct objc_symtab {
unsigned short cat_def_cnt; /* Number of categories unsigned short cat_def_cnt; /* Number of categories
compiled (defined) in the compiled (defined) in the
module. */ module. */
void *defs[1]; /* Variable array of pointers. void *defs[1]; /* Variable array of pointers.
cls_def_cnt of type Class cls_def_cnt of type Class
followed by cat_def_cnt of followed by cat_def_cnt of
type Category_t. */ type Category_t, followed
by a NULL terminated array
of objc_static_instances. */
} Symtab, *Symtab_t; } Symtab, *Symtab_t;
/* For every class which happens to have statically allocated instances in
this module, one OBJC_STATIC_INSTANCES is allocated by the compiler.
INSTANCES is NULL terminated and points to all statically allocated
instances of this class. */
struct objc_static_instances
{
char *class_name;
id instances[0];
};
/* /*
** The compiler generates one of these structures for each module that ** The compiler generates one of these structures for each module that
** composes the executable (eg main.m). ** composes the executable (eg main.m).
...@@ -183,9 +186,6 @@ typedef struct objc_module { ...@@ -183,9 +186,6 @@ typedef struct objc_module {
module was generated. The module was generated. The
name includes the path. */ name includes the path. */
/* Pointer to a NULL terminated array of objc_static_instances. */
struct objc_static_instances **statics;
Symtab_t symtab; /* Pointer to the Symtab of Symtab_t symtab; /* Pointer to the Symtab of
the module. The Symtab the module. The Symtab
holds an array of holds an array of
...@@ -443,6 +443,12 @@ BOOL sel_is_mapped (SEL aSel); ...@@ -443,6 +443,12 @@ BOOL sel_is_mapped (SEL aSel);
extern id class_create_instance(Class class); extern id class_create_instance(Class class);
/* You should call this function immediately after a bundle has loaded the
code. This function sends the +load message to all classes/categories
just loaded and then calls the _objc_load_callback function for each
class/category. */
extern void objc_send_load (void);
static inline const char * static inline const char *
class_get_class_name(Class class) class_get_class_name(Class class)
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment