|
|
1.1 root 1: #ifndef lint
2: static char sccsid[] = "@(#)0.parts.c 4.1 (Berkeley) 2/11/83";
3: #endif not lint
4:
5: #include <stdio.h>
6: #include "def.h"
7:
8: char *typename[TYPENUM] = {"STLNVX", "IFVX", "DOVX", "IOVX", "FMTVX",
9: "COMPVX", "ASVX", "ASGOVX", "LOOPVX", "WHIVX",
10: "UNTVX", "ITERVX", "THENVX", "STOPVX", "RETVX",
11: "DUMVX", "GOVX", "BRKVX", "NXTVX", "SWCHVX",
12: "ACASVX", "ICASVX"
13: };
14: int hascom[TYPENUM] = {2, 2, 2, 2, 2,
15: 2, 2, 2, 0, 0,
16: 0, 0, 2, 0, 0,
17: 0, 0, 0, 0, 2,
18: 2, 0
19: };
20:
21: int nonarcs[TYPENUM] = {FIXED+3, FIXED+4, FIXED+2, FIXED+3, FIXED+2,
22: FIXED+2, FIXED+2, FIXED+2, FIXED+1, FIXED+1,
23: FIXED+1, FIXED+4, FIXED+3, FIXED, FIXED,
24: FIXED+2, FIXED+1, FIXED + 1, FIXED + 1, FIXED+3,
25: FIXED+4, FIXED+2
26: };
27:
28: int childper[TYPENUM] = {0, 2, 1, 0, 0,
29: 0, 0, 0, 1, 1,
30: 1, 1, 1, 0, 0,
31: 1, 0, 0, 0, 1,
32: 2, 1
33: };
34:
35: int arcsper[TYPENUM] = {1, 2, 2, 3, 0,
36: -(FIXED+1), 1, -(FIXED+1), 1, 1,
37: 1, 1, 2, 0, 0,
38: -FIXED, 1, 1, 1, -(FIXED+1),
39: 2, 1
40: };
41:
42: VERT *arc(v,i)
43: VERT v;
44: int i;
45: {
46: ASSERT(DEFINED(v),arc);
47: ASSERT(0 <= i && i < ARCNUM(v), arc);
48: return(&graph[v][nonarcs[NTYPE(v)] + i ]);
49: }
50:
51: VERT *lchild(v,i)
52: VERT v; int i;
53: {
54: ASSERT(DEFINED(v),lchild);
55: ASSERT(0 <= i && i < childper[NTYPE(v)],lchild);
56: return(&graph[v][nonarcs[NTYPE(v)]-i-1]);
57: }
58:
59: int *vxpart(v,type,j)
60: VERT v;
61: int type,j;
62: {
63: ASSERT((NTYPE(v) == type) && (0 <= j) && (j < nonarcs[type] - FIXED), vxpart);
64: return(&graph[v][FIXED+j]);
65: }
66:
67: int *expres(v)
68: VERT v;
69: {
70: int ty;
71: ty = NTYPE(v);
72: ASSERT(ty == COMPVX || ty == ASGOVX || ty == ASVX || ty == SWCHVX || ty == ICASVX,expres);
73: return(&graph[v][FIXED]);
74: }
75:
76: int *negpart(v)
77: VERT v;
78: {
79: ASSERT(NTYPE(v) == IFVX || NTYPE(v) == ACASVX,negpart);
80: return(&graph[v][FIXED+1]);
81: }
82:
83: int *predic(v)
84: VERT v;
85: {
86: ASSERT(NTYPE(v) == IFVX || NTYPE(v) == ACASVX, predic);
87: return(&graph[v][FIXED]);
88: }
89:
90: int *level(v)
91: VERT v;
92: {
93: ASSERT(NTYPE(v) == GOVX || NTYPE(v) == BRKVX || NTYPE(v) == NXTVX, level);
94: return(&graph[v][FIXED]);
95: }
96: int *stlfmt(v,n)
97: VERT v;
98: int n;
99: {
100: ASSERT(NTYPE(v) == STLNVX || NTYPE(v) == FMTVX,stlfmt);
101: return(&graph[v][FIXED + n]);
102: }
103:
104: create(type,arcnum)
105: int type, arcnum;
106: {
107: int i, *temp, wds;
108: if (nodenum >= maxnode)
109: {
110: maxnode += 100;
111: temp=realloc(graph,maxnode*sizeof(*graph));
112: free(graph);
113: graph=temp;
114: }
115: wds = nonarcs[type] + arcnum;
116: graph[nodenum] = galloc(sizeof(*graph) * wds);
117: for (i = 0; i < wds; i++) graph[nodenum][i] = 0;
118: NTYPE(nodenum) = type;
119: if (arcsper[type] < 0)
120: ARCNUM(nodenum) = arcnum;
121:
122: return(nodenum++);
123: }
124:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.