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: }