date and time created 82/01/18 19:21:41 by linton
authorMark Linton <linton@ucbvax.Berkeley.EDU>
Tue, 19 Jan 1982 11:21:41 +0000 (03:21 -0800)
committerMark Linton <linton@ucbvax.Berkeley.EDU>
Tue, 19 Jan 1982 11:21:41 +0000 (03:21 -0800)
SCCS-vsn: usr.bin/pascal/pdx/tree/opinfo.h 1.1

usr/src/usr.bin/pascal/pdx/tree/opinfo.h [new file with mode: 0644]

diff --git a/usr/src/usr.bin/pascal/pdx/tree/opinfo.h b/usr/src/usr.bin/pascal/pdx/tree/opinfo.h
new file mode 100644 (file)
index 0000000..28d6050
--- /dev/null
@@ -0,0 +1,121 @@
+/* Copyright (c) 1982 Regents of the University of California */
+
+static char sccsid[] = "@(#)opinfo.h 1.1 %G%";
+
+/*
+ * tree operator definitions
+ */
+
+struct opinfo {
+       short opflags;
+       char *opstring;
+};
+
+OPINFO opinfo[];
+
+#define O_NOP  0       /* no op */
+#define O_NAME 1       /* leaf op for address of a variable */
+#define O_QNAME        2       /* variable qualified by surrounding block */
+#define O_LCON 3       /* long constant (i.e. integer) */
+#define O_FCON 4       /* floating constant (i.e. real) */
+#define O_SCON 5       /* string constant (type alfa) */
+#define O_INDEX        6       /* array subscript (does just one index) */
+#define O_INDIR 7      /* indirection through a pointer */
+#define O_RVAL 8       /* get value of an operand address */
+#define O_COMMA        9       /* as in parameter lists */
+
+/*
+ * arithmetic operators
+ */
+
+#define O_ITOF 10      /* convert integer to real */
+#define O_ADD  11
+#define O_ADDF 12
+#define O_SUB  13
+#define O_SUBF 14
+#define O_NEG  15
+#define O_NEGF 16
+#define O_MUL  17
+#define O_MULF 18
+#define O_DIVF 19      /* real divided by real */
+#define O_DIV  20      /* integer divided by integer, integer result */
+#define O_MOD  21
+
+/*
+ * logical operators
+ */
+
+#define O_AND  22
+#define O_OR   23
+
+/*
+ * relational operators
+ */
+
+#define O_LT   24
+#define O_LTF  25
+#define O_LE   26
+#define O_LEF  27
+#define O_GT   28
+#define O_GTF  29
+#define O_GE   30
+#define O_GEF  31
+#define O_EQ   32
+#define O_EQF  33
+#define O_NE   34
+#define O_NEF  35
+
+/*
+ * debugger commands
+ */
+
+#define O_ASSIGN 36
+#define O_CHFILE 37
+#define O_CONT 38
+#define O_LIST 39
+#define O_NEXT 40
+#define O_PRINT        41
+#define O_STEP 42
+#define O_WHATIS 43
+#define O_WHERE        44
+#define O_XI   45
+#define O_XD   46
+#define O_CALL 47
+#define O_EDIT 48
+#define O_DUMP 49
+#define O_HELP 50
+#define O_REMAKE 51
+#define O_RUN  52
+#define O_SOURCE 53
+#define O_STATUS 54
+#define O_TRACE        55
+#define O_TRACEI 56
+#define O_STOP 57
+#define O_STOPI        58
+#define O_DELETE 59
+#define O_WHICH 60
+#define O_QLINE 61             /* filename : linenumber */
+#define O_ALIAS 62
+
+#define O_LASTOP 62            /* must be number of last operator */
+
+/*
+ * operator flags and predicates
+ */
+
+#define LEAF 01
+#define UNARY 02
+#define BINARY 04
+#define BOOL 010
+#define REALOP 020
+#define INTOP 040
+
+#define isbitset(a, m) ((a&m) == m)
+#define isleaf(o)      isbitset(opinfo[o].opflags, LEAF)
+#define isunary(o)     isbitset(opinfo[o].opflags, UNARY)
+#define isbinary(o)    isbitset(opinfo[o].opflags, BINARY)
+#define isreal(o)      isbitset(opinfo[o].opflags, REALOP)
+#define isint(o)       isbitset(opinfo[o].opflags, INTOP)
+#define isboolean(o)   isbitset(opinfo[o].opflags, BOOL)
+
+#define degree(o)      (opinfo[o].opflags&(LEAF|UNARY|BINARY))