00001 # include "parm.h"
00002
00003 # include "stree/ststructs.mh"
00004
00005 # include "stree/Array.h"
00006
00007 int comp_gden();
00008
00009 Array * list_to_array();
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 gden_order(gden)
00021 NODE * gden;
00022 {
00023 Array * a;
00024 int a_len;
00025 register int i,j;
00026 unsigned *p, *q;
00027 NODE * r;
00028
00029 # ifdef DEBUG
00030 if (gden->kind != LOOPDENOTATION && gden->kind != GUARDEDLIST) {
00031 dbgmsg("gden_order: Improper argument: %x\n", gden);
00032 abort();
00033 }
00034 # endif
00035 a = list_to_array(gden -> gl_list);
00036 a_len = a -> a_size;
00037
00038
00039
00040
00041
00042
00043
00044 qsort(&a->a_body[0], a_len, (sizeof (NODE *)), comp_gden);
00045
00046
00047
00048
00049
00050
00051
00052 chgfld(&(gden -> gl_list), emptylist());
00053 for (i = 0; i < a_len; i++) {
00054 addright(gden -> gl_list, a->a_body[i]);
00055
00056 if(a->a_body[i] -> ge_guard -> kind == WORDELSE) break;
00057 }
00058 free_array(a);
00059 }
00060
00061
00062
00063
00064
00065 comp_gden(p, q)
00066 NODE **p, **q;
00067 {
00068 register int i;
00069
00070 i = comp_st((*p) -> ge_guard, (*q) -> ge_guard,
00071 NIL, NIL
00072
00073 );
00074 if (i == 0) {
00075 i = comp_st((*p) -> ge_element, (*q) -> ge_element, NIL, NIL);
00076 }
00077 return(i);
00078 }