1: #ifndef lint
2: static char sccsid[] = "@(#)4.brace.c 4.1 (Berkeley) 2/11/83";
3: #endif not lint
4:
5: #include <stdio.h>
6: #include "def.h"
7: #include "4.def.h"
8: #include "3.def.h"
9:
10: ndbrace(v) /* determine whether braces needed around subparts of v */
11: /* return TRUE if v ends with IF THEN not in braces */
12: VERT v;
13: {
14: VERT w;
15: int i;
16: LOGICAL endif;
17: endif = FALSE;
18: for (i = 0; i < CHILDNUM(v); ++i)
19: {
20: endif = FALSE;
21: for (w = LCHILD(v,i); DEFINED(w); w = RSIB(w))
22: endif = ndbrace(w);
23: if (NTYPE(v) != DUMVX && NTYPE(v) != ITERVX &&
24: (!DEFINED(LCHILD(v,i)) || compound(v,i) ||
25: (endif && NTYPE(v) == IFVX && !IFTHEN(v) && i == THEN )))
26: /* DUMVX doesn't nest, ITERVX doen't nest since
27: nesting is done at LOOPNODE, etc., must
28: check for IFTHEN followed by unrelated ELSE */
29: {
30: YESBRACE(v,i);
31: endif = FALSE;
32: }
33: }
34: return(endif || IFTHEN(v) );
35: }
36:
37:
38: compound(v,ch) /* return TRUE iff subpart ch of v has multiple statements */
39: VERT v;
40: int ch;
41: {
42: VERT w;
43: w = LCHILD(v,ch);
44: if (!DEFINED(w))
45: return(FALSE);
46: if (NTYPE(w) == ITERVX)
47: {
48: ASSERT(DEFINED(NXT(w)),compound);
49: if (LABEL(NXT(w)))
50: return(TRUE); /* loop ends with labeled CONTINUE statement */
51: else
52: return(compound(w,0));
53: }
54: else if (DEFINED(RSIB(w)))
55: return(TRUE);
56: else if (NTYPE(w) == STLNVX && CODELINES(w) > 1)
57: return(TRUE);
58: else
59: return(FALSE);
60: }
Defined functions
Defined variables
sccsid
defined in line
2;
never used