1: /*
2: * Copyright (c) 1983 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[] = "@(#)debug.c 5.1 (Berkeley) 5/31/85";
9: #endif not lint
10:
11: static char rcsid[] = "$Header: debug.c,v 1.5 84/12/26 10:39:01 linton Exp $";
12:
13: /*
14: * Debug routines
15: */
16:
17: #include "defs.h"
18: #include "tree.h"
19: #include "operators.h"
20: #include "eval.h"
21: #include "events.h"
22: #include "symbols.h"
23: #include "scanner.h"
24: #include "source.h"
25: #include "object.h"
26: #include "main.h"
27: #include "mappings.h"
28: #include "process.h"
29: #include "machine.h"
30: #include "debug.h"
31: #include <signal.h>
32:
33: public boolean tracetree; /* trace building of parse trees */
34: public boolean traceeval; /* trace tree evaluation */
35:
36: /*
37: * Dynamically turn on/off a debug flag, or display some information.
38: */
39:
40: public debug (p)
41: Node p;
42: {
43: int code;
44:
45: code = p->value.lcon;
46: switch (code) {
47: case 0:
48: puts("debugging flags:");
49: puts(" 1 trace scanner return values");
50: puts(" 2 trace breakpoints");
51: puts(" 3 trace execution");
52: puts(" 4 trace tree building");
53: puts(" 5 trace tree evaluation");
54: puts(" -[12345] turns off corresponding flag");
55: puts(" 6 dump function table");
56: break;
57:
58: case 1:
59: case -1:
60: # ifdef LEXDEBUG
61: lexdebug = (boolean) (code > 0);
62: # else
63: error("can't debug scanner (not compiled with LEXDEBUG)");
64: # endif
65: break;
66:
67: case 2:
68: case -2:
69: tracebpts = (boolean) (code > 0);
70: break;
71:
72: case 3:
73: case -3:
74: traceexec = (boolean) (code > 0);
75: break;
76:
77: case 4:
78: case -4:
79: tracetree = (boolean) (code > 0);
80: break;
81:
82: case 5:
83: case -5:
84: traceeval = (boolean) (code > 0);
85: break;
86:
87: case 6:
88: dumpfunctab();
89: break;
90:
91: default:
92: error("unknown debug flag");
93: break;
94: }
95: }
96:
97: private String leafname[] = {
98: "nop", "name", "sym", "lcon", "fcon", "scon", "rval", "index"
99: };
100:
101: public String opname (op)
102: Operator op;
103: {
104: String s;
105: static char buf[100];
106:
107: switch (op) {
108: case O_ITOF:
109: s = "itof";
110: break;
111:
112: case O_ENDX:
113: s = "endx";
114: break;
115:
116: case O_QLINE:
117: s = "qline";
118: break;
119:
120: default:
121: if (ord(op) <= ord(O_INDEX)) {
122: s = leafname[ord(op)];
123: } else {
124: s = opinfo[ord(op)].opstring;
125: if (s == nil) {
126: sprintf(buf, "[op %d]", op);
127: s = buf;
128: }
129: }
130: break;
131: }
132: return s;
133: }
Defined functions
debug
defined in line
40; used 1 times
Defined variables
rcsid
defined in line
11;
never used
sccsid
defined in line
8;
never used