1*5523Slinton /* Copyright (c) 1982 Regents of the University of California */ 2*5523Slinton 3*5523Slinton static char sccsid[] = "@(#)print.c 1.1 01/18/82"; 4*5523Slinton 5*5523Slinton /* 6*5523Slinton * Routines to print out symbols. 7*5523Slinton */ 8*5523Slinton 9*5523Slinton #include "defs.h" 10*5523Slinton #include "sym.h" 11*5523Slinton #include "process.h" 12*5523Slinton #include "tree.h" 13*5523Slinton #include "runtime.h" 14*5523Slinton #include "classes.h" 15*5523Slinton #include "sym.rep" 16*5523Slinton #include "process/process.rep" 17*5523Slinton 18*5523Slinton /* 19*5523Slinton * Note the entry of the given block, unless it's the main program. 20*5523Slinton */ 21*5523Slinton 22*5523Slinton printentry(s) 23*5523Slinton SYM *s; 24*5523Slinton { 25*5523Slinton if (s != program) { 26*5523Slinton printf("\nentering %s %s\n", classname(s), s->symbol); 27*5523Slinton } 28*5523Slinton } 29*5523Slinton 30*5523Slinton /* 31*5523Slinton * Note the exit of the given block 32*5523Slinton */ 33*5523Slinton 34*5523Slinton printexit(s) 35*5523Slinton SYM *s; 36*5523Slinton { 37*5523Slinton if (s != program) { 38*5523Slinton printf("leaving %s %s\n\n", classname(s), s->symbol); 39*5523Slinton } 40*5523Slinton } 41*5523Slinton 42*5523Slinton /* 43*5523Slinton * Note the call of s from t. 44*5523Slinton */ 45*5523Slinton 46*5523Slinton printcall(s, t) 47*5523Slinton SYM *s, *t; 48*5523Slinton { 49*5523Slinton printf("calling %s", s->symbol); 50*5523Slinton printparams(s, NIL); 51*5523Slinton printf(" from %s %s\n", classname(t), t->symbol); 52*5523Slinton } 53*5523Slinton 54*5523Slinton /* 55*5523Slinton * Note the return from s. If s is a function, print the value 56*5523Slinton * it is returning. This is somewhat painful, since the function 57*5523Slinton * has actually just returned. 58*5523Slinton */ 59*5523Slinton 60*5523Slinton printrtn(s) 61*5523Slinton SYM *s; 62*5523Slinton { 63*5523Slinton register SYM *t; 64*5523Slinton register int len; 65*5523Slinton 66*5523Slinton printf("returning "); 67*5523Slinton if (s->class == FUNC) { 68*5523Slinton len = size(s->type); 69*5523Slinton dread(sp, process->sp, len); 70*5523Slinton sp += len; 71*5523Slinton printval(s->type); 72*5523Slinton putchar(' '); 73*5523Slinton } 74*5523Slinton printf("from %s\n", s->symbol); 75*5523Slinton } 76*5523Slinton 77*5523Slinton /* 78*5523Slinton * Print the values of the parameters of the given procedure or function. 79*5523Slinton * The frame distinguishes recursive instances of a procedure. 80*5523Slinton */ 81*5523Slinton 82*5523Slinton printparams(f, frame) 83*5523Slinton SYM *f; 84*5523Slinton FRAME *frame; 85*5523Slinton { 86*5523Slinton SYM *param; 87*5523Slinton 88*5523Slinton for (param = f->chain; param != NIL; param = param->chain) { 89*5523Slinton if (param == f->chain) { 90*5523Slinton printf("("); 91*5523Slinton } 92*5523Slinton printv(param, frame); 93*5523Slinton if (param->chain != NIL) { 94*5523Slinton printf(", "); 95*5523Slinton } else { 96*5523Slinton printf(")"); 97*5523Slinton } 98*5523Slinton } 99*5523Slinton } 100*5523Slinton 101*5523Slinton /* 102*5523Slinton * Print the name and value of a variable. 103*5523Slinton */ 104*5523Slinton 105*5523Slinton printv(s, frame) 106*5523Slinton SYM *s; 107*5523Slinton FRAME *frame; 108*5523Slinton { 109*5523Slinton ADDRESS addr; 110*5523Slinton int len; 111*5523Slinton 112*5523Slinton if (s->class == REF) { 113*5523Slinton dread(&addr, address(s, frame), sizeof(ADDRESS)); 114*5523Slinton len = size(s->type); 115*5523Slinton } else { 116*5523Slinton addr = address(s, frame); 117*5523Slinton len = size(s); 118*5523Slinton } 119*5523Slinton dread(sp, addr, len); 120*5523Slinton sp += len; 121*5523Slinton printf("%s = ", s->symbol); 122*5523Slinton if (s->class == REF || s->class == VAR) { 123*5523Slinton printval(s->type); 124*5523Slinton } else { 125*5523Slinton printval(s); 126*5523Slinton } 127*5523Slinton } 128*5523Slinton 129*5523Slinton /* 130*5523Slinton * Print the fully specified variable that is described by the given identifer. 131*5523Slinton */ 132*5523Slinton 133*5523Slinton printwhich(s) 134*5523Slinton SYM *s; 135*5523Slinton { 136*5523Slinton printouter(s->func); 137*5523Slinton printf("%s", s->symbol); 138*5523Slinton } 139*5523Slinton 140*5523Slinton LOCAL printouter(s) 141*5523Slinton SYM *s; 142*5523Slinton { 143*5523Slinton if (s->func != NIL) { 144*5523Slinton printouter(s->func); 145*5523Slinton } 146*5523Slinton printf("%s.", s->symbol); 147*5523Slinton } 148