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[] = "@(#)operators.c	5.1 (Berkeley) 5/31/85";
   9: #endif not lint
  10: 
  11: static char rcsid[] = "$Header: operators.c,v 1.5 84/12/26 10:41:01 linton Exp $";
  12: 
  13: /*
  14:  * Tree node classes.
  15:  */
  16: 
  17: #include "defs.h"
  18: #include "operators.h"
  19: 
  20: #ifndef public
  21: typedef struct {
  22:     char numargs;
  23:     char opflags;
  24:     String opstring;
  25: } Opinfo;
  26: 
  27: typedef enum {
  28:     O_NOP,
  29:     O_NAME, O_SYM, O_LCON, O_CCON, O_FCON, O_SCON,
  30:     O_RVAL, O_INDEX, O_INDIR, O_DOT,
  31:     O_COMMA,
  32: 
  33:     O_ITOF, O_ADD, O_ADDF, O_SUB, O_SUBF, O_NEG, O_NEGF,
  34:     O_MUL, O_MULF, O_DIVF, O_DIV, O_MOD,
  35: 
  36:     O_AND, O_OR,
  37: 
  38:     O_LT, O_LTF, O_LE, O_LEF, O_GT, O_GTF, O_GE, O_GEF,
  39:     O_EQ, O_EQF, O_NE, O_NEF,
  40: 
  41:     O_ALIAS,        /* rename a command */
  42:     O_ASSIGN,       /* assign a value to a program variable */
  43:     O_CALL,     /* call a procedure in the program */
  44:     O_CATCH,        /* catch a signal before program does */
  45:     O_CHFILE,       /* change (or print) the current source file */
  46:     O_CONT,     /* continue execution */
  47:     O_DEBUG,        /* invoke a dbx internal debugging routine */
  48:     O_DELETE,       /* remove a trace/stop */
  49:     O_DUMP,     /* dump out variables */
  50:     O_EDIT,     /* edit a file (or function) */
  51:     O_FUNC,     /* set the current function */
  52:     O_GRIPE,        /* send mail to debugger support person */
  53:     O_HELP,     /* print a synopsis of debugger commands */
  54:     O_IGNORE,       /* let program catch signal */
  55:     O_LIST,     /* list source lines */
  56:     O_PRINT,        /* print the values of a list of expressions */
  57:     O_PSYM,     /* print symbol information */
  58:     O_RUN,      /* start up program */
  59:     O_SKIP,     /* skip the current line */
  60:     O_SOURCE,       /* read commands from a file */
  61:     O_STATUS,       /* display currently active trace/stop's */
  62:     O_STEP,     /* execute a single line */
  63:     O_STOP,     /* stop on an event */
  64:     O_STOPI,        /* stop on an event at an instruction boundary */
  65:     O_TRACE,        /* trace something on an event */
  66:     O_TRACEI,       /* trace at the instruction level */
  67:     O_WHATIS,       /* print the declaration of a variable */
  68:     O_WHERE,        /* print a stack trace */
  69:     O_WHEREIS,      /* print all the symbols with the given name */
  70:     O_WHICH,        /* print out full qualification of a symbol */
  71:     O_EXAMINE,      /* examine program instructions/data */
  72: 
  73:     O_ADDEVENT,     /* add an event */
  74:     O_ENDX,     /* end of program reached */
  75:     O_IF,       /* if first arg is true, do commands in second arg */
  76:     O_ONCE,     /* add a "one-time" event, delete when first reached */
  77:     O_PRINTCALL,    /* print out the current procedure and its arguments */
  78:     O_PRINTIFCHANGED,   /* print the value of the argument if it has changed */
  79:     O_PRINTRTN,     /* print out the routine and value that just returned */
  80:     O_PRINTSRCPOS,  /* print out the current source position */
  81:     O_PROCRTN,      /* call completed */
  82:     O_QLINE,        /* filename, line number */
  83:     O_STOPIFCHANGED,    /* stop if the value of the argument has changed */
  84:     O_STOPX,        /* stop execution */
  85:     O_TRACEON,      /* begin tracing source line, variable, or all lines */
  86:     O_TRACEOFF,     /* end tracing source line, variable, or all lines */
  87: 
  88:     O_TYPERENAME,   /* state the type of an expression */
  89:     O_RERUN,        /* re-run program with the same arguments as before */
  90:     O_RETURN,       /* continue execution until procedure returns */
  91:     O_UP,       /* move current function up the call stack */
  92:     O_DOWN,     /* move current function down the call stack */
  93:     O_CALLPROC,     /* call command */
  94:     O_SEARCH,       /* regular expression pattern search through source */
  95:     O_SET,      /* set a debugger variable */
  96:     O_UNSET,        /* unset a debugger variable */
  97:     O_UNALIAS,      /* remove an alias */
  98: 
  99:     O_LASTOP
 100: } Operator;
 101: 
 102: /*
 103:  * Operator flags and predicates.
 104:  */
 105: 
 106: #define null 0
 107: #define LEAF 01
 108: #define UNARY 02
 109: #define BINARY 04
 110: #define BOOL 010
 111: #define REALOP 020
 112: #define INTOP 040
 113: 
 114: #define isbitset(a, m)  ((a&m) == m)
 115: #define isleaf(o)   isbitset(opinfo[ord(o)].opflags, LEAF)
 116: #define isunary(o)  isbitset(opinfo[ord(o)].opflags, UNARY)
 117: #define isbinary(o) isbitset(opinfo[ord(o)].opflags, BINARY)
 118: #define isreal(o)   isbitset(opinfo[ord(o)].opflags, REALOP)
 119: #define isint(o)    isbitset(opinfo[ord(o)].opflags, INTOP)
 120: #define isboolean(o)    isbitset(opinfo[ord(o)].opflags, BOOL)
 121: 
 122: #define degree(o)   (opinfo[ord(o)].opflags&(LEAF|UNARY|BINARY))
 123: #define nargs(o)    (opinfo[ord(o)].numargs)
 124: 
 125: #endif
 126: 
 127: /*
 128:  * Operator information structure.
 129:  */
 130: 
 131: public Opinfo opinfo[] ={
 132: /* O_NOP */     0,  null,       0,
 133: /* O_NAME */        -1, LEAF,       0,
 134: /* O_SYM */     -1, LEAF,       0,
 135: /* O_LCON */        -1, LEAF,       0,
 136: /* O_CCON */        -1, LEAF,       0,
 137: /* O_FCON */        -1, LEAF,       0,
 138: /* O_SCON */        -1, LEAF,       0,
 139: /* O_RVAL */        1,  UNARY,      0,
 140: /* O_INDEX */       2,  null,       0,
 141: /* O_INDIR */       1,  UNARY,      "^",
 142: /* O_DOT */     2,  null,       ".",
 143: /* O_COMMA */       2,  null,       ",",
 144: /* O_ITOF */        1,  UNARY|INTOP,    0,
 145: /* O_ADD */     2,  BINARY|INTOP,   "+",
 146: /* O_ADDF */        2,  BINARY|REALOP,  "+",
 147: /* O_SUB */     2,  BINARY|INTOP,   "-",
 148: /* O_SUBF */        2,  BINARY|REALOP,  "-",
 149: /* O_NEG */     1,  UNARY|INTOP,    "-",
 150: /* O_NEGF */        1,  UNARY|REALOP,   "-",
 151: /* O_MUL */     2,  BINARY|INTOP,   "*",
 152: /* O_MULF */        2,  BINARY|REALOP,  "*",
 153: /* O_DIVF */        2,  BINARY|REALOP,  "/",
 154: /* O_DIV */     2,  BINARY|INTOP,   " div ",
 155: /* O_MOD */     2,  BINARY|INTOP,   " mod ",
 156: /* O_AND */     2,  BINARY|INTOP,   " and ",
 157: /* O_OR */      2,  BINARY|INTOP,   " or ",
 158: /* O_LT */      2,  BINARY|INTOP,   " < ",
 159: /* O_LTF */     2,  BINARY|REALOP,  " < ",
 160: /* O_LE */      2,  BINARY|INTOP,   " <= ",
 161: /* O_LEF */     2,  BINARY|REALOP,  " <= ",
 162: /* O_GT */      2,  BINARY|INTOP,   " > ",
 163: /* O_GTF */     2,  BINARY|REALOP,  " > ",
 164: /* O_GE */      2,  BINARY|INTOP,   " >= ",
 165: /* O_GEF */     2,  BINARY|REALOP,  " >= ",
 166: /* O_EQ */      2,  BINARY|INTOP,   " = ",
 167: /* O_EQF */     2,  BINARY|REALOP,  " = ",
 168: /* O_NE */      2,  BINARY|INTOP,   " <> ",
 169: /* O_NEF */     2,  BINARY|REALOP,  " <> ",
 170: 
 171: /* O_ALIAS */       2,  null,       "alias",
 172: /* O_ASSIGN */      2,  null,       " := ",
 173: /* O_CALL */        2,  null,       "call",
 174: /* O_CATCH */       0,  null,       "catch",
 175: /* O_CHFILE */      0,  null,       "file",
 176: /* O_CONT */        0,  null,       "cont",
 177: /* O_DEBUG */       0,  null,       "debug",
 178: /* O_DELETE */      1,  null,       "delete",
 179: /* O_DUMP */        1,  null,       "dump",
 180: /* O_EDIT */        0,  null,       "edit",
 181: /* O_FUNC */        1,  null,       "func",
 182: /* O_GRIPE */       0,  null,       "gripe",
 183: /* O_HELP */        0,  null,       "help",
 184: /* O_IGNORE */      0,  null,       "ignore",
 185: /* O_LIST */        2,  null,       "list",
 186: /* O_PRINT */       1,  null,       "print",
 187: /* O_PSYM */        1,  null,       "psym",
 188: /* O_RUN */     0,  null,       "run",
 189: /* O_SKIP */        0,  null,       "skip",
 190: /* O_SOURCE */      0,  null,       "source",
 191: /* O_STATUS */      0,  null,       "status",
 192: /* O_STEP */        0,  null,       "step",
 193: /* O_STOP */        3,  null,       "stop",
 194: /* O_STOPI */       3,  null,       "stopi",
 195: /* O_TRACE */       3,  null,       "trace",
 196: /* O_TRACEI */      3,  null,       "tracei",
 197: /* O_WHATIS */      1,  null,       "whatis",
 198: /* O_WHERE */       0,  null,       "where",
 199: /* O_WHEREIS */     1,  null,       "whereis",
 200: /* O_WHICH */       1,  null,       "which",
 201: /* O_EXAMINE */     0,  null,       "examine",
 202: 
 203: /* O_ADDEVENT */    0,  null,       "when",
 204: /* O_ENDX */        0,  null,       nil,
 205: /* O_IF */      0,  null,       "if",
 206: /* O_ONCE */        0,  null,       "once",
 207: /* O_PRINTCALL */   1,  null,       "printcall",
 208: /* O_PRINTIFCHANGED */  1,  null,       "printifchanged",
 209: /* O_PRINTRTN */    1,  null,       "printrtn",
 210: /* O_PRINTSRCPOS */ 1,  null,       "printsrcpos",
 211: /* O_PROCRTN */     1,  null,       "procrtn",
 212: /* O_QLINE */       2,  null,       nil,
 213: /* O_STOPIFCHANGED */   1,  null,       "stopifchanged",
 214: /* O_STOPX */       0,  null,       "stop",
 215: /* O_TRACEON */     1,  null,       "traceon",
 216: /* O_TRACEOFF */    1,  null,       "traceoff",
 217: /* O_TYPERENAME */  2,  UNARY,      "type rename",
 218: /* O_RERUN */       0,  null,       "rerun",
 219: /* O_RETURN */      1,  null,       "return",
 220: /* O_UP */      1,  UNARY,      "up",
 221: /* O_DOWN */        1,  UNARY,      "down",
 222: /* O_CALLPROC */    2,  null,       "call",
 223: /* O_SEARCH */      2,  null,       "search",
 224: /* O_SET */     2,  null,       "set",
 225: /* O_UNSET */       1,  null,       "unset",
 226: /* O_UNALIAS */     1,  null,       "unalias",
 227: };

Defined variables

rcsid defined in line 11; never used
sccsid defined in line 8; never used

Defined macros

BINARY defined in line 109; used 25 times
BOOL defined in line 110; used 1 times
INTOP defined in line 112; used 16 times
LEAF defined in line 107; used 8 times
REALOP defined in line 111; used 12 times
UNARY defined in line 108; used 10 times
degree defined in line 122; never used
isbinary defined in line 117; never used
isbitset defined in line 114; used 6 times
isboolean defined in line 120; never used
isint defined in line 119; never used
isleaf defined in line 115; never used
isreal defined in line 118; never used
isunary defined in line 116; never used
nargs defined in line 123; never used
null defined in line 106; used 56 times
Last modified: 1985-05-31
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 956
Valid CSS Valid XHTML 1.0 Strict