Index: generic/nsf.c =================================================================== diff -u -r833cb4b2fb84ddf0aebfc134be2013119c6f668d -rbd39c6f1905eff26cec664d0bb2db580925b21e6 --- generic/nsf.c (.../nsf.c) (revision 833cb4b2fb84ddf0aebfc134be2013119c6f668d) +++ generic/nsf.c (.../nsf.c) (revision bd39c6f1905eff26cec664d0bb2db580925b21e6) @@ -2192,33 +2192,36 @@ * For multiple inheritance (more than one superclass), make sure that * required precedence orders are precomputed. */ - + if (likely(cl->super != NULL) && unlikely(cl->super->nextPtr != NULL)) { for (sl = cl->super; sl; sl = sl->nextPtr) { - if (unlikely(sl->cl->order == NULL)) { - if (cl != sl->cl) { - NsfClasses *pl; + NsfClasses *pl; #if defined(NSF_LINEARIZER_TRACE) + fprintf(stderr, "====== PrecedenceOrder mi, check %s %p \n", + ClassName(sl->cl), sl->cl->order); +#endif + if (unlikely(sl->cl->order == NULL) && likely(cl != sl->cl)) { +#if defined(NSF_LINEARIZER_TRACE) fprintf(stderr, "====== PrecedenceOrder computes required order for %s \n", ClassName(sl->cl)); #endif PrecedenceOrder(sl->cl); #if defined(NSF_LINEARIZER_TRACE) - NsfClassListPrint("====== PO:", sl->cl->order); + NsfClassListPrint("====== PO:", sl->cl->order); #endif - for (pl = sl->cl->order; pl; pl = pl->nextPtr) { + } + + for (pl = sl->cl->order; pl; pl = pl->nextPtr) { #if defined(NSF_LINEARIZER_TRACE) - fprintf(stderr, "====== PO order: %s %p\n", ClassName(pl->cl), pl->cl->order); + fprintf(stderr, "====== PO order: %s %p\n", ClassName(pl->cl), pl->cl->order); #endif - if (pl->cl->order == NULL) { + if (pl->cl->order == NULL) { #if defined(NSF_LINEARIZER_TRACE) - fprintf(stderr, "========== recurse\n"); + fprintf(stderr, "========== recurse\n"); #endif - PrecedenceOrder(pl->cl); - } - } + PrecedenceOrder(pl->cl); } } }