1 /* $Header: arg.h,v 1.0.1.1 88/01/28 10:22:40 root Exp $
4 * Revision 1.0.1.1 88/01/28 10:22:40 root
5 * patch8: added eval operator.
7 * Revision 1.0 87/12/18 13:04:39 root
27 #define O_LEFT_SHIFT 15
28 #define O_RIGHT_SHIFT 16
40 #define O_COND_EXPR 28
44 #define O_COMPLEMENT 32
86 #define O_LOCALTIME 74
114 #define O_UNSHIFT 102
121 extern char *opname[];
249 extern char *argname[];
270 extern bool hoistable[];
272 bool hoistable[] = {0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0};
290 #define AF_SPECIAL 1 /* op wants to evaluate this arg itself */
291 #define AF_POST 2 /* post *crement this item */
292 #define AF_PRE 4 /* pre *crement this item */
293 #define AF_UP 8 /* increment rather than decrement */
294 #define AF_COMMON 16 /* left and right have symbols in common */
295 #define AF_NUMERIC 32 /* return as numeric rather than string */
296 #define AF_LISTISH 64 /* turn into list if important */
299 * Most of the ARG pointers are used as pointers to arrays of ARG. When
300 * so used, the 0th element is special, and represents the operator to
301 * use on the list of arguments following. The arg_len in the 0th element
302 * gives the maximum argument number, and the arg_str is used to store
303 * the return value in a more-or-less static location. Sorry it's not
304 * re-entrant, but it sure makes it efficient. The arg_type of the
305 * 0th element is an operator (O_*) rather than an argument type (A_*).
308 #define Nullarg Null(ARG*)
310 EXT char opargs[MAXO];