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 10This file is part of GCC. 11 12GCC 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 17GCC 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 GCC; see the file COPYING. If not, write to 24the Free Software Foundation, 51 Franklin Street, Fifth Floor, 25Boston, 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. */ 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 ("+", UNARY_PLUS_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/* These are extensions. */ 97DEF_SIMPLE_OPERATOR ("alignof", ALIGNOF_EXPR, "v17alignof", 1) 98DEF_SIMPLE_OPERATOR ("__imag__", IMAGPART_EXPR, "v18__imag__", 1) 99DEF_SIMPLE_OPERATOR ("__real__", REALPART_EXPR, "v18__real__", 1) 100 101/* The cast operator. */ 102DEF_SIMPLE_OPERATOR ("", TYPE_EXPR, "cv", 1) 103DEF_SIMPLE_OPERATOR ("", CAST_EXPR, "cv", 1) 104DEF_SIMPLE_OPERATOR ("", CONST_CAST_EXPR, "cv", 1) 105DEF_SIMPLE_OPERATOR ("", STATIC_CAST_EXPR, "cv", 1) 106 107/* Binary operators. */ 108DEF_SIMPLE_OPERATOR ("+", PLUS_EXPR, "pl", 2) 109DEF_SIMPLE_OPERATOR ("-", MINUS_EXPR, "mi", 2) 110DEF_SIMPLE_OPERATOR ("*", MULT_EXPR, "ml", 2) 111DEF_SIMPLE_OPERATOR ("/", TRUNC_DIV_EXPR, "dv", 2) 112DEF_SIMPLE_OPERATOR ("%", TRUNC_MOD_EXPR, "rm", 2) 113DEF_SIMPLE_OPERATOR ("&", BIT_AND_EXPR, "an", 2) 114DEF_SIMPLE_OPERATOR ("|", BIT_IOR_EXPR, "or", 2) 115DEF_SIMPLE_OPERATOR ("^", BIT_XOR_EXPR, "eo", 2) 116DEF_SIMPLE_OPERATOR ("<<", LSHIFT_EXPR, "ls", 2) 117DEF_SIMPLE_OPERATOR (">>", RSHIFT_EXPR, "rs", 2) 118DEF_SIMPLE_OPERATOR ("==", EQ_EXPR, "eq", 2) 119DEF_SIMPLE_OPERATOR ("!=", NE_EXPR, "ne", 2) 120DEF_SIMPLE_OPERATOR ("<", LT_EXPR, "lt", 2) 121DEF_SIMPLE_OPERATOR (">", GT_EXPR, "gt", 2) 122DEF_SIMPLE_OPERATOR ("<=", LE_EXPR, "le", 2) 123DEF_SIMPLE_OPERATOR (">=", GE_EXPR, "ge", 2) 124DEF_SIMPLE_OPERATOR ("&&", TRUTH_ANDIF_EXPR, "aa", 2) 125DEF_SIMPLE_OPERATOR ("||", TRUTH_ORIF_EXPR, "oo", 2) 126DEF_SIMPLE_OPERATOR (",", COMPOUND_EXPR, "cm", 2) 127DEF_SIMPLE_OPERATOR ("->*", MEMBER_REF, "pm", 2) 128DEF_SIMPLE_OPERATOR ("->", COMPONENT_REF, "pt", 2) 129DEF_SIMPLE_OPERATOR ("[]", ARRAY_REF, "ix", 2) 130DEF_SIMPLE_OPERATOR ("++", POSTINCREMENT_EXPR, "pp", 2) 131DEF_SIMPLE_OPERATOR ("--", POSTDECREMENT_EXPR, "mm", 2) 132/* This one is needed for mangling. */ 133DEF_SIMPLE_OPERATOR ("::", SCOPE_REF, "sr", 2) 134 135/* Assignment operators. */ 136DEF_ASSN_OPERATOR ("=", NOP_EXPR, "aS", 2) 137DEF_ASSN_OPERATOR ("+=", PLUS_EXPR, "pL", 2) 138DEF_ASSN_OPERATOR ("-=", MINUS_EXPR, "mI", 2) 139DEF_ASSN_OPERATOR ("*=", MULT_EXPR, "mL", 2) 140DEF_ASSN_OPERATOR ("/=", TRUNC_DIV_EXPR, "dV", 2) 141DEF_ASSN_OPERATOR ("%=", TRUNC_MOD_EXPR, "rM", 2) 142DEF_ASSN_OPERATOR ("&=", BIT_AND_EXPR, "aN", 2) 143DEF_ASSN_OPERATOR ("|=", BIT_IOR_EXPR, "oR", 2) 144DEF_ASSN_OPERATOR ("^=", BIT_XOR_EXPR, "eO", 2) 145DEF_ASSN_OPERATOR ("<<=", LSHIFT_EXPR, "lS", 2) 146DEF_ASSN_OPERATOR (">>=", RSHIFT_EXPR, "rS", 2) 147 148/* Ternary operators. */ 149DEF_SIMPLE_OPERATOR ("?:", COND_EXPR, "qu", 3) 150 151/* Miscellaneous. */ 152DEF_SIMPLE_OPERATOR ("()", CALL_EXPR, "cl", -1) 153