15c4e8a95Sbostic /*- 2*5b05b0fcSbostic * Copyright (c) 1980, 1993 3*5b05b0fcSbostic * The Regents of the University of California. All rights reserved. 455550d53Sdist * 55c4e8a95Sbostic * %sccs.include.redist.c% 65c4e8a95Sbostic * 7*5b05b0fcSbostic * @(#)opinfo.h 8.1 (Berkeley) 06/06/93 855550d53Sdist */ 97d52c5fcSlinton 107d52c5fcSlinton /* 11df124c97Slinton * Tree operator definitions. 127d52c5fcSlinton */ 137d52c5fcSlinton 147d52c5fcSlinton struct opinfo { 157d52c5fcSlinton short opflags; 167d52c5fcSlinton char *opstring; 177d52c5fcSlinton }; 187d52c5fcSlinton 197d52c5fcSlinton OPINFO opinfo[]; 207d52c5fcSlinton 217d52c5fcSlinton #define O_NOP 0 /* no op */ 227d52c5fcSlinton #define O_NAME 1 /* leaf op for address of a variable */ 237d52c5fcSlinton #define O_QNAME 2 /* variable qualified by surrounding block */ 247d52c5fcSlinton #define O_LCON 3 /* long constant (i.e. integer) */ 257d52c5fcSlinton #define O_FCON 4 /* floating constant (i.e. real) */ 267d52c5fcSlinton #define O_SCON 5 /* string constant (type alfa) */ 277d52c5fcSlinton #define O_INDEX 6 /* array subscript (does just one index) */ 287d52c5fcSlinton #define O_INDIR 7 /* indirection through a pointer */ 297d52c5fcSlinton #define O_RVAL 8 /* get value of an operand address */ 307d52c5fcSlinton #define O_COMMA 9 /* as in parameter lists */ 317d52c5fcSlinton 327d52c5fcSlinton /* 337d52c5fcSlinton * arithmetic operators 347d52c5fcSlinton */ 357d52c5fcSlinton 367d52c5fcSlinton #define O_ITOF 10 /* convert integer to real */ 377d52c5fcSlinton #define O_ADD 11 387d52c5fcSlinton #define O_ADDF 12 397d52c5fcSlinton #define O_SUB 13 407d52c5fcSlinton #define O_SUBF 14 417d52c5fcSlinton #define O_NEG 15 427d52c5fcSlinton #define O_NEGF 16 437d52c5fcSlinton #define O_MUL 17 447d52c5fcSlinton #define O_MULF 18 457d52c5fcSlinton #define O_DIVF 19 /* real divided by real */ 467d52c5fcSlinton #define O_DIV 20 /* integer divided by integer, integer result */ 477d52c5fcSlinton #define O_MOD 21 487d52c5fcSlinton 497d52c5fcSlinton /* 507d52c5fcSlinton * logical operators 517d52c5fcSlinton */ 527d52c5fcSlinton 537d52c5fcSlinton #define O_AND 22 547d52c5fcSlinton #define O_OR 23 557d52c5fcSlinton 567d52c5fcSlinton /* 577d52c5fcSlinton * relational operators 587d52c5fcSlinton */ 597d52c5fcSlinton 607d52c5fcSlinton #define O_LT 24 617d52c5fcSlinton #define O_LTF 25 627d52c5fcSlinton #define O_LE 26 637d52c5fcSlinton #define O_LEF 27 647d52c5fcSlinton #define O_GT 28 657d52c5fcSlinton #define O_GTF 29 667d52c5fcSlinton #define O_GE 30 677d52c5fcSlinton #define O_GEF 31 687d52c5fcSlinton #define O_EQ 32 697d52c5fcSlinton #define O_EQF 33 707d52c5fcSlinton #define O_NE 34 717d52c5fcSlinton #define O_NEF 35 727d52c5fcSlinton 737d52c5fcSlinton /* 747d52c5fcSlinton * debugger commands 757d52c5fcSlinton */ 767d52c5fcSlinton 777d52c5fcSlinton #define O_ASSIGN 36 787d52c5fcSlinton #define O_CHFILE 37 797d52c5fcSlinton #define O_CONT 38 807d52c5fcSlinton #define O_LIST 39 817d52c5fcSlinton #define O_NEXT 40 827d52c5fcSlinton #define O_PRINT 41 837d52c5fcSlinton #define O_STEP 42 847d52c5fcSlinton #define O_WHATIS 43 857d52c5fcSlinton #define O_WHERE 44 867d52c5fcSlinton #define O_XI 45 877d52c5fcSlinton #define O_XD 46 887d52c5fcSlinton #define O_CALL 47 897d52c5fcSlinton #define O_EDIT 48 907d52c5fcSlinton #define O_DUMP 49 917d52c5fcSlinton #define O_HELP 50 927d52c5fcSlinton #define O_REMAKE 51 937d52c5fcSlinton #define O_RUN 52 947d52c5fcSlinton #define O_SOURCE 53 957d52c5fcSlinton #define O_STATUS 54 967d52c5fcSlinton #define O_TRACE 55 977d52c5fcSlinton #define O_TRACEI 56 987d52c5fcSlinton #define O_STOP 57 997d52c5fcSlinton #define O_STOPI 58 1007d52c5fcSlinton #define O_DELETE 59 1017d52c5fcSlinton #define O_WHICH 60 1027d52c5fcSlinton #define O_QLINE 61 /* filename : linenumber */ 1037d52c5fcSlinton #define O_ALIAS 62 104df124c97Slinton #define O_GRIPE 63 1057d52c5fcSlinton 106df124c97Slinton #define O_LASTOP 63 /* must be number of last operator */ 1077d52c5fcSlinton 1087d52c5fcSlinton /* 1097d52c5fcSlinton * operator flags and predicates 1107d52c5fcSlinton */ 1117d52c5fcSlinton 1127d52c5fcSlinton #define LEAF 01 1137d52c5fcSlinton #define UNARY 02 1147d52c5fcSlinton #define BINARY 04 1157d52c5fcSlinton #define BOOL 010 1167d52c5fcSlinton #define REALOP 020 1177d52c5fcSlinton #define INTOP 040 1187d52c5fcSlinton 1197d52c5fcSlinton #define isbitset(a, m) ((a&m) == m) 1207d52c5fcSlinton #define isleaf(o) isbitset(opinfo[o].opflags, LEAF) 1217d52c5fcSlinton #define isunary(o) isbitset(opinfo[o].opflags, UNARY) 1227d52c5fcSlinton #define isbinary(o) isbitset(opinfo[o].opflags, BINARY) 1237d52c5fcSlinton #define isreal(o) isbitset(opinfo[o].opflags, REALOP) 1247d52c5fcSlinton #define isint(o) isbitset(opinfo[o].opflags, INTOP) 1257d52c5fcSlinton #define isboolean(o) isbitset(opinfo[o].opflags, BOOL) 1267d52c5fcSlinton 1277d52c5fcSlinton #define degree(o) (opinfo[o].opflags&(LEAF|UNARY|BINARY)) 128