Annotation of 43BSD/ucb/pascal/pdx/sym/print.c, revision 1.1.1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.