Merge from vendor branch GCC:
[dragonfly.git] / contrib / gcc-4.1 / gcc / cp / operators.def
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    Written by Mark Mitchell <mark@codesourcery.com>
7
8    Copyright (C) 2000, 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
9
10 This file is part of GCC.
11
12 GCC is free software; you can redistribute it and/or modify
13 it under the terms of the GNU General Public License as published by
14 the Free Software Foundation; either version 2, or (at your option)
15 any later version.
16
17 GCC is distributed in the hope that it will be useful,
18 but WITHOUT ANY WARRANTY; without even the implied warranty of
19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20 GNU General Public License for more details.
21
22 You should have received a copy of the GNU General Public License
23 along with GCC; see the file COPYING.  If not, write to
24 the Free Software Foundation, 51 Franklin Street, Fifth Floor,
25 Boston, MA 02110-1301, 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.  */
81 DEF_SIMPLE_OPERATOR ("new", NEW_EXPR, "nw", -1)
82 DEF_SIMPLE_OPERATOR ("new []", VEC_NEW_EXPR, "na", -1)
83 DEF_SIMPLE_OPERATOR ("delete", DELETE_EXPR, "dl", -1)
84 DEF_SIMPLE_OPERATOR ("delete []", VEC_DELETE_EXPR, "da", -1)
85
86 /* Unary operators.  */
87 DEF_SIMPLE_OPERATOR ("+", UNARY_PLUS_EXPR, "ps", 1)
88 DEF_SIMPLE_OPERATOR ("-", NEGATE_EXPR, "ng", 1)
89 DEF_SIMPLE_OPERATOR ("&", ADDR_EXPR, "ad", 1)
90 DEF_SIMPLE_OPERATOR ("*", INDIRECT_REF, "de", 1)
91 DEF_SIMPLE_OPERATOR ("~", BIT_NOT_EXPR, "co", 1)
92 DEF_SIMPLE_OPERATOR ("!", TRUTH_NOT_EXPR, "nt", 1)
93 DEF_SIMPLE_OPERATOR ("++", PREINCREMENT_EXPR, "pp", 1)
94 DEF_SIMPLE_OPERATOR ("--", PREDECREMENT_EXPR, "mm", 1)
95 DEF_SIMPLE_OPERATOR ("sizeof", SIZEOF_EXPR, "sz", 1)
96 /* These are extensions.  */
97 DEF_SIMPLE_OPERATOR ("alignof", ALIGNOF_EXPR, "v17alignof", 1)
98 DEF_SIMPLE_OPERATOR ("__imag__", IMAGPART_EXPR, "v18__imag__", 1)
99 DEF_SIMPLE_OPERATOR ("__real__", REALPART_EXPR, "v18__real__", 1)
100
101 /* The cast operator.  */
102 DEF_SIMPLE_OPERATOR ("", TYPE_EXPR, "cv", 1)
103 DEF_SIMPLE_OPERATOR ("", CAST_EXPR, "cv", 1)
104 DEF_SIMPLE_OPERATOR ("", CONST_CAST_EXPR, "cv", 1)
105 DEF_SIMPLE_OPERATOR ("", STATIC_CAST_EXPR, "cv", 1)
106
107 /* Binary operators.  */
108 DEF_SIMPLE_OPERATOR ("+", PLUS_EXPR, "pl", 2)
109 DEF_SIMPLE_OPERATOR ("-", MINUS_EXPR, "mi", 2)
110 DEF_SIMPLE_OPERATOR ("*", MULT_EXPR, "ml", 2)
111 DEF_SIMPLE_OPERATOR ("/", TRUNC_DIV_EXPR, "dv", 2)
112 DEF_SIMPLE_OPERATOR ("%", TRUNC_MOD_EXPR, "rm", 2)
113 DEF_SIMPLE_OPERATOR ("&", BIT_AND_EXPR, "an", 2)
114 DEF_SIMPLE_OPERATOR ("|", BIT_IOR_EXPR, "or", 2)
115 DEF_SIMPLE_OPERATOR ("^", BIT_XOR_EXPR, "eo", 2)
116 DEF_SIMPLE_OPERATOR ("<<", LSHIFT_EXPR, "ls", 2)
117 DEF_SIMPLE_OPERATOR (">>", RSHIFT_EXPR, "rs", 2)
118 DEF_SIMPLE_OPERATOR ("==", EQ_EXPR, "eq", 2)
119 DEF_SIMPLE_OPERATOR ("!=", NE_EXPR, "ne", 2)
120 DEF_SIMPLE_OPERATOR ("<", LT_EXPR, "lt", 2)
121 DEF_SIMPLE_OPERATOR (">", GT_EXPR, "gt", 2)
122 DEF_SIMPLE_OPERATOR ("<=", LE_EXPR, "le", 2)
123 DEF_SIMPLE_OPERATOR (">=", GE_EXPR, "ge", 2)
124 DEF_SIMPLE_OPERATOR ("&&", TRUTH_ANDIF_EXPR, "aa", 2)
125 DEF_SIMPLE_OPERATOR ("||", TRUTH_ORIF_EXPR, "oo", 2)
126 DEF_SIMPLE_OPERATOR (",", COMPOUND_EXPR, "cm", 2)
127 DEF_SIMPLE_OPERATOR ("->*", MEMBER_REF, "pm", 2)
128 DEF_SIMPLE_OPERATOR ("->", COMPONENT_REF, "pt", 2)
129 DEF_SIMPLE_OPERATOR ("[]", ARRAY_REF, "ix", 2)
130 DEF_SIMPLE_OPERATOR ("++", POSTINCREMENT_EXPR, "pp", 2)
131 DEF_SIMPLE_OPERATOR ("--", POSTDECREMENT_EXPR, "mm", 2)
132 /* These operators are GNU extensions.  */
133 DEF_SIMPLE_OPERATOR ("<?", MIN_EXPR, "v23min", 2)
134 DEF_SIMPLE_OPERATOR (">?", MAX_EXPR, "v23max", 2)
135 /* This one is needed for mangling.  */
136 DEF_SIMPLE_OPERATOR ("::", SCOPE_REF, "sr", 2)
137
138 /* Assignment operators.  */
139 DEF_ASSN_OPERATOR ("=", NOP_EXPR, "aS", 2)
140 DEF_ASSN_OPERATOR ("+=", PLUS_EXPR, "pL", 2)
141 DEF_ASSN_OPERATOR ("-=", MINUS_EXPR, "mI", 2)
142 DEF_ASSN_OPERATOR ("*=", MULT_EXPR, "mL", 2)
143 DEF_ASSN_OPERATOR ("/=", TRUNC_DIV_EXPR, "dV", 2)
144 DEF_ASSN_OPERATOR ("%=", TRUNC_MOD_EXPR, "rM", 2)
145 DEF_ASSN_OPERATOR ("&=", BIT_AND_EXPR, "aN", 2)
146 DEF_ASSN_OPERATOR ("|=", BIT_IOR_EXPR, "oR", 2)
147 DEF_ASSN_OPERATOR ("^=", BIT_XOR_EXPR, "eO", 2)
148 DEF_ASSN_OPERATOR ("<<=", LSHIFT_EXPR, "lS", 2)
149 DEF_ASSN_OPERATOR (">>=", RSHIFT_EXPR, "rS", 2)
150 /* These operators are GNU extensions.  */
151 DEF_ASSN_OPERATOR ("<?=", MIN_EXPR, "v23miN", 2)
152 DEF_ASSN_OPERATOR (">?=", MAX_EXPR, "v23maX", 2)
153
154 /* Ternary operators.  */
155 DEF_SIMPLE_OPERATOR ("?:", COND_EXPR, "qu", 3)
156
157 /* Miscellaneous.  */
158 DEF_SIMPLE_OPERATOR ("()", CALL_EXPR, "cl", -1)