mirror of git://gcc.gnu.org/git/gcc.git
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:
parent
ac07a61dda
commit
69c3298059
|
@ -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>
|
2011-06-07 Nicola Pero <nicola.pero@meta-innovation.com>
|
||||||
|
|
||||||
Removed the Traditional Objective-C runtime public API.
|
Removed the Traditional Objective-C runtime public API.
|
||||||
|
|
152
libobjc/class.c
152
libobjc/class.c
|
@ -203,41 +203,6 @@ class_table_insert (const char *class_name, Class class_pointer)
|
||||||
objc_mutex_unlock (__class_table_lock);
|
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.
|
/* Get a class from the table. This does not need mutex protection.
|
||||||
Currently, this function is called each time you call a static
|
Currently, this function is called each time you call a static
|
||||||
method, this is why it must be very fast. */
|
method, this is why it must be very fast. */
|
||||||
|
@ -760,16 +725,6 @@ objc_disposeClassPair (Class class_)
|
||||||
objc_free (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
|
/* Traditional GNU Objective-C Runtime API. Important: this method is
|
||||||
called automatically by the compiler while messaging (if using the
|
called automatically by the compiler while messaging (if using the
|
||||||
traditional ABI), so it is worth keeping it fast; don't make it
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* This is used by the compiler too. */
|
||||||
Class
|
Class
|
||||||
objc_get_meta_class (const char *name)
|
objc_get_meta_class (const char *name)
|
||||||
{
|
{
|
||||||
return objc_get_class (name)->class_pointer;
|
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
|
/* This is used when the implementation of a method changes. It goes
|
||||||
through all classes, looking for the ones that have these methods
|
through all classes, looking for the ones that have these methods
|
||||||
(either method_a or method_b; method_b can be NULL), and reloads
|
(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;
|
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;
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in New Issue