/* $Header$ */ /* expression operators. Do not change values, as they are used as indices into arrays. */ #define E_NOT 1 #define E_DEREF 2 #define E_AND 3 #define E_OR 4 #define E_DIV 5 /* equal to truncated quotient */ #define E_MOD 6 /* x = (x E_DIV y) * y + x E_MOD y, 0 <= (x E_MOD y) < y */ #define E_ZDIV 7 /* quotient rounded to 0 */ #define E_ZMOD 8 /* remainder of E_ZDIV */ #define E_IN 9 /* set membership */ #define E_ARRAY 10 #define E_PLUS 11 #define E_MIN 12 #define E_MUL 13 #define E_EQUAL 14 #define E_NOTEQUAL 15 #define E_LTEQUAL 16 #define E_GTEQUAL 17 #define E_LT 18 #define E_GT 19 #define E_SELECT 20 #define E_BAND 21 /* bitwise and */ #define E_BOR 22 /* bitwise or */ #define E_BXOR 23 #define E_BNOT 24 #define E_DERSELECT 25 /* -> in C */ #define E_LSFT 26 #define E_RSFT 27 #define E_ADDR 28 /* long get_int(char *buf, long size, int class) Returns the value of size 'size', residing in 'buf', of 'class' T_INTEGER, T_UNSIGNED, or T_ENUM. */ extern long get_int(); /* int put_int(char *buf, long size, long value) Stores the value 'value' of size 'size' in 'buf'. */ extern int put_int(); /* double get_real(char *buf, long size) Returns the real value of size 'size', residing in 'buf'. T_INTEGER, T_UNSIGNED, or T_ENUM. */ extern double get_real(); /* int put_real(char *buf, long size, double value) Stores the value 'value' of size 'size' in 'buf'. */ extern int put_real(); /* int eval_cond(p_tree p) This routine evaluates the conditional expression indicated by p and returns 1 if it evaluates to TRUE, or 0 if it could not be evaluated for some reason or if it evalutes to FALSE. If the expression cannot be evaluated, an error message is given. */ extern int eval_cond(); /* int eval_desig(p_tree p, t_addr *pbuf, long **psize, p_type *ptp) This routine evaluates the expression indicated by p, which should result in a designator. The result of the expression is an address which is to be found in *pbuf. *psize will contain the size of the designated object, and *ptp its type. If the expression cannot be evaluated or does not result in a designator, 0 is returned and an error message is given. Otherwise, 1 is returned. */ extern int eval_desig(); /* int eval_expr(p_tree p, char **pbuf, long **psize, p_type *ptp) This routine evaluates the expression indicated by p. The result of the expression is left in *pbuf. *psize will contain the size of the value, and *ptp its type. If the expression cannot be evaluated, 0 is returned and an error message is given. Otherwise, 1 is returned. */ extern int eval_expr(); /* int convert(char **pbuf, long *psize, p_type *ptp, p_type tp, long size) This routine tries to convert the value in pbuf of size psize and type ptp to type tp with size size. It returns 0 if this fails, while producing an error message. Otherwise, it returns 1 and the resulting value, type and size are left in pbuf, ptp, and psize, respectively. */ extern int convert();