126 lines
5.4 KiB
Modula-2
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
|