1*21628Sdist /* 2*21628Sdist * Copyright (c) 1983 Regents of the University of California. 3*21628Sdist * All rights reserved. The Berkeley software License Agreement 4*21628Sdist * specifies the terms and conditions for redistribution. 5*21628Sdist */ 612550Scsvaf 7*21628Sdist #ifndef lint 8*21628Sdist static char sccsid[] = "@(#)debug.c 5.1 (Berkeley) 05/31/85"; 9*21628Sdist #endif not lint 1012550Scsvaf 1118216Slinton static char rcsid[] = "$Header: debug.c,v 1.5 84/12/26 10:39:01 linton Exp $"; 1218216Slinton 1312550Scsvaf /* 1412550Scsvaf * Debug routines 1512550Scsvaf */ 1612550Scsvaf 1712550Scsvaf #include "defs.h" 1812550Scsvaf #include "tree.h" 1912550Scsvaf #include "operators.h" 2012550Scsvaf #include "eval.h" 2112550Scsvaf #include "events.h" 2212550Scsvaf #include "symbols.h" 2312550Scsvaf #include "scanner.h" 2412550Scsvaf #include "source.h" 2512550Scsvaf #include "object.h" 2618216Slinton #include "main.h" 2712550Scsvaf #include "mappings.h" 2812550Scsvaf #include "process.h" 2912550Scsvaf #include "machine.h" 3018216Slinton #include "debug.h" 3112550Scsvaf #include <signal.h> 3212550Scsvaf 3318216Slinton public boolean tracetree; /* trace building of parse trees */ 3418216Slinton public boolean traceeval; /* trace tree evaluation */ 3512550Scsvaf 3618216Slinton /* 3718216Slinton * Dynamically turn on/off a debug flag, or display some information. 3818216Slinton */ 3912550Scsvaf 4018216Slinton public debug (p) 4112550Scsvaf Node p; 4212550Scsvaf { 4318216Slinton int code; 4412550Scsvaf 4518216Slinton code = p->value.lcon; 4618216Slinton switch (code) { 4718216Slinton case 0: 4818216Slinton puts("debugging flags:"); 4918216Slinton puts(" 1 trace scanner return values"); 5018216Slinton puts(" 2 trace breakpoints"); 5118216Slinton puts(" 3 trace execution"); 5218216Slinton puts(" 4 trace tree building"); 5318216Slinton puts(" 5 trace tree evaluation"); 5418216Slinton puts(" -[12345] turns off corresponding flag"); 5518216Slinton puts(" 6 dump function table"); 5618216Slinton break; 5712550Scsvaf 5818216Slinton case 1: 5918216Slinton case -1: 6018216Slinton # ifdef LEXDEBUG 6118216Slinton lexdebug = (boolean) (code > 0); 6218216Slinton # else 6318216Slinton error("can't debug scanner (not compiled with LEXDEBUG)"); 6418216Slinton # endif 6518216Slinton break; 6612550Scsvaf 6718216Slinton case 2: 6818216Slinton case -2: 6918216Slinton tracebpts = (boolean) (code > 0); 7018216Slinton break; 7112550Scsvaf 7218216Slinton case 3: 7318216Slinton case -3: 7418216Slinton traceexec = (boolean) (code > 0); 7518216Slinton break; 7612550Scsvaf 7718216Slinton case 4: 7818216Slinton case -4: 7918216Slinton tracetree = (boolean) (code > 0); 8018216Slinton break; 8112550Scsvaf 8218216Slinton case 5: 8318216Slinton case -5: 8418216Slinton traceeval = (boolean) (code > 0); 8518216Slinton break; 8612550Scsvaf 8718216Slinton case 6: 8818216Slinton dumpfunctab(); 8918216Slinton break; 9018216Slinton 9118216Slinton default: 9218216Slinton error("unknown debug flag"); 9318216Slinton break; 9418216Slinton } 9512550Scsvaf } 9612550Scsvaf 9718216Slinton private String leafname[] = { 9818216Slinton "nop", "name", "sym", "lcon", "fcon", "scon", "rval", "index" 9918216Slinton }; 10012550Scsvaf 10118216Slinton public String opname (op) 10218216Slinton Operator op; 10312550Scsvaf { 10418216Slinton String s; 10518216Slinton static char buf[100]; 10612550Scsvaf 10718216Slinton switch (op) { 10818216Slinton case O_ITOF: 10918216Slinton s = "itof"; 11018216Slinton break; 11112550Scsvaf 11218216Slinton case O_ENDX: 11318216Slinton s = "endx"; 11418216Slinton break; 11512550Scsvaf 11618216Slinton case O_QLINE: 11718216Slinton s = "qline"; 11818216Slinton break; 11912550Scsvaf 12018216Slinton default: 12118216Slinton if (ord(op) <= ord(O_INDEX)) { 12218216Slinton s = leafname[ord(op)]; 12318216Slinton } else { 12418216Slinton s = opinfo[ord(op)].opstring; 12518216Slinton if (s == nil) { 12618216Slinton sprintf(buf, "[op %d]", op); 12718216Slinton s = buf; 12812550Scsvaf } 12918216Slinton } 13018216Slinton break; 13112550Scsvaf } 13218216Slinton return s; 13312550Scsvaf } 134