OSDN Git Service

* tree-ssa-ifcombine.c (get_name_for_bit_test): Use
[pf3gnuchains/gcc-fork.git] / 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, 2007
9    Free Software Foundation, Inc.
10
11 This file is part of GCC.
12
13 GCC is free software; you can redistribute it and/or modify
14 it under the terms of the GNU General Public License as published by
15 the Free Software Foundation; either version 3, or (at your option)
16 any later version.
17
18 GCC is distributed in the hope that it will be useful,
19 but WITHOUT ANY WARRANTY; without even the implied warranty of
20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21 GNU General Public License for more details.
22
23 You should have received a copy of the GNU General Public License
24 along with GCC; see the file COPYING3.  If not see
25 <http://www.gnu.org/licenses/>.  */
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 /* This one is needed for mangling.  */
133 DEF_SIMPLE_OPERATOR ("::", SCOPE_REF, "sr", 2)
134
135 /* Assignment operators.  */
136 DEF_ASSN_OPERATOR ("=", NOP_EXPR, "aS", 2)
137 DEF_ASSN_OPERATOR ("+=", PLUS_EXPR, "pL", 2)
138 DEF_ASSN_OPERATOR ("-=", MINUS_EXPR, "mI", 2)
139 DEF_ASSN_OPERATOR ("*=", MULT_EXPR, "mL", 2)
140 DEF_ASSN_OPERATOR ("/=", TRUNC_DIV_EXPR, "dV", 2)
141 DEF_ASSN_OPERATOR ("%=", TRUNC_MOD_EXPR, "rM", 2)
142 DEF_ASSN_OPERATOR ("&=", BIT_AND_EXPR, "aN", 2)
143 DEF_ASSN_OPERATOR ("|=", BIT_IOR_EXPR, "oR", 2)
144 DEF_ASSN_OPERATOR ("^=", BIT_XOR_EXPR, "eO", 2)
145 DEF_ASSN_OPERATOR ("<<=", LSHIFT_EXPR, "lS", 2)
146 DEF_ASSN_OPERATOR (">>=", RSHIFT_EXPR, "rS", 2)
147
148 /* Ternary operators.  */
149 DEF_SIMPLE_OPERATOR ("?:", COND_EXPR, "qu", 3)
150
151 /* Miscellaneous.  */
152 DEF_SIMPLE_OPERATOR ("()", CALL_EXPR, "cl", -1)
153
154 /* Variadic templates extension. */
155 DEF_SIMPLE_OPERATOR ("...", EXPR_PACK_EXPANSION, "pu", 1)