1 /* $Header: arg.h,v 1.0 87/12/18 13:04:39 root Exp $
4 * Revision 1.0 87/12/18 13:04:39 root
24 #define O_LEFT_SHIFT 15
25 #define O_RIGHT_SHIFT 16
37 #define O_COND_EXPR 28
41 #define O_COMPLEMENT 32
83 #define O_LOCALTIME 74
111 #define O_UNSHIFT 102
117 extern char *opname[];
244 extern char *argname[];
265 extern bool hoistable[];
267 bool hoistable[] = {0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0};
285 #define AF_SPECIAL 1 /* op wants to evaluate this arg itself */
286 #define AF_POST 2 /* post *crement this item */
287 #define AF_PRE 4 /* pre *crement this item */
288 #define AF_UP 8 /* increment rather than decrement */
289 #define AF_COMMON 16 /* left and right have symbols in common */
290 #define AF_NUMERIC 32 /* return as numeric rather than string */
291 #define AF_LISTISH 64 /* turn into list if important */
294 * Most of the ARG pointers are used as pointers to arrays of ARG. When
295 * so used, the 0th element is special, and represents the operator to
296 * use on the list of arguments following. The arg_len in the 0th element
297 * gives the maximum argument number, and the arg_str is used to store
298 * the return value in a more-or-less static location. Sorry it's not
299 * re-entrant, but it sure makes it efficient. The arg_type of the
300 * 0th element is an operator (O_*) rather than an argument type (A_*).
303 #define Nullarg Null(ARG*)
305 EXT char opargs[MAXO];