]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/cp/operators.def
Update copyright years.
[thirdparty/gcc.git] / gcc / cp / operators.def
CommitLineData
596ea4e5 1/* -*-C-*-
c8094d83 2
596ea4e5
AS
3 This file contains definitions of the various C++ operators,
4 including both overloadable operators (like `+') and
c8094d83 5 non-overloadable operators (like the `?:' ternary operator).
b599b135 6 Written by Mark Mitchell <mark@codesourcery.com>
596ea4e5 7
8d9254fc 8 Copyright (C) 2000-2020 Free Software Foundation, Inc.
596ea4e5 9
b599b135 10This file is part of GCC.
596ea4e5 11
b599b135 12GCC is free software; you can redistribute it and/or modify
596ea4e5 13it under the terms of the GNU General Public License as published by
e77f031d 14the Free Software Foundation; either version 3, or (at your option)
596ea4e5
AS
15any later version.
16
b599b135 17GCC is distributed in the hope that it will be useful,
596ea4e5
AS
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
e77f031d
NC
23along with GCC; see the file COPYING3. If not see
24<http://www.gnu.org/licenses/>. */
596ea4e5
AS
25
26/* The DEF_OPERATOR macro takes the following arguments:
27
28 NAME
29
30 The name of the operator, as a C string, but without the
aba649ba 31 preceding `operator'. This is the name that would be given in
596ea4e5
AS
32 the source program. For `operator +', for example, this would be
33 `+'.
c8094d83 34
596ea4e5
AS
35 CODE
36
37 The tree_code for this operator. For `operator +', for example,
38 this would be PLUS_EXPR. Because there are no tree codes for
39 assignment operators, the same tree-codes are reused; i.e.,
40 `operator +' will also have PLUS_EXPR as its CODE.
41
b80f8ef3 42 MANGLING
596ea4e5
AS
43
44 The mangling prefix for the operator, as a C string, and as
45 mangled under the new ABI. For `operator +', for example, this
46 would be "pl".
47
f26881e3 48 FLAGS
c8094d83 49
f26881e3
NS
50 ovl_op_flags bits. Postincrement and postdecrement operators are
51 marked as binary.
596ea4e5 52
39a13be5 53 Before including this file, you should define DEF_OPERATOR
c8094d83 54 to take these arguments.
596ea4e5
AS
55
56 There is code (such as in grok_op_properties) that depends on the
d6dd9d7f
NS
57 order the operators are presented in this file. Unary_ops must
58 preceed a matching binary op (i.e. '+'). Assignment operators must
59 be last, after OPERATOR_TRANSITION. */
596ea4e5
AS
60
61/* Use DEF_ASSN_OPERATOR to define an assignment operator. Its
62 arguments are as for DEF_OPERATOR, but there is no need to provide
d6dd9d7f 63 FLAGS (OVL_OP_FLAG_BINARY). */
596ea4e5 64
d6dd9d7f
NS
65#ifndef DEF_ASSN_OPERATOR
66#define DEF_ASSN_OPERATOR(NAME, CODE, MANGLING) \
67 DEF_OPERATOR(NAME, CODE, MANGLING, OVL_OP_FLAG_BINARY)
68#endif
596ea4e5 69
d6dd9d7f
NS
70/* Memory allocation operators. ARITY has special meaning. */
71DEF_OPERATOR ("new", NEW_EXPR, "nw", OVL_OP_FLAG_ALLOC)
f26881e3 72DEF_OPERATOR ("new []", VEC_NEW_EXPR, "na",
d6dd9d7f 73 OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_VEC)
f26881e3 74DEF_OPERATOR ("delete", DELETE_EXPR, "dl",
d6dd9d7f 75 OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE)
f26881e3 76DEF_OPERATOR ("delete []", VEC_DELETE_EXPR, "da",
d6dd9d7f 77 OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE | OVL_OP_FLAG_VEC)
596ea4e5
AS
78
79/* Unary operators. */
d6dd9d7f
NS
80DEF_OPERATOR ("+", UNARY_PLUS_EXPR, "ps", OVL_OP_FLAG_UNARY)
81DEF_OPERATOR ("-", NEGATE_EXPR, "ng", OVL_OP_FLAG_UNARY)
82DEF_OPERATOR ("&", ADDR_EXPR, "ad", OVL_OP_FLAG_UNARY)
83DEF_OPERATOR ("*", INDIRECT_REF, "de", OVL_OP_FLAG_UNARY)
84DEF_OPERATOR ("~", BIT_NOT_EXPR, "co", OVL_OP_FLAG_UNARY)
85DEF_OPERATOR ("!", TRUTH_NOT_EXPR, "nt", OVL_OP_FLAG_UNARY)
86DEF_OPERATOR ("++", PREINCREMENT_EXPR, "pp", OVL_OP_FLAG_UNARY)
87DEF_OPERATOR ("--", PREDECREMENT_EXPR, "mm", OVL_OP_FLAG_UNARY)
88DEF_OPERATOR ("->", COMPONENT_REF, "pt", OVL_OP_FLAG_UNARY)
89DEF_OPERATOR ("sizeof", SIZEOF_EXPR, "sz", OVL_OP_FLAG_UNARY)
90
e05f7974 91/* These are extensions. */
d6dd9d7f
NS
92DEF_OPERATOR ("alignof", ALIGNOF_EXPR, "az", OVL_OP_FLAG_UNARY)
93DEF_OPERATOR ("__imag__", IMAGPART_EXPR, "v18__imag__", OVL_OP_FLAG_UNARY)
94DEF_OPERATOR ("__real__", REALPART_EXPR, "v18__real__", OVL_OP_FLAG_UNARY)
596ea4e5 95
596ea4e5 96/* Binary operators. */
d6dd9d7f
NS
97DEF_OPERATOR ("+", PLUS_EXPR, "pl", OVL_OP_FLAG_BINARY)
98DEF_OPERATOR ("-", MINUS_EXPR, "mi", OVL_OP_FLAG_BINARY)
99DEF_OPERATOR ("*", MULT_EXPR, "ml", OVL_OP_FLAG_BINARY)
100DEF_OPERATOR ("/", TRUNC_DIV_EXPR, "dv", OVL_OP_FLAG_BINARY)
101DEF_OPERATOR ("%", TRUNC_MOD_EXPR, "rm", OVL_OP_FLAG_BINARY)
102DEF_OPERATOR ("&", BIT_AND_EXPR, "an", OVL_OP_FLAG_BINARY)
103DEF_OPERATOR ("|", BIT_IOR_EXPR, "or", OVL_OP_FLAG_BINARY)
104DEF_OPERATOR ("^", BIT_XOR_EXPR, "eo", OVL_OP_FLAG_BINARY)
105DEF_OPERATOR ("<<", LSHIFT_EXPR, "ls", OVL_OP_FLAG_BINARY)
106DEF_OPERATOR (">>", RSHIFT_EXPR, "rs", OVL_OP_FLAG_BINARY)
b7689b96
JM
107
108/* defaultable_fn_check relies on the ordering of the comparison operators. */
d6dd9d7f
NS
109DEF_OPERATOR ("==", EQ_EXPR, "eq", OVL_OP_FLAG_BINARY)
110DEF_OPERATOR ("!=", NE_EXPR, "ne", OVL_OP_FLAG_BINARY)
111DEF_OPERATOR ("<", LT_EXPR, "lt", OVL_OP_FLAG_BINARY)
112DEF_OPERATOR (">", GT_EXPR, "gt", OVL_OP_FLAG_BINARY)
113DEF_OPERATOR ("<=", LE_EXPR, "le", OVL_OP_FLAG_BINARY)
114DEF_OPERATOR (">=", GE_EXPR, "ge", OVL_OP_FLAG_BINARY)
b7689b96
JM
115DEF_OPERATOR ("<=>", SPACESHIP_EXPR, "ss", OVL_OP_FLAG_BINARY)
116
d6dd9d7f
NS
117DEF_OPERATOR ("&&", TRUTH_ANDIF_EXPR, "aa", OVL_OP_FLAG_BINARY)
118DEF_OPERATOR ("||", TRUTH_ORIF_EXPR, "oo", OVL_OP_FLAG_BINARY)
119DEF_OPERATOR (",", COMPOUND_EXPR, "cm", OVL_OP_FLAG_BINARY)
120DEF_OPERATOR ("->*", MEMBER_REF, "pm", OVL_OP_FLAG_BINARY)
121DEF_OPERATOR (".*", DOTSTAR_EXPR, "ds", OVL_OP_FLAG_BINARY)
122DEF_OPERATOR ("[]", ARRAY_REF, "ix", OVL_OP_FLAG_BINARY)
123DEF_OPERATOR ("++", POSTINCREMENT_EXPR, "pp", OVL_OP_FLAG_BINARY)
124DEF_OPERATOR ("--", POSTDECREMENT_EXPR, "mm", OVL_OP_FLAG_BINARY)
6ff16d19
NS
125
126/* Miscellaneous. */
d6dd9d7f
NS
127DEF_OPERATOR ("?:", COND_EXPR, "qu", OVL_OP_FLAG_NONE)
128DEF_OPERATOR ("()", CALL_EXPR, "cl", OVL_OP_FLAG_NONE)
6ff16d19
NS
129
130/* Operators needed for mangling. */
d6dd9d7f
NS
131DEF_OPERATOR (NULL, CAST_EXPR, "cv", OVL_OP_FLAG_UNARY)
132DEF_OPERATOR (NULL, DYNAMIC_CAST_EXPR, "dc", OVL_OP_FLAG_UNARY)
133DEF_OPERATOR (NULL, REINTERPRET_CAST_EXPR, "rc", OVL_OP_FLAG_UNARY)
134DEF_OPERATOR (NULL, CONST_CAST_EXPR, "cc", OVL_OP_FLAG_UNARY)
135DEF_OPERATOR (NULL, STATIC_CAST_EXPR, "sc", OVL_OP_FLAG_UNARY)
136DEF_OPERATOR (NULL, SCOPE_REF, "sr", OVL_OP_FLAG_NONE)
137DEF_OPERATOR (NULL, EXPR_PACK_EXPANSION, "sp", OVL_OP_FLAG_NONE)
138DEF_OPERATOR (NULL, UNARY_LEFT_FOLD_EXPR, "fl", OVL_OP_FLAG_NONE)
139DEF_OPERATOR (NULL, UNARY_RIGHT_FOLD_EXPR, "fr", OVL_OP_FLAG_NONE)
140DEF_OPERATOR (NULL, BINARY_LEFT_FOLD_EXPR, "fL", OVL_OP_FLAG_NONE)
141DEF_OPERATOR (NULL, BINARY_RIGHT_FOLD_EXPR, "fR", OVL_OP_FLAG_NONE)
142
143#ifdef OPERATOR_TRANSITION
144OPERATOR_TRANSITION
145#undef OPERATOR_TRANSITION
146#endif
596ea4e5
AS
147
148/* Assignment operators. */
d6dd9d7f
NS
149DEF_ASSN_OPERATOR ("=", NOP_EXPR, "aS")
150DEF_ASSN_OPERATOR ("+=", PLUS_EXPR, "pL")
151DEF_ASSN_OPERATOR ("-=", MINUS_EXPR, "mI")
152DEF_ASSN_OPERATOR ("*=", MULT_EXPR, "mL")
153DEF_ASSN_OPERATOR ("/=", TRUNC_DIV_EXPR, "dV")
154DEF_ASSN_OPERATOR ("%=", TRUNC_MOD_EXPR, "rM")
155DEF_ASSN_OPERATOR ("&=", BIT_AND_EXPR, "aN")
156DEF_ASSN_OPERATOR ("|=", BIT_IOR_EXPR, "oR")
157DEF_ASSN_OPERATOR ("^=", BIT_XOR_EXPR, "eO")
158DEF_ASSN_OPERATOR ("<<=", LSHIFT_EXPR, "lS")
159DEF_ASSN_OPERATOR (">>=", RSHIFT_EXPR, "rS")
160
161#undef DEF_ASSN_OPERATOR
162#undef DEF_OPERATOR