1*5545Slinton /* Copyright (c) 1982 Regents of the University of California */ 2*5545Slinton 3*5545Slinton static char sccsid[] = "@(#)opinfo.h 1.1 01/18/82"; 4*5545Slinton 5*5545Slinton /* 6*5545Slinton * tree operator definitions 7*5545Slinton */ 8*5545Slinton 9*5545Slinton struct opinfo { 10*5545Slinton short opflags; 11*5545Slinton char *opstring; 12*5545Slinton }; 13*5545Slinton 14*5545Slinton OPINFO opinfo[]; 15*5545Slinton 16*5545Slinton #define O_NOP 0 /* no op */ 17*5545Slinton #define O_NAME 1 /* leaf op for address of a variable */ 18*5545Slinton #define O_QNAME 2 /* variable qualified by surrounding block */ 19*5545Slinton #define O_LCON 3 /* long constant (i.e. integer) */ 20*5545Slinton #define O_FCON 4 /* floating constant (i.e. real) */ 21*5545Slinton #define O_SCON 5 /* string constant (type alfa) */ 22*5545Slinton #define O_INDEX 6 /* array subscript (does just one index) */ 23*5545Slinton #define O_INDIR 7 /* indirection through a pointer */ 24*5545Slinton #define O_RVAL 8 /* get value of an operand address */ 25*5545Slinton #define O_COMMA 9 /* as in parameter lists */ 26*5545Slinton 27*5545Slinton /* 28*5545Slinton * arithmetic operators 29*5545Slinton */ 30*5545Slinton 31*5545Slinton #define O_ITOF 10 /* convert integer to real */ 32*5545Slinton #define O_ADD 11 33*5545Slinton #define O_ADDF 12 34*5545Slinton #define O_SUB 13 35*5545Slinton #define O_SUBF 14 36*5545Slinton #define O_NEG 15 37*5545Slinton #define O_NEGF 16 38*5545Slinton #define O_MUL 17 39*5545Slinton #define O_MULF 18 40*5545Slinton #define O_DIVF 19 /* real divided by real */ 41*5545Slinton #define O_DIV 20 /* integer divided by integer, integer result */ 42*5545Slinton #define O_MOD 21 43*5545Slinton 44*5545Slinton /* 45*5545Slinton * logical operators 46*5545Slinton */ 47*5545Slinton 48*5545Slinton #define O_AND 22 49*5545Slinton #define O_OR 23 50*5545Slinton 51*5545Slinton /* 52*5545Slinton * relational operators 53*5545Slinton */ 54*5545Slinton 55*5545Slinton #define O_LT 24 56*5545Slinton #define O_LTF 25 57*5545Slinton #define O_LE 26 58*5545Slinton #define O_LEF 27 59*5545Slinton #define O_GT 28 60*5545Slinton #define O_GTF 29 61*5545Slinton #define O_GE 30 62*5545Slinton #define O_GEF 31 63*5545Slinton #define O_EQ 32 64*5545Slinton #define O_EQF 33 65*5545Slinton #define O_NE 34 66*5545Slinton #define O_NEF 35 67*5545Slinton 68*5545Slinton /* 69*5545Slinton * debugger commands 70*5545Slinton */ 71*5545Slinton 72*5545Slinton #define O_ASSIGN 36 73*5545Slinton #define O_CHFILE 37 74*5545Slinton #define O_CONT 38 75*5545Slinton #define O_LIST 39 76*5545Slinton #define O_NEXT 40 77*5545Slinton #define O_PRINT 41 78*5545Slinton #define O_STEP 42 79*5545Slinton #define O_WHATIS 43 80*5545Slinton #define O_WHERE 44 81*5545Slinton #define O_XI 45 82*5545Slinton #define O_XD 46 83*5545Slinton #define O_CALL 47 84*5545Slinton #define O_EDIT 48 85*5545Slinton #define O_DUMP 49 86*5545Slinton #define O_HELP 50 87*5545Slinton #define O_REMAKE 51 88*5545Slinton #define O_RUN 52 89*5545Slinton #define O_SOURCE 53 90*5545Slinton #define O_STATUS 54 91*5545Slinton #define O_TRACE 55 92*5545Slinton #define O_TRACEI 56 93*5545Slinton #define O_STOP 57 94*5545Slinton #define O_STOPI 58 95*5545Slinton #define O_DELETE 59 96*5545Slinton #define O_WHICH 60 97*5545Slinton #define O_QLINE 61 /* filename : linenumber */ 98*5545Slinton #define O_ALIAS 62 99*5545Slinton 100*5545Slinton #define O_LASTOP 62 /* must be number of last operator */ 101*5545Slinton 102*5545Slinton /* 103*5545Slinton * operator flags and predicates 104*5545Slinton */ 105*5545Slinton 106*5545Slinton #define LEAF 01 107*5545Slinton #define UNARY 02 108*5545Slinton #define BINARY 04 109*5545Slinton #define BOOL 010 110*5545Slinton #define REALOP 020 111*5545Slinton #define INTOP 040 112*5545Slinton 113*5545Slinton #define isbitset(a, m) ((a&m) == m) 114*5545Slinton #define isleaf(o) isbitset(opinfo[o].opflags, LEAF) 115*5545Slinton #define isunary(o) isbitset(opinfo[o].opflags, UNARY) 116*5545Slinton #define isbinary(o) isbitset(opinfo[o].opflags, BINARY) 117*5545Slinton #define isreal(o) isbitset(opinfo[o].opflags, REALOP) 118*5545Slinton #define isint(o) isbitset(opinfo[o].opflags, INTOP) 119*5545Slinton #define isboolean(o) isbitset(opinfo[o].opflags, BOOL) 120*5545Slinton 121*5545Slinton #define degree(o) (opinfo[o].opflags&(LEAF|UNARY|BINARY)) 122