char *typename
[TYPENUM
] = {"STLNVX", "IFVX", "DOVX", "IOVX", "FMTVX",
"COMPVX", "ASVX", "ASGOVX", "LOOPVX", "WHIVX",
"UNTVX", "ITERVX", "THENVX", "STOPVX", "RETVX",
"DUMVX", "GOVX", "BRKVX", "NXTVX", "SWCHVX",
int hascom
[TYPENUM
] = {2, 2, 2, 2, 2,
int nonarcs
[TYPENUM
] = {FIXED
+3, FIXED
+4, FIXED
+2, FIXED
+3, FIXED
+2,
FIXED
+2, FIXED
+2, FIXED
+2, FIXED
+1, FIXED
+1,
FIXED
+1, FIXED
+4, FIXED
+3, FIXED
, FIXED
,
FIXED
+2, FIXED
+1, FIXED
+ 1, FIXED
+ 1, FIXED
+3,
int childper
[TYPENUM
] = {0, 2, 1, 0, 0,
int arcsper
[TYPENUM
] = {1, 2, 2, 3, 0,
-(FIXED
+1), 1, -(FIXED
+1), 1, 1,
-FIXED
, 1, 1, 1, -(FIXED
+1),
ASSERT(0 <= i
&& i
< ARCNUM(v
), arc
);
return(&graph
[v
][nonarcs
[NTYPE(v
)] + i
]);
ASSERT(DEFINED(v
),lchild
);
ASSERT(0 <= i
&& i
< childper
[NTYPE(v
)],lchild
);
return(&graph
[v
][nonarcs
[NTYPE(v
)]-i
-1]);
ASSERT((NTYPE(v
) == type
) && (0 <= j
) && (j
< nonarcs
[type
] - FIXED
), vxpart
);
return(&graph
[v
][FIXED
+j
]);
ASSERT(ty
== COMPVX
|| ty
== ASGOVX
|| ty
== ASVX
|| ty
== SWCHVX
|| ty
== ICASVX
,expres
);
return(&graph
[v
][FIXED
]);
ASSERT(NTYPE(v
) == IFVX
|| NTYPE(v
) == ACASVX
,negpart
);
return(&graph
[v
][FIXED
+1]);
ASSERT(NTYPE(v
) == IFVX
|| NTYPE(v
) == ACASVX
, predic
);
return(&graph
[v
][FIXED
]);
ASSERT(NTYPE(v
) == GOVX
|| NTYPE(v
) == BRKVX
|| NTYPE(v
) == NXTVX
, level
);
return(&graph
[v
][FIXED
]);
ASSERT(NTYPE(v
) == STLNVX
|| NTYPE(v
) == FMTVX
,stlfmt
);
return(&graph
[v
][FIXED
+ n
]);
temp
=realloc(graph
,maxnode
*sizeof(*graph
));
wds
= nonarcs
[type
] + arcnum
;
graph
[nodenum
] = galloc(sizeof(*graph
) * wds
);
for (i
= 0; i
< wds
; i
++) graph
[nodenum
][i
] = 0;
ARCNUM(nodenum
) = arcnum
;