|
|
1.1 root 1: /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
2:
3: /*
4: $Header: b3tra.c,v 1.4 85/08/22 16:59:43 timo Exp $
5: */
6:
7: /* Trace facility for interpreter */
8:
9: #include "b.h"
10: #include "b0fea.h"
11: #include "b1obj.h"
12: #include "b2nod.h"
13: #include "b3err.h" /* For 'tracing' */
14: #include "b3int.h"
15:
16: #ifdef EXT_COMMAND
17:
18: Visible Procedure tr_on() {
19: tracing= Yes;
20: }
21:
22: Visible Procedure tr_off() {
23: tracing= No;
24: }
25:
26: #endif EXT_COMMAND
27:
28: Visible string opcodes[] = {
29: "HOW_TO",
30: "YIELD",
31: "TEST",
32: "REFINEMENT",
33:
34: /* Commands */
35:
36: "SUITE",
37: "PUT",
38: "INSERT",
39: "REMOVE",
40: "CHOOSE",
41: "DRAW",
42: "SET_RANDOM",
43: "DELETE",
44: "CHECK",
45: "SHARE",
46:
47: "WRITE",
48: "READ",
49: "READ_RAW",
50:
51: "IF",
52: "WHILE",
53: "FOR",
54:
55: "SELECT",
56: "TEST_SUITE",
57: "ELSE",
58:
59: "QUIT",
60: "RETURN",
61: "REPORT",
62: "SUCCEED",
63: "FAIL",
64:
65: "USER_COMMAND",
66: "EXTENDED_COMMAND",
67:
68: /* Expressions, targets, tests */
69:
70: "TAG",
71: "COMPOUND",
72:
73: /* Expressions, targets */
74:
75: "COLLATERAL",
76: "SELECTION",
77: "BEHEAD",
78: "CURTAIL",
79:
80: /* Expressions, tests */
81:
82: "UNPARSED",
83:
84: /* Expressions */
85:
86: "MONF",
87: "DYAF",
88: "NUMBER",
89: "TEXT_DIS",
90: "TEXT_LIT",
91: "TEXT_CONV",
92: "ELT_DIS",
93: "LIST_DIS",
94: "RANGE_DIS",
95: "TAB_DIS",
96:
97: /* Tests */
98:
99: "AND",
100: "OR",
101: "NOT",
102: "SOME_IN",
103: "EACH_IN",
104: "NO_IN",
105: "SOME_PARSING",
106: "EACH_PARSING",
107: "NO_PARSING",
108: "MONPRD",
109: "DYAPRD",
110: "LESS_THAN",
111: "AT_MOST",
112: "GREATER_THAN",
113: "AT_LEAST",
114: "EQUAL",
115: "UNEQUAL",
116: "Nonode",
117:
118: "TAGformal",
119: "TAGlocal",
120: "TAGglobal",
121: "TAGmystery",
122: "TAGrefinement",
123: "TAGzerfun",
124: "TAGzerprd",
125: };
126:
127: #define NOPCODES ((sizeof opcodes) / (sizeof opcodes[0]))
128:
129: Visible Procedure tr_node(p) parsetree p; {
130: int n;
131: fprintf(stderr, "*** %8x ", p);
132: if (p == Halt)
133: fprintf(stderr, "Halt\r\n");
134: else if (p == Stop)
135: fprintf(stderr, "Stop\r\n");
136: else if (!Is_parsetree(p)) {
137: if (IsSmallInt(p))
138: fprintf(stderr, "Error %d\r\n", SmallIntVal(p));
139: else
140: fprintf(stderr, "Trace bad node\r\n");
141: }
142: else {
143: n= Nodetype(p);
144: if (n < 0 || n >= NOPCODES)
145: fprintf(stderr, "Opcode %d", n);
146: else
147: fprintf(stderr, "%s", opcodes[n]);
148: if (Thread2(p))
149: fprintf(stderr, " [*]");
150: fprintf(stderr, "\r\n");
151: }
152: }
153:
154: Visible Procedure tr_jump() {
155: fprintf(stderr, "*** Jump\r\n");
156: }
157:
158: Visible Procedure tr_call() {
159: fprintf(stderr, "*** Call\r\n");
160: }
161:
162: Visible Procedure tr_ret() {
163: fprintf(stderr, "*** Return\r\n");
164: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.