Annotation of 42BSD/usr.bin/struct/4.brace.c, revision 1.1.1.1

1.1       root        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:        }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.