148112Sbostic /*-
2*62193Sbostic * Copyright (c) 1980, 1993
3*62193Sbostic * The Regents of the University of California. All rights reserved.
448112Sbostic *
548112Sbostic * %sccs.include.redist.c%
622239Sdist */
722239Sdist
822239Sdist #ifndef lint
9*62193Sbostic static char sccsid[] = "@(#)stat.c 8.1 (Berkeley) 06/06/93";
1048112Sbostic #endif /* not lint */
1122239Sdist
1222239Sdist /*
132865Speter * pxp - Pascal execution profiler
142865Speter *
152865Speter * Bill Joy UCB
162865Speter * Version 1.2 January 1979
172865Speter */
182865Speter
192865Speter #include "0.h"
202865Speter #include "tree.h"
212865Speter
222865Speter int cntstat;
233052Smckusic int cnts = 3;
242865Speter
statlist(r)252865Speter statlist(r)
262865Speter int *r;
272865Speter {
282865Speter register int *sl;
292865Speter
302865Speter sl = r;
312865Speter if (sl != NIL)
322865Speter for (;;) {
332865Speter statement(sl[1]);
342865Speter sl = sl[2];
352865Speter if (sl == NIL)
362865Speter break;
372865Speter ppsep(";");
382865Speter }
392865Speter else
402865Speter statement(NIL);
412865Speter }
422865Speter
432865Speter
statement(r)442865Speter statement(r)
452865Speter int *r;
462865Speter {
472865Speter register int *s;
482865Speter
492865Speter s = r;
502865Speter top:
512865Speter if (cntstat) {
522865Speter cntstat = 0;
532865Speter getcnt();
542865Speter }
552865Speter if (s == NIL) {
562865Speter putcm();
572865Speter ppitem();
582865Speter ppid("null");
592865Speter return;
602865Speter }
612865Speter if (s[0] == T_REPEAT)
622865Speter setinfo(s[1]);
632865Speter else
642865Speter setline(s[1]);
652865Speter if (s[0] == T_LABEL) {
662865Speter cntstat = 1;
672865Speter ppnl();
682865Speter labeled(s[2]);
692865Speter statement(s[3]);
702865Speter return;
712865Speter }
722865Speter switch (s[0]) {
732865Speter default:
742865Speter panic("stat");
752865Speter case T_PCALL:
762865Speter ppitem();
772865Speter proc(s);
782865Speter break;
792865Speter case T_IF:
802865Speter case T_IFEL:
812865Speter ppnl();
822865Speter indent();
832865Speter ifop(s);
842865Speter break;
852865Speter case T_WHILE:
862865Speter ppnl();
872865Speter indent();
882865Speter whilop(s);
892865Speter break;
902865Speter case T_REPEAT:
912865Speter ppnl();
922865Speter indent();
932865Speter repop(s);
942865Speter break;
952865Speter case T_FORU:
962865Speter case T_FORD:
972865Speter ppnl();
982865Speter indent();
992865Speter forop(s);
1002865Speter break;
1012865Speter case T_BLOCK:
1022865Speter ppnl();
1032865Speter indent();
1042865Speter ppstbl(s, DECL);
1052865Speter break;
1062865Speter case T_ASGN:
1072865Speter ppitem();
1082865Speter asgnop(s);
1092865Speter break;
1102865Speter case T_GOTO:
1112865Speter ppitem();
1122865Speter gotoop(s[2]);
1132865Speter cntstat = 1;
1142865Speter break;
1152865Speter case T_CASE:
1162865Speter ppnl();
1172865Speter indent();
1182865Speter caseop(s);
1192865Speter break;
1202865Speter case T_WITH:
1212865Speter ppnl();
1222865Speter indent();
1232865Speter withop(s);
1242865Speter break;
1252865Speter }
1262865Speter setinfo(s[1]);
1272865Speter putcm();
1282865Speter }
1292865Speter
withop(s)1302865Speter withop(s)
1312865Speter int *s;
1322865Speter {
1332865Speter register *p;
1342865Speter
1352865Speter ppkw("with");
1362865Speter ppspac();
1372865Speter p = s[2];
1382865Speter if (p != NIL)
1392865Speter for (;;) {
1402865Speter lvalue(p[1]);
1412865Speter p = p[2];
1422865Speter if (p == NIL)
1432865Speter break;
1442865Speter ppsep(", ");
1452865Speter }
1462865Speter else
1472865Speter ppid("{record variable list}");
1482865Speter ppstdo(s[3], DECL);
1492865Speter }
1502865Speter
asgnop(r)1512865Speter asgnop(r)
1522865Speter int *r;
1532865Speter {
1542865Speter
1552865Speter lvalue(r[2]);
1562865Speter ppsep(" := ");
1572865Speter rvalue(r[3], NIL);
1582865Speter }
1592865Speter
forop(r)1602865Speter forop(r)
1612865Speter int *r;
1622865Speter {
1632865Speter struct pxcnt scnt;
1642865Speter
1652865Speter savecnt(&scnt);
1662865Speter ppkw("for");
1672865Speter ppspac();
1682865Speter asgnop(r[2]);
1692865Speter ppspac();
1702865Speter ppkw(r[0] == T_FORU ? "to" : "downto");
1712865Speter ppspac();
1722865Speter rvalue(r[3], NIL);
1732865Speter getcnt();
1742865Speter ppstdo(r[4], STAT);
1752865Speter if (rescnt(&scnt))
1762865Speter getcnt();
1772865Speter }
1782865Speter
ifop(r)1792865Speter ifop(r)
1802865Speter int *r;
1812865Speter {
1822865Speter register *s;
1832865Speter struct pxcnt scnt;
1842865Speter
1852865Speter ppkw("if");
1862865Speter ppspac();
1872865Speter rvalue(r[2], NIL);
1882865Speter ppspac();
1892865Speter ppkw("then");
1902865Speter ppspac();
1912865Speter s = r[3];
1922865Speter savecnt(&scnt);
1932865Speter getcnt();
1942865Speter if (s != NIL && s[0] == T_BLOCK)
1952865Speter ppstbl1(s, STAT);
1962865Speter else {
1972865Speter ppgoin(STAT);
1982865Speter statement(s);
1992865Speter ppgoout(STAT);
2002865Speter }
2012865Speter if (r[0] == T_IFEL) {
2022865Speter setcnt(cntof(&scnt)-nowcnt());
2032865Speter if (s == NIL || s[0] != T_BLOCK) {
2042865Speter ppnl();
2052865Speter indent();
2062865Speter } else {
2072865Speter ppstbl2();
2082865Speter ppspac();
2092865Speter }
2102865Speter s = r[4];
2112865Speter ppkw("else");
2122865Speter unprint();
2132865Speter ppspac();
2142865Speter if (s == NIL)
2152865Speter goto burp;
2162865Speter if (s[0] == T_BLOCK)
2172865Speter ppstbl1(s, STAT);
2182865Speter else if (s[0] == T_IF || s[0] == T_IFEL)
2192865Speter ifop(s);
2202865Speter else {
2212865Speter burp:
2222865Speter ppgoin(STAT);
2232865Speter statement(s);
2242865Speter ppgoout(STAT);
2252865Speter }
2262865Speter }
2272865Speter if (rescnt(&scnt))
2282865Speter getcnt();
2292865Speter if (r[4] != NIL)
2302865Speter unprint();
2312865Speter if (s != NIL && s[0] == T_BLOCK)
2322865Speter ppstbl2();
2332865Speter }
2342865Speter
whilop(r)2352865Speter whilop(r)
2362865Speter int *r;
2372865Speter {
2382865Speter struct pxcnt scnt;
2392865Speter
2402865Speter ppkw("while");
2412865Speter ppspac();
2422865Speter rvalue(r[2], NIL);
2432865Speter savecnt(&scnt);
2442865Speter getcnt();
2452865Speter ppstdo(r[3], STAT);
2462865Speter if (rescnt(&scnt))
2472865Speter getcnt();
2482865Speter }
2492865Speter
repop(r)2502865Speter repop(r)
2512865Speter int *r;
2522865Speter {
2532865Speter struct pxcnt scnt;
2542865Speter
2552865Speter ppkw("repeat");
2562865Speter ppgoin(STAT);
2572865Speter savecnt(&scnt);
2582865Speter getcnt();
2592865Speter statlist(r[2]);
2602865Speter ppgoout(DECL);
2612865Speter ppnl();
2622865Speter indent();
2632865Speter ppkw("until");
2642865Speter ppspac();
2652865Speter rvalue(r[3], NIL);
2662865Speter ppgoin(DECL);
2672865Speter ppgoout(STAT);
2682865Speter if (rescnt(&scnt))
2692865Speter getcnt();
2702865Speter }
2712865Speter
ppstbl(r,m)2722865Speter ppstbl(r, m)
2732865Speter int *r;
2742865Speter {
2752865Speter ppstbl1(r, m);
2762865Speter ppstbl2();
2772865Speter }
2782865Speter
ppstbl1(r,m)2792865Speter ppstbl1(r, m)
2802865Speter int *r;
2812865Speter {
2822865Speter ppkw("begin");
2832865Speter ppgoin(m);
2842865Speter statlist(r[2]);
2852865Speter ppgoout(m);
2862865Speter }
2872865Speter
ppstbl2()2882865Speter ppstbl2()
2892865Speter {
2902865Speter ppnl();
2912865Speter indent();
2922865Speter ppkw("end");
2932865Speter }
2942865Speter
ppstdo(r,l)2952865Speter ppstdo(r, l)
2962865Speter int *r;
2972865Speter {
2982865Speter register *s;
2992865Speter
3002865Speter ppspac();
3012865Speter ppkw("do");
3022865Speter ppspac();
3032865Speter s = r;
3042865Speter if (s != NIL && s[0] == T_BLOCK)
3052865Speter ppstbl(s, l);
3062865Speter else {
3072865Speter ppgoin(l);
3082865Speter statement(s);
3092865Speter ppgoout(l);
3102865Speter }
3112865Speter }
312