|
|
1.1 root 1: #include <stdio.h>
2: #include "def.h"
3: #include "3.def.h"
4:
5:
6: getbranch(head)
7: VERT *head;
8: {
9: VERT v;
10: for (v = 0; v < nodenum; ++v)
11: LABEL(v) = FALSE;
12: for (v = START; DEFINED(v); v = RSIB(v))
13: chkbranch(v,head);
14: addlab(START);
15: }
16:
17:
18:
19: chkbranch(v,head)
20: VERT v,*head;
21: {
22: VERT w;
23: int i;
24: switch(NTYPE(v))
25: {
26: case GOVX:
27: for (i = 1, w = head[v]; DEFINED(w); w = head[w], ++i)
28: {
29: if (i > 1 && !levnxt && !levbrk) break;
30: if (ARC(v,0) == BRK(w) && (levbrk || i == 1))
31: {
32: NTYPE(v) = BRKVX;
33: LEVEL(v) = i;
34: break;
35: }
36: else if (ARC(v,0) == NXT(w) && (levnxt || i == 1))
37: {
38: NTYPE(v) = NXTVX;
39: LEVEL(v) = i;
40: break;
41: }
42: }
43: if (NTYPE(v) == GOVX)
44: {
45: if (ARC(v,0) == stopvert)
46: NTYPE(v) = STOPVX;
47: else if (ARC(v,0) == retvert)
48: NTYPE(v) = RETVX;
49: else LABEL(ARC(v,0)) = TRUE;
50: }
51: break;
52: case COMPVX:
53: case ASGOVX:
54: for (i = 0; i < ARCNUM(v); ++i)
55: LABEL(ARC(v,i)) = TRUE;
56: break;
57: case IOVX:
58: if (DEFINED(ARC(v,ENDEQ)))
59: LABEL(ARC(v,ENDEQ)) = TRUE;
60: if (DEFINED(ARC(v,ERREQ)))
61: LABEL(ARC(v,ERREQ)) = TRUE;
62: if (DEFINED(FMTREF(v)))
63: LABEL(FMTREF(v)) = TRUE;
64: break;
65: }
66: for (i = 0; i < CHILDNUM(v); ++i)
67: for (w = LCHILD(v,i); DEFINED(w); w = RSIB(w))
68: chkbranch(w,head);
69: }
70:
71:
72: addlab(v) /* add labels */
73: VERT v;
74: {
75: int recvar;
76: if (NTYPE(v) != ITERVX && LABEL(v) )
77: LABEL(v) = nxtlab();
78: RECURSE(addlab,v,recvar);
79: if (NTYPE(v) == ITERVX && LABEL(NXT(v)))
80: LABEL(NXT(v)) = nxtlab();
81: }
82:
83:
84: nxtlab()
85: {
86: static count;
87: return(labinit + (count++) * labinc);
88: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.