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