home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V7 / usr / src / cmd / struct / 4.brace.c < prev    next >
Encoding:
C/C++ Source or Header  |  1979-01-10  |  1.2 KB  |  57 lines

  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.     }
  57.