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[] = "@(#)const.c 5.2 (Berkeley) 01/03/88"; 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 STATIC int constcnt = -1; 22 23 /* 24 * The const declaration part 25 */ 26 constbeg(l, cline) 27 int l, cline; 28 { 29 30 line = l; 31 if (nodecl) 32 printoff(); 33 puthedr(); 34 putcm(); 35 ppnl(); 36 indent(); 37 ppkw("const"); 38 ppgoin(DECL); 39 constcnt = 0; 40 setline(cline); 41 } 42 43 constant(cline, cid, cdecl) 44 int cline; 45 char *cid; 46 int *cdecl; 47 { 48 49 if (constcnt) 50 putcm(); 51 setline(cline); 52 ppitem(); 53 ppid(cid); 54 ppsep(" = "); 55 gconst(cdecl); 56 ppsep(";"); 57 constcnt++; 58 setinfo(cline); 59 putcml(); 60 } 61 62 constend() 63 { 64 65 if (constcnt == -1) 66 return; 67 if (nodecl) 68 return; 69 if (constcnt == 0) 70 ppid("{const decls}"); 71 ppgoout(DECL); 72 constcnt = -1; 73 } 74 75 /* 76 * A constant in an expression 77 * or a declaration. 78 */ 79 gconst(r) 80 int *r; 81 { 82 register *cn; 83 84 cn = r; 85 loop: 86 if (cn == NIL) { 87 ppid("{constant}"); 88 return; 89 } 90 switch (cn[0]) { 91 default: 92 panic("gconst"); 93 case T_PLUSC: 94 ppop("+"); 95 cn = cn[1]; 96 goto loop; 97 case T_MINUSC: 98 ppop("-"); 99 cn = cn[1]; 100 goto loop; 101 case T_ID: 102 ppid(cn[1]); 103 return; 104 case T_CBINT: 105 case T_CINT: 106 case T_CFINT: 107 ppnumb(cn[1]); 108 if (cn[0] == T_CBINT) 109 ppsep("b"); 110 return; 111 case T_CSTRNG: 112 ppstr(cn[1]); 113 return; 114 } 115 } 116