operators.def revision 117395
1/* -*-C-*-
2	
3   This file contains definitions of the various C++ operators,
4   including both overloadable operators (like `+') and
5   non-overloadable operators (like the `?:' ternary operator).  
6   Writtey by Mark Mitchell <mark@codesourcery.com>
7
8   Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
9
10This file is part of GNU CC.
11
12GNU CC is free software; you can redistribute it and/or modify
13it under the terms of the GNU General Public License as published by
14the Free Software Foundation; either version 2, or (at your option)
15any later version.
16
17GNU CC is distributed in the hope that it will be useful,
18but WITHOUT ANY WARRANTY; without even the implied warranty of
19MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20GNU General Public License for more details.
21
22You should have received a copy of the GNU General Public License
23along with GNU CC; see the file COPYING.  If not, write to
24the Free Software Foundation, 59 Temple Place - Suite 330,
25Boston, MA 02111-1307, USA.  */
26
27/* The DEF_OPERATOR macro takes the following arguments:
28
29   NAME
30
31     The name of the operator, as a C string, but without the
32     preceding `operator'.  This is the name that would be given in
33     the source program.  For `operator +', for example, this would be
34     `+'.
35   
36   CODE
37
38     The tree_code for this operator.  For `operator +', for example,
39     this would be PLUS_EXPR.  Because there are no tree codes for
40     assignment operators, the same tree-codes are reused; i.e.,
41     `operator +' will also have PLUS_EXPR as its CODE.
42
43   MANGLING
44
45     The mangling prefix for the operator, as a C string, and as
46     mangled under the new ABI.  For `operator +', for example, this
47     would be "pl".
48
49   ARITY
50   
51     The arity of the operator, or -1 if any arity is allowed.  (As
52     for `operator ()'.)  Postincrement and postdecrement operators
53     are marked as binary.
54
55   ASSN_P
56
57     A boolean value.  If nonzero, this is an assignment operator.
58
59   Before including this file, you should define DEFOPERATOR
60   to take these arguments.  
61
62   There is code (such as in grok_op_properties) that depends on the
63   order the operators are presented in this file.  In particular,
64   unary operators must precede binary operators.  */
65 
66/* Use DEF_SIMPLE_OPERATOR to define a non-assignment operator.  Its
67   arguments are as for DEF_OPERATOR, but there is no need to provide
68   an ASSIGNMENT_P argument; it is always zero.  */
69
70#define DEF_SIMPLE_OPERATOR(NAME, CODE, MANGLING, ARITY) \
71  DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, 0)
72
73/* Use DEF_ASSN_OPERATOR to define an assignment operator.  Its
74   arguments are as for DEF_OPERATOR, but there is no need to provide
75   an ASSIGNMENT_P argument; it is always one.  */
76
77#define DEF_ASSN_OPERATOR(NAME, CODE, MANGLING, ARITY) \
78  DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, 1)
79
80/* Memory allocation operators.  */
81DEF_SIMPLE_OPERATOR ("new", NEW_EXPR, "nw", -1)
82DEF_SIMPLE_OPERATOR ("new []", VEC_NEW_EXPR, "na", -1)
83DEF_SIMPLE_OPERATOR ("delete", DELETE_EXPR, "dl", -1)
84DEF_SIMPLE_OPERATOR ("delete []", VEC_DELETE_EXPR, "da", -1)
85
86/* Unary operators.  */
87DEF_SIMPLE_OPERATOR ("+", CONVERT_EXPR, "ps", 1)
88DEF_SIMPLE_OPERATOR ("-", NEGATE_EXPR, "ng", 1)
89DEF_SIMPLE_OPERATOR ("&", ADDR_EXPR, "ad", 1)
90DEF_SIMPLE_OPERATOR ("*", INDIRECT_REF, "de", 1)
91DEF_SIMPLE_OPERATOR ("~", BIT_NOT_EXPR, "co", 1)
92DEF_SIMPLE_OPERATOR ("!", TRUTH_NOT_EXPR, "nt", 1)
93DEF_SIMPLE_OPERATOR ("++", PREINCREMENT_EXPR, "pp", 1)
94DEF_SIMPLE_OPERATOR ("--", PREDECREMENT_EXPR, "mm", 1)
95DEF_SIMPLE_OPERATOR ("sizeof", SIZEOF_EXPR, "sz", 1)
96/* This is an extension.  */
97DEF_SIMPLE_OPERATOR ("alignof", ALIGNOF_EXPR, "v17alignof", 1)
98
99/* The cast operator.  */
100DEF_SIMPLE_OPERATOR ("", TYPE_EXPR, "cv", 1)
101DEF_SIMPLE_OPERATOR ("", CAST_EXPR, "cv", 1)
102DEF_SIMPLE_OPERATOR ("", CONST_CAST_EXPR, "cv", 1)
103DEF_SIMPLE_OPERATOR ("", STATIC_CAST_EXPR, "cv", 1)
104
105/* Binary operators.  */
106DEF_SIMPLE_OPERATOR ("+", PLUS_EXPR, "pl", 2)
107DEF_SIMPLE_OPERATOR ("-", MINUS_EXPR, "mi", 2)
108DEF_SIMPLE_OPERATOR ("*", MULT_EXPR, "ml", 2)
109DEF_SIMPLE_OPERATOR ("/", TRUNC_DIV_EXPR, "dv", 2)
110DEF_SIMPLE_OPERATOR ("%", TRUNC_MOD_EXPR, "rm", 2)
111DEF_SIMPLE_OPERATOR ("&", BIT_AND_EXPR, "an", 2)
112DEF_SIMPLE_OPERATOR ("|", BIT_IOR_EXPR, "or", 2)
113DEF_SIMPLE_OPERATOR ("^", BIT_XOR_EXPR, "eo", 2)
114DEF_SIMPLE_OPERATOR ("<<", LSHIFT_EXPR, "ls", 2)
115DEF_SIMPLE_OPERATOR (">>", RSHIFT_EXPR, "rs", 2)
116DEF_SIMPLE_OPERATOR ("==", EQ_EXPR, "eq", 2)
117DEF_SIMPLE_OPERATOR ("!=", NE_EXPR, "ne", 2)
118DEF_SIMPLE_OPERATOR ("<", LT_EXPR, "lt", 2)
119DEF_SIMPLE_OPERATOR (">", GT_EXPR, "gt", 2)
120DEF_SIMPLE_OPERATOR ("<=", LE_EXPR, "le", 2)
121DEF_SIMPLE_OPERATOR (">=", GE_EXPR, "ge", 2)
122DEF_SIMPLE_OPERATOR ("&&", TRUTH_ANDIF_EXPR, "aa", 2)
123DEF_SIMPLE_OPERATOR ("||", TRUTH_ORIF_EXPR, "oo", 2)
124DEF_SIMPLE_OPERATOR (",", COMPOUND_EXPR, "cm", 2)
125DEF_SIMPLE_OPERATOR ("->*", MEMBER_REF, "pm", 2)
126DEF_SIMPLE_OPERATOR ("->", COMPONENT_REF, "pt", 2)
127DEF_SIMPLE_OPERATOR ("[]", ARRAY_REF, "ix", 2)
128DEF_SIMPLE_OPERATOR ("++", POSTINCREMENT_EXPR, "pp", 2)
129DEF_SIMPLE_OPERATOR ("--", POSTDECREMENT_EXPR, "mm", 2)
130/* These operators are GNU extensions.  */
131DEF_SIMPLE_OPERATOR ("<?", MIN_EXPR, "v23min", 2)
132DEF_SIMPLE_OPERATOR (">?", MAX_EXPR, "v23max", 2)
133/* This one is needed for mangling.  */
134DEF_SIMPLE_OPERATOR ("::", SCOPE_REF, "sr", 2);
135
136/* Assignment operators.  */
137DEF_ASSN_OPERATOR ("=", NOP_EXPR, "aS", 2)
138DEF_ASSN_OPERATOR ("+=", PLUS_EXPR, "pL", 2)
139DEF_ASSN_OPERATOR ("-=", MINUS_EXPR, "mI", 2)
140DEF_ASSN_OPERATOR ("*=", MULT_EXPR, "mL", 2)
141DEF_ASSN_OPERATOR ("/=", TRUNC_DIV_EXPR, "dV", 2)
142DEF_ASSN_OPERATOR ("%=", TRUNC_MOD_EXPR, "rM", 2)
143DEF_ASSN_OPERATOR ("&=", BIT_AND_EXPR, "aN", 2)
144DEF_ASSN_OPERATOR ("|=", BIT_IOR_EXPR, "oR", 2)
145DEF_ASSN_OPERATOR ("^=", BIT_XOR_EXPR, "eO", 2)
146DEF_ASSN_OPERATOR ("<<=", LSHIFT_EXPR, "lS", 2)
147DEF_ASSN_OPERATOR (">>=", RSHIFT_EXPR, "rS", 2)
148/* These operators are GNU extensions.  */
149DEF_ASSN_OPERATOR ("<?=", MIN_EXPR, "v23miN", 2);
150DEF_ASSN_OPERATOR (">?=", MAX_EXPR, "v23maX", 2);
151
152/* Ternary operators.  */
153DEF_SIMPLE_OPERATOR ("?:", COND_EXPR, "qu", 3)
154
155/* Miscellaneous.  */
156DEF_SIMPLE_OPERATOR ("()", CALL_EXPR, "cl", -1)
157