Annotation of 42BSD/ucb/dbx/operators.c, revision 1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.