* %sccs.include.proprietary.c%
static char sccsid
[] = "@(#)3.flow.c 4.2 (Berkeley) %G%";
correct the flow of control in the new program - use GOTO's which may
be changed later to NEXT, BREAK, etc.
#define BRANCHTYPE(v) (NTYPE(v) == GOVX )
#define HASLEX(t) (t != GOVX && t != COMPVX && t != ASGOVX && t != ITERVX )
/* for these, control never flows directly to following statement */
fixflow(START
,UNDEFINED
);
VERT autolex
; /* lexical successor of v */
if (HASLEX(NTYPE(v
)) && NTYPE(v
) != ICASVX
)
if (DEFINED(REACH(v
)) && REACH(v
) != lex
)
insib(v
,makebr(REACH(v
)));
else if (NTYPE(v
) == DOVX
&& ARC(v
,1) != lex
)
insib(v
,makebr(ARC(v
,1)));
chlex
= lexval(v
,autolex
);
for (i
= 0; i
< CHILDNUM(v
); ++i
)
ASSERT(i
< ARCNUM(v
),fixflow
);
ASSERT(DEFINED(z
), fixflow
);
fixflow(RSIB(v
),autolex
);
if (!HASLEX(NTYPE(v
))) return(UNDEFINED
);
if (NTYPE(v
) == ICASVX
|| NTYPE(v
) == ACASVX
)
else if (BRANCHTYPE(sib
))
makebr(w
) /* make branching node leading to w */