From eba92c951ed6038829c2500928c19ac4949f5d92 Mon Sep 17 00:00:00 2001 From: Richard Stallman Date: Sun, 23 May 1993 19:33:55 +0000 Subject: [PATCH] (__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 --- gcc/objc/init.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/gcc/objc/init.c b/gcc/objc/init.c index ea601a02e14..220d7d23e64 100644 --- a/gcc/objc/init.c +++ b/gcc/objc/init.c @@ -224,14 +224,15 @@ static void __objc_init_protocols (struct objc_protocol_list* protos) { int i; - Class* proto_class; + static Class* proto_class = 0; if (! protos) 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); return; @@ -241,13 +242,20 @@ __objc_init_protocols (struct objc_protocol_list* protos) for(i = 0; i < protos->count; i++) { - if (((size_t)((id)protos->list[i])->class_pointer) == PROTOCOL_VERSION) - ((id)protos->list[i])->class_pointer = proto_class; - else if (((id)protos->list[i])->class_pointer != proto_class) + struct objc_protocol* aProto = protos->list[i]; + if (((size_t)aProto->class_pointer) == PROTOCOL_VERSION) + { + /* 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, "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); abort (); } -- 2.30.2