15545Slinton /* Copyright (c) 1982 Regents of the University of California */ 25545Slinton 3*5562Slinton /* static char sccsid[] = "@(#)opinfo.h 1.3 01/18/82"; */ 45545Slinton 55545Slinton /* 6*5562Slinton * Tree operator definitions. 75545Slinton */ 85545Slinton 95545Slinton struct opinfo { 105545Slinton short opflags; 115545Slinton char *opstring; 125545Slinton }; 135545Slinton 145545Slinton OPINFO opinfo[]; 155545Slinton 165545Slinton #define O_NOP 0 /* no op */ 175545Slinton #define O_NAME 1 /* leaf op for address of a variable */ 185545Slinton #define O_QNAME 2 /* variable qualified by surrounding block */ 195545Slinton #define O_LCON 3 /* long constant (i.e. integer) */ 205545Slinton #define O_FCON 4 /* floating constant (i.e. real) */ 215545Slinton #define O_SCON 5 /* string constant (type alfa) */ 225545Slinton #define O_INDEX 6 /* array subscript (does just one index) */ 235545Slinton #define O_INDIR 7 /* indirection through a pointer */ 245545Slinton #define O_RVAL 8 /* get value of an operand address */ 255545Slinton #define O_COMMA 9 /* as in parameter lists */ 265545Slinton 275545Slinton /* 285545Slinton * arithmetic operators 295545Slinton */ 305545Slinton 315545Slinton #define O_ITOF 10 /* convert integer to real */ 325545Slinton #define O_ADD 11 335545Slinton #define O_ADDF 12 345545Slinton #define O_SUB 13 355545Slinton #define O_SUBF 14 365545Slinton #define O_NEG 15 375545Slinton #define O_NEGF 16 385545Slinton #define O_MUL 17 395545Slinton #define O_MULF 18 405545Slinton #define O_DIVF 19 /* real divided by real */ 415545Slinton #define O_DIV 20 /* integer divided by integer, integer result */ 425545Slinton #define O_MOD 21 435545Slinton 445545Slinton /* 455545Slinton * logical operators 465545Slinton */ 475545Slinton 485545Slinton #define O_AND 22 495545Slinton #define O_OR 23 505545Slinton 515545Slinton /* 525545Slinton * relational operators 535545Slinton */ 545545Slinton 555545Slinton #define O_LT 24 565545Slinton #define O_LTF 25 575545Slinton #define O_LE 26 585545Slinton #define O_LEF 27 595545Slinton #define O_GT 28 605545Slinton #define O_GTF 29 615545Slinton #define O_GE 30 625545Slinton #define O_GEF 31 635545Slinton #define O_EQ 32 645545Slinton #define O_EQF 33 655545Slinton #define O_NE 34 665545Slinton #define O_NEF 35 675545Slinton 685545Slinton /* 695545Slinton * debugger commands 705545Slinton */ 715545Slinton 725545Slinton #define O_ASSIGN 36 735545Slinton #define O_CHFILE 37 745545Slinton #define O_CONT 38 755545Slinton #define O_LIST 39 765545Slinton #define O_NEXT 40 775545Slinton #define O_PRINT 41 785545Slinton #define O_STEP 42 795545Slinton #define O_WHATIS 43 805545Slinton #define O_WHERE 44 815545Slinton #define O_XI 45 825545Slinton #define O_XD 46 835545Slinton #define O_CALL 47 845545Slinton #define O_EDIT 48 855545Slinton #define O_DUMP 49 865545Slinton #define O_HELP 50 875545Slinton #define O_REMAKE 51 885545Slinton #define O_RUN 52 895545Slinton #define O_SOURCE 53 905545Slinton #define O_STATUS 54 915545Slinton #define O_TRACE 55 925545Slinton #define O_TRACEI 56 935545Slinton #define O_STOP 57 945545Slinton #define O_STOPI 58 955545Slinton #define O_DELETE 59 965545Slinton #define O_WHICH 60 975545Slinton #define O_QLINE 61 /* filename : linenumber */ 985545Slinton #define O_ALIAS 62 99*5562Slinton #define O_GRIPE 63 1005545Slinton 101*5562Slinton #define O_LASTOP 63 /* must be number of last operator */ 1025545Slinton 1035545Slinton /* 1045545Slinton * operator flags and predicates 1055545Slinton */ 1065545Slinton 1075545Slinton #define LEAF 01 1085545Slinton #define UNARY 02 1095545Slinton #define BINARY 04 1105545Slinton #define BOOL 010 1115545Slinton #define REALOP 020 1125545Slinton #define INTOP 040 1135545Slinton 1145545Slinton #define isbitset(a, m) ((a&m) == m) 1155545Slinton #define isleaf(o) isbitset(opinfo[o].opflags, LEAF) 1165545Slinton #define isunary(o) isbitset(opinfo[o].opflags, UNARY) 1175545Slinton #define isbinary(o) isbitset(opinfo[o].opflags, BINARY) 1185545Slinton #define isreal(o) isbitset(opinfo[o].opflags, REALOP) 1195545Slinton #define isint(o) isbitset(opinfo[o].opflags, INTOP) 1205545Slinton #define isboolean(o) isbitset(opinfo[o].opflags, BOOL) 1215545Slinton 1225545Slinton #define degree(o) (opinfo[o].opflags&(LEAF|UNARY|BINARY)) 123