# 2.11BSD#431 - /usr/src/ucb/PORT/pascal/pxp/case.c

##### Functions

    caseop            X

       1: /*
       2:  * Copyright (c) 1980 Regents of the University of California.
       3:  * All rights reserved.  The Berkeley software License Agreement
       4:  * specifies the terms and conditions for redistribution.
       5:  */
       6:
       7: #ifndef lint
       8: static char sccsid[] = "@(#)case.c	5.1 (Berkeley) 6/5/85";
       9: #endif not lint
      10:
      11: /*
      12:  * pxp - Pascal execution profiler
      13:  *
      14:  * Bill Joy UCB
      15:  * Version 1.2 January 1979
      16:  */
      17:
      18: #include "0.h"
      19: #include "tree.h"
      20:
      21: /*
      22:  * Case statement
      23:  *	r	[0]	T_CASE
      24:  *		[1]	lineof "case"
      25:  *		[2]	expression
      26:  *		[3]	list of cased statements:
      27:  *			cstat	[0]	T_CSTAT
      28:  *				[1]	lineof ":"
      29:  *				[2]	list of constant labels
      30:  *				[3]	statement
      31:  */
      32: caseop(r)
      33:     int *r;
      34: {
      35:     register *cl, *cs, i;
      36:     struct pxcnt scnt;
      37: #	ifdef RMOTHERS
      38:         int *othersp;       /* tree where others is, or NIL */
      39:         int hasothers;      /* 1 if others found, else 0 */
      40: #	endif RMOTHERS
      41:
      42: #	ifdef RMOTHERS
      43:         if (rmothers) {
      44:         hasothers = needscaseguard(r,&othersp);
      45:         if (hasothers) {
      46:             precaseguard(r);
      47:         }
      48:         }
      49: #	endif RMOTHERS
      50:     savecnt(&scnt);
      51:     ppkw("case");
      52:     ppspac();
      53:     rvalue(r[2], NIL);
      54:     ppspac();
      55:     ppkw("of");
      56:     for (cl = r[3]; cl != NIL;) {
      57:         cs = cl[1];
      58:         if (cs == NIL)
      59:             continue;
      60:         baroff();
      61:         ppgoin(DECL);
      62:         setline(cs[1]);
      63:         ppnl();
      64:         indent();
      65:         ppbra(NIL);
      66:         cs = cs[2];
      67:         if (cs != NIL) {
      68:             i = 0;
      69:             for (;;) {
      70:                 gconst(cs[1]);
      71:                 cs = cs[2];
      72:                 if (cs == NIL)
      73:                     break;
      74:                 i++;
      75:                 if (i == 7) {
      76:                     ppsep(",");
      77:                     ppitem();
      78:                     i = 0;
      79:                 } else
      80:                     ppsep(", ");
      81:             }
      82:         } else
      83:             ppid("{case label list}");
      84:         ppket(":");
      85:         cs = cl[1];
      86:         cs = cs[3];
      87:         getcnt();
      88:         ppgoin(STAT);
      89:         if (cs != NIL && cs[0] == T_BLOCK) {
      90:             ppnl();
      91:             indent();
      92:             baron();
      93:             ppstbl1(cs, STAT);
      94:             baroff();
      95:             ppstbl2();
      96:             baron();
      97:         } else {
      98:             baron();
      99:             statement(cs);
     100:         }
     101:         ppgoout(STAT);
     102:         ppgoout(DECL);
     103:         cl = cl[2];
     104:         if (cl == NIL)
     105:             break;
     106:         ppsep(";");
     107:     }
     108:     if (rescnt(&scnt))
     109:         getcnt();
     110:     ppnl();
     111:     indent();
     112:     ppkw("end");
     113: #	ifdef RMOTHERS
     114:         if (rmothers) {
     115:         if (hasothers) {
     116:             postcaseguard(othersp);
     117:         }
     118:         }
     119: #	endif RMOTHERS
     120: }

#### Defined functions

caseop defined in line 32; used 1 times

- in /usr/src/ucb/PORT/pascal/pxp/stat.c line 117

#### Defined variables

sccsid defined in line 8; never used

Last modified: 1985-06-06 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 1023 |