|
|
BSD 4.3
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*
$Header: /var/lib/cvsd/repos/CSRG/43BSD/contrib/B/src/bint/b3tra.c,v 1.1.1.1 2018/04/24 16:12:54 root Exp $
*/
/* Trace facility for interpreter */
#include "b.h"
#include "b0fea.h"
#include "b1obj.h"
#include "b2nod.h"
#include "b3err.h" /* For 'tracing' */
#include "b3int.h"
#ifdef EXT_COMMAND
Visible Procedure tr_on() {
tracing= Yes;
}
Visible Procedure tr_off() {
tracing= No;
}
#endif EXT_COMMAND
Visible string opcodes[] = {
"HOW_TO",
"YIELD",
"TEST",
"REFINEMENT",
/* Commands */
"SUITE",
"PUT",
"INSERT",
"REMOVE",
"CHOOSE",
"DRAW",
"SET_RANDOM",
"DELETE",
"CHECK",
"SHARE",
"WRITE",
"READ",
"READ_RAW",
"IF",
"WHILE",
"FOR",
"SELECT",
"TEST_SUITE",
"ELSE",
"QUIT",
"RETURN",
"REPORT",
"SUCCEED",
"FAIL",
"USER_COMMAND",
"EXTENDED_COMMAND",
/* Expressions, targets, tests */
"TAG",
"COMPOUND",
/* Expressions, targets */
"COLLATERAL",
"SELECTION",
"BEHEAD",
"CURTAIL",
/* Expressions, tests */
"UNPARSED",
/* Expressions */
"MONF",
"DYAF",
"NUMBER",
"TEXT_DIS",
"TEXT_LIT",
"TEXT_CONV",
"ELT_DIS",
"LIST_DIS",
"RANGE_DIS",
"TAB_DIS",
/* Tests */
"AND",
"OR",
"NOT",
"SOME_IN",
"EACH_IN",
"NO_IN",
"SOME_PARSING",
"EACH_PARSING",
"NO_PARSING",
"MONPRD",
"DYAPRD",
"LESS_THAN",
"AT_MOST",
"GREATER_THAN",
"AT_LEAST",
"EQUAL",
"UNEQUAL",
"Nonode",
"TAGformal",
"TAGlocal",
"TAGglobal",
"TAGmystery",
"TAGrefinement",
"TAGzerfun",
"TAGzerprd",
};
#define NOPCODES ((sizeof opcodes) / (sizeof opcodes[0]))
Visible Procedure tr_node(p) parsetree p; {
int n;
fprintf(stderr, "*** %8x ", p);
if (p == Halt)
fprintf(stderr, "Halt\r\n");
else if (p == Stop)
fprintf(stderr, "Stop\r\n");
else if (!Is_parsetree(p)) {
if (IsSmallInt(p))
fprintf(stderr, "Error %d\r\n", SmallIntVal(p));
else
fprintf(stderr, "Trace bad node\r\n");
}
else {
n= Nodetype(p);
if (n < 0 || n >= NOPCODES)
fprintf(stderr, "Opcode %d", n);
else
fprintf(stderr, "%s", opcodes[n]);
if (Thread2(p))
fprintf(stderr, " [*]");
fprintf(stderr, "\r\n");
}
}
Visible Procedure tr_jump() {
fprintf(stderr, "*** Jump\r\n");
}
Visible Procedure tr_call() {
fprintf(stderr, "*** Call\r\n");
}
Visible Procedure tr_ret() {
fprintf(stderr, "*** Return\r\n");
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.