NetBSD/usr.bin/xlint/lint1/ops.def

126 lines
5.4 KiB
Modula-2

/* $NetBSD: ops.def,v 1.29 2022/06/15 18:44:41 rillig Exp $ */
begin_ops()
/*
* Operator properties; see mod_t in op.h.
*
* warn if operand '=' x
* bad on enum x
* valid on enum x
* comparison - - - - - - - - - - - - - - - - x
* possible precedence confusion x |
* warn if right operand unsigned x |
* warn if left operand unsigned x |
* has side effects - - - - - - - - - - - - x |
* balance operands x | |
* (unused) x | |
* value context x | |
* fold constant operands - - - - - - - - x | |
* requires scalar x | | |
* requires arithmetic x | | |
* requires integer or complex x | | |
* requires integer - - - - x | | |
* compares with zero x | | | |
* takes _Bool x | | | |
* logical x | | | |
* binary x | | | |
*/
/* name repr b l b z i c a s f v - b s l r p c e e = */
op( NOOP, "no-op", , , , , , , , , , , , , , , , , , , , )
op( ARROW, "->", 1, ,1, , , , , , ,1, , , , , , , , , , )
op( POINT, ".", 1, ,1, , , , , , , , , , , , , , , , , )
op( NOT, "!", ,1,1,1, , , ,1,1, , , , , , , , , ,1, )
op( COMPL, "~", , , , , ,1, , ,1,1, , , , , , , , ,1,1)
op( INC, "++", , , , , , , , , , , , , , , , , , , , )
op( DEC, "--", , , , , , , , , , , , , , , , , , , , )
op( INCBEF, "++x", , , , , , , ,1, , , , ,1, , , , , ,1, )
op( DECBEF, "--x", , , , , , , ,1, , , , ,1, , , , , ,1, )
op( INCAFT, "x++", , , , , , , ,1, , , , ,1, , , , , ,1, )
op( DECAFT, "x--", , , , , , , ,1, , , , ,1, , , , , ,1, )
op( UPLUS, "+", , , , , , ,1, ,1,1, , , , , , , , ,1,1)
op( UMINUS, "-", , , , , , ,1, ,1,1, , , ,1, , , , ,1,1)
op( INDIR, "*", , , , , , , , , ,1, , , , , , , , , , )
op( ADDR, "&", , ,1, , , , , , , , , , , , , , , , , )
/* the operator 'arr[ind]' is translated to '*(arr + ind)' during parsing. */
/* name repr b l b z i c a s f v - b s l r p c e e = */
op( MULT, "*", 1, , , , , ,1, ,1,1, ,1, , ,1, , , ,1,1)
op( DIV, "/", 1, , , , , ,1, ,1,1, ,1, ,1,1, , , ,1,1)
op( MOD, "%", 1, , , ,1, , , ,1,1, ,1, ,1,1, , , ,1,1)
op( PLUS, "+", 1, , , , , , ,1,1,1, ,1, , , , , , ,1, )
op( MINUS, "-", 1, , , , , , ,1,1,1, ,1, , , , , , ,1, )
op( SHL, "<<", 1, , , ,1, , , ,1,1, , , , , ,1, , ,1,1)
op( SHR, ">>", 1, , , ,1, , , ,1,1, , , ,1, ,1, , ,1,1)
/* name repr b l b z i c a s f v - b s l r p c e e = */
op( LT, "<", 1,1, , , , , ,1,1,1, ,1, ,1,1, ,1,1, ,1)
op( LE, "<=", 1,1, , , , , ,1,1,1, ,1, ,1,1, ,1,1, ,1)
op( GT, ">", 1,1, , , , , ,1,1,1, ,1, ,1,1, ,1,1, ,1)
op( GE, ">=", 1,1, , , , , ,1,1,1, ,1, ,1,1, ,1,1, ,1)
op( EQ, "==", 1,1,1, , , , ,1,1,1, ,1, , , , ,1,1, ,1)
op( NE, "!=", 1,1,1, , , , ,1,1,1, ,1, , , , ,1,1, ,1)
/* name repr b l b z i c a s f v - b s l r p c e e = */
op( BITAND, "&", 1, ,1, ,1, , , ,1,1, ,1, , , ,1, , ,1, )
op( BITXOR, "^", 1, ,1, ,1, , , ,1,1, ,1, , , ,1, , ,1, )
op( BITOR, "|", 1, ,1, ,1, , , ,1,1, ,1, , , ,1, , ,1, )
op( LOGAND, "&&", 1,1,1,1, , , ,1,1, , , , , , , , , ,1, )
op( LOGOR, "||", 1,1,1,1, , , ,1,1, , , , , , ,1, , ,1, )
op( QUEST, "?", 1, , ,1, , , , ,1, , , , , , , , , , , )
op( COLON, ":", 1, ,1, , , , , , ,1, ,1, , , , , ,1, , )
/* name repr b l b z i c a s f v - b s l r p c e e = */
op( ASSIGN, "=", 1, ,1, , , , , , , , , ,1, , , , ,1, , )
op( MULASS, "*=", 1, , , , , ,1, , , , , ,1, , , , , ,1, )
op( DIVASS, "/=", 1, , , , , ,1, , , , , ,1, ,1, , , ,1, )
op( MODASS, "%=", 1, , , ,1, , , , , , , ,1, ,1, , , ,1, )
op( ADDASS, "+=", 1, , , , , , ,1, , , , ,1, , , , , ,1, )
op( SUBASS, "-=", 1, , , , , , ,1, , , , ,1, , , , , ,1, )
op( SHLASS, "<<=", 1, , , ,1, , , , , , , ,1, , , , , ,1, )
op( SHRASS, ">>=", 1, , , ,1, , , , , , , ,1, , , , , ,1, )
op( ANDASS, "&=", 1, ,1, ,1, , , , , , , ,1, , , , , ,1, )
op( XORASS, "^=", 1, ,1, ,1, , , , , , , ,1, , , , , ,1, )
op( ORASS, "|=", 1, ,1, ,1, , , , , , , ,1, , , , , ,1, )
/* name repr b l b z i c a s f v - b s l r p c e e = */
op( NAME, "name", , , , , , , , , , , , , , , , , , , , )
op( CON, "constant", , , , , , , , , , , , , , , , , , , , )
op( STRING, "string", , , , , , , , , , , , , , , , , , , , )
op( FSEL, "fsel", , , , , , , , , , , , , , , , , , , , )
op( CALL, "call", 1, , , , , , , , , , , ,1, , , , , , , )
op( COMMA, ",", 1, ,1, , , , , , , , , , , , , , , , ,1)
op( CVT, "convert", , , , , , , , , ,1, , , , , , , , , , )
op( ICALL, "icall", 1, , , , , , , , , , , ,1, , , , , , , )
op( LOAD, "load", , , , , , , , , , , , , , , , , , , , )
/*
* PUSH is a virtual node that is used to concatenate arguments in a function
* call expression. The PUSH nodes are ordered from right to left. For
* example, the function call f(17, 23) is represented as
* CALL(f, PUSH(23, PUSH(17, NULL))).
*/
op( PUSH, "push", , , , , , , , , ,1, , , , , , , , , , )
op( RETURN, "return", 1, ,1, , , , , , , , , ,1, , , , ,1, , )
op( REAL, "real", , , , , , , , , , , , , , , , , , , , )
op( IMAG, "imag", , , , , , , , , , , , , , , , , , , , )
/* INIT, CASE and FARG are pseudo operators that don't appear in the tree. */
/* name repr b l b z i c a s f v - b s l r p c e e = */
op( INIT, "init", 1, ,1, , , , , , , , , ,1, , , , ,1, , )
op( CASE, "case", , , , , , , , , , , , , , , , , , , , )
/*
* FARG is only used temporarily in check_prototype_argument to check type
* compatibility and conversion for function arguments.
*/
op( FARG, "farg", 1, ,1, , , , , , , , , , , , , , ,1, , )
end_ops()
#ifndef NOPS
# define NOPS ((int)FARG + 1)
#endif
#undef begin_ops
#undef op
#undef end_ops