Commit eba92c95 by Richard Stallman

(__objc_init_protocols): Call recursively on super protocols.

(__objc_init_protocols): Call recursively
on super protocols.  Make local var `proto_class' static.

From-SVN: r4544
parent ecd023b6
...@@ -224,14 +224,15 @@ static void ...@@ -224,14 +224,15 @@ static void
__objc_init_protocols (struct objc_protocol_list* protos) __objc_init_protocols (struct objc_protocol_list* protos)
{ {
int i; int i;
Class* proto_class; static Class* proto_class = 0;
if (! protos) if (! protos)
return; return;
proto_class = objc_lookup_class("Protocol"); if (!proto_class)
proto_class = objc_lookup_class("Protocol");
if (proto_class == 0 && ! list_find (&unclaimed_proto_list, protos)) if (!proto_class)
{ {
unclaimed_proto_list = list_cons (protos, unclaimed_proto_list); unclaimed_proto_list = list_cons (protos, unclaimed_proto_list);
return; return;
...@@ -241,13 +242,20 @@ __objc_init_protocols (struct objc_protocol_list* protos) ...@@ -241,13 +242,20 @@ __objc_init_protocols (struct objc_protocol_list* protos)
for(i = 0; i < protos->count; i++) for(i = 0; i < protos->count; i++)
{ {
if (((size_t)((id)protos->list[i])->class_pointer) == PROTOCOL_VERSION) struct objc_protocol* aProto = protos->list[i];
((id)protos->list[i])->class_pointer = proto_class; if (((size_t)aProto->class_pointer) == PROTOCOL_VERSION)
else if (((id)protos->list[i])->class_pointer != proto_class) {
/* assign class pointer */
aProto->class_pointer = proto_class;
/* init super protocols */
__objc_init_protocols (aProto->protocol_list);
}
else if (protos->list[i]->class_pointer != proto_class)
{ {
fprintf (stderr, fprintf (stderr,
"Version %d doesn't match runtime protocol version %d\n", "Version %d doesn't match runtime protocol version %d\n",
((size_t)((id)protos->list[i])->class_pointer), ((size_t)protos->list[i]->class_pointer),
PROTOCOL_VERSION); PROTOCOL_VERSION);
abort (); abort ();
} }
......
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