1 static char *sccsid = "@(#)const.c 1.2 (Berkeley) 03/07/81"; 2 /* Copyright (c) 1979 Regents of the University of California */ 3 # 4 /* 5 * pxp - Pascal execution profiler 6 * 7 * Bill Joy UCB 8 * Version 1.2 January 1979 9 */ 10 11 #include "0.h" 12 #include "tree.h" 13 14 STATIC int constcnt = -1; 15 16 /* 17 * The const declaration part 18 */ 19 constbeg(l, cline) 20 int l, cline; 21 { 22 23 line = l; 24 if (nodecl) 25 printoff(); 26 puthedr(); 27 putcm(); 28 ppnl(); 29 indent(); 30 ppkw("const"); 31 ppgoin(DECL); 32 constcnt = 0; 33 setline(cline); 34 } 35 36 const(cline, cid, cdecl) 37 int cline; 38 char *cid; 39 int *cdecl; 40 { 41 42 if (constcnt) 43 putcm(); 44 setline(cline); 45 ppitem(); 46 ppid(cid); 47 ppsep(" = "); 48 gconst(cdecl); 49 ppsep(";"); 50 constcnt++; 51 setinfo(cline); 52 putcml(); 53 } 54 55 constend() 56 { 57 58 if (constcnt == -1) 59 return; 60 if (nodecl) 61 return; 62 if (constcnt == 0) 63 ppid("{const decls}"); 64 ppgoout(DECL); 65 constcnt = -1; 66 } 67 68 /* 69 * A constant in an expression 70 * or a declaration. 71 */ 72 gconst(r) 73 int *r; 74 { 75 register *cn; 76 77 cn = r; 78 loop: 79 if (cn == NIL) { 80 ppid("{constant}"); 81 return; 82 } 83 switch (cn[0]) { 84 default: 85 panic("gconst"); 86 case T_PLUSC: 87 ppop("+"); 88 cn = cn[1]; 89 goto loop; 90 case T_MINUSC: 91 ppop("-"); 92 cn = cn[1]; 93 goto loop; 94 case T_ID: 95 ppid(cn[1]); 96 return; 97 case T_CBINT: 98 case T_CINT: 99 case T_CFINT: 100 ppnumb(cn[1]); 101 if (cn[0] == T_CBINT) 102 ppsep("b"); 103 return; 104 case T_CSTRNG: 105 ppstr(cn[1]); 106 return; 107 } 108 } 109