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
>
8 Copyright (C
) 2000, 2001, 2002, 2003, 2005 Free Software Foundation
, Inc.
10 This file is part of GCC.
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
)
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.
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.
*/
27 /* The DEF_OPERATOR macro takes the following arguments
:
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
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.
45 The mangling prefix for the operator, as a C string, and as
46 mangled under the new ABI. For `operator +', for example
, this
51 The arity of the operator
, or
-1 if any arity is allowed.
(As
52 for `
operator ()'.) Postincrement and postdecrement operators
57 A boolean value. If nonzero, this is an assignment operator.
59 Before including this file, you should define DEFOPERATOR
60 to take these arguments.
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. */
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. */
70 #define DEF_SIMPLE_OPERATOR(NAME, CODE, MANGLING, ARITY) \
71 DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, 0)
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. */
77 #define DEF_ASSN_OPERATOR(NAME, CODE, MANGLING, ARITY) \
78 DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, 1)
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)
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)
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)
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)
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)
154 /* Ternary operators. */
155 DEF_SIMPLE_OPERATOR ("?:", COND_EXPR, "qu", 3)
158 DEF_SIMPLE_OPERATOR ("()", CALL_EXPR, "cl", -1)