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

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

	* class.c (objc_next_class): Removed.
	(class_pose_as): Removed.
	(CLASSOF): Removed.
	(class_table_replace): Removed.
	(objc_lookup_class): Removed.

From-SVN: r174767
This commit is contained in:
Nicola Pero 2011-06-07 21:20:42 +00:00 committed by Nicola Pero
parent ac07a61dda
commit 69c3298059
2 changed files with 9 additions and 151 deletions

View File

@ -1,3 +1,11 @@
2011-06-07 Nicola Pero <nicola.pero@meta-innovation.com>
* class.c (objc_next_class): Removed.
(class_pose_as): Removed.
(CLASSOF): Removed.
(class_table_replace): Removed.
(objc_lookup_class): Removed.
2011-06-07 Nicola Pero <nicola.pero@meta-innovation.com>
Removed the Traditional Objective-C runtime public API.

View File

@ -203,41 +203,6 @@ class_table_insert (const char *class_name, Class class_pointer)
objc_mutex_unlock (__class_table_lock);
}
/* Replace a class in the table (used only by poseAs:). */
static void
class_table_replace (Class old_class_pointer, Class new_class_pointer)
{
int hash;
class_node_ptr node;
objc_mutex_lock (__class_table_lock);
hash = 0;
node = class_table_array[hash];
while (hash < CLASS_TABLE_SIZE)
{
if (node == NULL)
{
hash++;
if (hash < CLASS_TABLE_SIZE)
node = class_table_array[hash];
}
else
{
Class class1 = node->pointer;
if (class1 == old_class_pointer)
node->pointer = new_class_pointer;
node = node->next;
}
}
objc_mutex_unlock (__class_table_lock);
}
/* Get a class from the table. This does not need mutex protection.
Currently, this function is called each time you call a static
method, this is why it must be very fast. */
@ -760,16 +725,6 @@ objc_disposeClassPair (Class class_)
objc_free (class_);
}
/* Traditional GNU Objective-C Runtime API. */
/* Get the class object for the class named NAME. If NAME does not
identify a known class, the hook _objc_lookup_class is called. If
this fails, nil is returned. */
Class
objc_lookup_class (const char *name)
{
return objc_getClass (name);
}
/* Traditional GNU Objective-C Runtime API. Important: this method is
called automatically by the compiler while messaging (if using the
traditional ABI), so it is worth keeping it fast; don't make it
@ -802,38 +757,13 @@ objc_get_class (const char *name)
return 0;
}
/* This is used by the compiler too. */
Class
objc_get_meta_class (const char *name)
{
return objc_get_class (name)->class_pointer;
}
/* This function provides a way to enumerate all the classes in the
executable. Pass *ENUM_STATE == NULL to start the enumeration. The
function will return 0 when there are no more classes.
For example:
id class;
void *es = NULL;
while ((class = objc_next_class (&es)))
... do something with class;
*/
Class
objc_next_class (void **enum_state)
{
Class class;
objc_mutex_lock (__objc_runtime_mutex);
/* Make sure the table is there. */
assert (__class_table_lock);
class = class_table_next ((struct class_table_enumerator **) enum_state);
objc_mutex_unlock (__objc_runtime_mutex);
return class;
}
/* This is used when the implementation of a method changes. It goes
through all classes, looking for the ones that have these methods
(either method_a or method_b; method_b can be NULL), and reloads
@ -1035,83 +965,3 @@ class_getInstanceSize (Class class_)
return class_->instance_size;
}
#define CLASSOF(c) ((c)->class_pointer)
Class
class_pose_as (Class impostor, Class super_class)
{
if (! CLS_ISRESOLV (impostor))
__objc_resolve_class_links ();
/* Preconditions */
assert (impostor);
assert (super_class);
assert (impostor->super_class == super_class);
assert (CLS_ISCLASS (impostor));
assert (CLS_ISCLASS (super_class));
assert (impostor->instance_size == super_class->instance_size);
{
Class *subclass = &(super_class->subclass_list);
/* Move subclasses of super_class to impostor. */
while (*subclass)
{
Class nextSub = (*subclass)->sibling_class;
if (*subclass != impostor)
{
Class sub = *subclass;
/* Classes */
sub->sibling_class = impostor->subclass_list;
sub->super_class = impostor;
impostor->subclass_list = sub;
/* It will happen that SUB is not a class object if it is
the top of the meta class hierarchy chain (root
meta-class objects inherit their class object). If
that is the case... don't mess with the meta-meta
class. */
if (CLS_ISCLASS (sub))
{
/* Meta classes */
CLASSOF (sub)->sibling_class =
CLASSOF (impostor)->subclass_list;
CLASSOF (sub)->super_class = CLASSOF (impostor);
CLASSOF (impostor)->subclass_list = CLASSOF (sub);
}
}
*subclass = nextSub;
}
/* Set subclasses of superclass to be impostor only. */
super_class->subclass_list = impostor;
CLASSOF (super_class)->subclass_list = CLASSOF (impostor);
/* Set impostor to have no sibling classes. */
impostor->sibling_class = 0;
CLASSOF (impostor)->sibling_class = 0;
}
/* Check relationship of impostor and super_class is kept. */
assert (impostor->super_class == super_class);
assert (CLASSOF (impostor)->super_class == CLASSOF (super_class));
/* This is how to update the lookup table. Regardless of what the
keys of the hashtable is, change all values that are superclass
into impostor. */
objc_mutex_lock (__objc_runtime_mutex);
class_table_replace (super_class, impostor);
objc_mutex_unlock (__objc_runtime_mutex);
/* Next, we update the dispatch tables... */
__objc_update_dispatch_table_for_class (CLASSOF (impostor));
__objc_update_dispatch_table_for_class (impostor);
return impostor;
}