operators.def revision 132718
190075Sobrien/* -*-C-*- 290075Sobrien 390075Sobrien This file contains definitions of the various C++ operators, 490075Sobrien including both overloadable operators (like `+') and 590075Sobrien non-overloadable operators (like the `?:' ternary operator). 6132718Skan Written by Mark Mitchell <mark@codesourcery.com> 790075Sobrien 8132718Skan Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc. 990075Sobrien 10132718SkanThis file is part of GCC. 1190075Sobrien 12132718SkanGCC is free software; you can redistribute it and/or modify 1390075Sobrienit under the terms of the GNU General Public License as published by 1490075Sobrienthe Free Software Foundation; either version 2, or (at your option) 1590075Sobrienany later version. 1690075Sobrien 17132718SkanGCC is distributed in the hope that it will be useful, 1890075Sobrienbut WITHOUT ANY WARRANTY; without even the implied warranty of 1990075SobrienMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 2090075SobrienGNU General Public License for more details. 2190075Sobrien 2290075SobrienYou should have received a copy of the GNU General Public License 23132718Skanalong with GCC; see the file COPYING. If not, write to 2490075Sobrienthe Free Software Foundation, 59 Temple Place - Suite 330, 2590075SobrienBoston, MA 02111-1307, USA. */ 2690075Sobrien 2790075Sobrien/* The DEF_OPERATOR macro takes the following arguments: 2890075Sobrien 2990075Sobrien NAME 3090075Sobrien 3190075Sobrien The name of the operator, as a C string, but without the 3290075Sobrien preceding `operator'. This is the name that would be given in 3390075Sobrien the source program. For `operator +', for example, this would be 3490075Sobrien `+'. 3590075Sobrien 3690075Sobrien CODE 3790075Sobrien 3890075Sobrien The tree_code for this operator. For `operator +', for example, 3990075Sobrien this would be PLUS_EXPR. Because there are no tree codes for 4090075Sobrien assignment operators, the same tree-codes are reused; i.e., 4190075Sobrien `operator +' will also have PLUS_EXPR as its CODE. 4290075Sobrien 43110611Skan MANGLING 4490075Sobrien 4590075Sobrien The mangling prefix for the operator, as a C string, and as 4690075Sobrien mangled under the new ABI. For `operator +', for example, this 4790075Sobrien would be "pl". 4890075Sobrien 4990075Sobrien ARITY 5090075Sobrien 5190075Sobrien The arity of the operator, or -1 if any arity is allowed. (As 5290075Sobrien for `operator ()'.) Postincrement and postdecrement operators 5390075Sobrien are marked as binary. 5490075Sobrien 5590075Sobrien ASSN_P 5690075Sobrien 57117395Skan A boolean value. If nonzero, this is an assignment operator. 5890075Sobrien 5990075Sobrien Before including this file, you should define DEFOPERATOR 6090075Sobrien to take these arguments. 6190075Sobrien 6290075Sobrien There is code (such as in grok_op_properties) that depends on the 6390075Sobrien order the operators are presented in this file. In particular, 6490075Sobrien unary operators must precede binary operators. */ 6590075Sobrien 6690075Sobrien/* Use DEF_SIMPLE_OPERATOR to define a non-assignment operator. Its 6790075Sobrien arguments are as for DEF_OPERATOR, but there is no need to provide 6890075Sobrien an ASSIGNMENT_P argument; it is always zero. */ 6990075Sobrien 7090075Sobrien#define DEF_SIMPLE_OPERATOR(NAME, CODE, MANGLING, ARITY) \ 7190075Sobrien DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, 0) 7290075Sobrien 7390075Sobrien/* Use DEF_ASSN_OPERATOR to define an assignment operator. Its 7490075Sobrien arguments are as for DEF_OPERATOR, but there is no need to provide 7590075Sobrien an ASSIGNMENT_P argument; it is always one. */ 7690075Sobrien 7790075Sobrien#define DEF_ASSN_OPERATOR(NAME, CODE, MANGLING, ARITY) \ 7890075Sobrien DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, 1) 7990075Sobrien 8090075Sobrien/* Memory allocation operators. */ 8190075SobrienDEF_SIMPLE_OPERATOR ("new", NEW_EXPR, "nw", -1) 8290075SobrienDEF_SIMPLE_OPERATOR ("new []", VEC_NEW_EXPR, "na", -1) 8390075SobrienDEF_SIMPLE_OPERATOR ("delete", DELETE_EXPR, "dl", -1) 8490075SobrienDEF_SIMPLE_OPERATOR ("delete []", VEC_DELETE_EXPR, "da", -1) 8590075Sobrien 8690075Sobrien/* Unary operators. */ 8790075SobrienDEF_SIMPLE_OPERATOR ("+", CONVERT_EXPR, "ps", 1) 8890075SobrienDEF_SIMPLE_OPERATOR ("-", NEGATE_EXPR, "ng", 1) 8990075SobrienDEF_SIMPLE_OPERATOR ("&", ADDR_EXPR, "ad", 1) 9090075SobrienDEF_SIMPLE_OPERATOR ("*", INDIRECT_REF, "de", 1) 9190075SobrienDEF_SIMPLE_OPERATOR ("~", BIT_NOT_EXPR, "co", 1) 9290075SobrienDEF_SIMPLE_OPERATOR ("!", TRUTH_NOT_EXPR, "nt", 1) 9390075SobrienDEF_SIMPLE_OPERATOR ("++", PREINCREMENT_EXPR, "pp", 1) 9490075SobrienDEF_SIMPLE_OPERATOR ("--", PREDECREMENT_EXPR, "mm", 1) 9590075SobrienDEF_SIMPLE_OPERATOR ("sizeof", SIZEOF_EXPR, "sz", 1) 96132718Skan/* These are extensions. */ 9790075SobrienDEF_SIMPLE_OPERATOR ("alignof", ALIGNOF_EXPR, "v17alignof", 1) 98132718SkanDEF_SIMPLE_OPERATOR ("__imag__", IMAGPART_EXPR, "v18__imag__", 1) 99132718SkanDEF_SIMPLE_OPERATOR ("__real__", REALPART_EXPR, "v18__real__", 1) 10090075Sobrien 10190075Sobrien/* The cast operator. */ 10290075SobrienDEF_SIMPLE_OPERATOR ("", TYPE_EXPR, "cv", 1) 10390075SobrienDEF_SIMPLE_OPERATOR ("", CAST_EXPR, "cv", 1) 10490075SobrienDEF_SIMPLE_OPERATOR ("", CONST_CAST_EXPR, "cv", 1) 10590075SobrienDEF_SIMPLE_OPERATOR ("", STATIC_CAST_EXPR, "cv", 1) 10690075Sobrien 10790075Sobrien/* Binary operators. */ 10890075SobrienDEF_SIMPLE_OPERATOR ("+", PLUS_EXPR, "pl", 2) 10990075SobrienDEF_SIMPLE_OPERATOR ("-", MINUS_EXPR, "mi", 2) 11090075SobrienDEF_SIMPLE_OPERATOR ("*", MULT_EXPR, "ml", 2) 11190075SobrienDEF_SIMPLE_OPERATOR ("/", TRUNC_DIV_EXPR, "dv", 2) 11290075SobrienDEF_SIMPLE_OPERATOR ("%", TRUNC_MOD_EXPR, "rm", 2) 11390075SobrienDEF_SIMPLE_OPERATOR ("&", BIT_AND_EXPR, "an", 2) 11490075SobrienDEF_SIMPLE_OPERATOR ("|", BIT_IOR_EXPR, "or", 2) 11590075SobrienDEF_SIMPLE_OPERATOR ("^", BIT_XOR_EXPR, "eo", 2) 11690075SobrienDEF_SIMPLE_OPERATOR ("<<", LSHIFT_EXPR, "ls", 2) 11790075SobrienDEF_SIMPLE_OPERATOR (">>", RSHIFT_EXPR, "rs", 2) 11890075SobrienDEF_SIMPLE_OPERATOR ("==", EQ_EXPR, "eq", 2) 11990075SobrienDEF_SIMPLE_OPERATOR ("!=", NE_EXPR, "ne", 2) 12090075SobrienDEF_SIMPLE_OPERATOR ("<", LT_EXPR, "lt", 2) 12190075SobrienDEF_SIMPLE_OPERATOR (">", GT_EXPR, "gt", 2) 12290075SobrienDEF_SIMPLE_OPERATOR ("<=", LE_EXPR, "le", 2) 12390075SobrienDEF_SIMPLE_OPERATOR (">=", GE_EXPR, "ge", 2) 12490075SobrienDEF_SIMPLE_OPERATOR ("&&", TRUTH_ANDIF_EXPR, "aa", 2) 12590075SobrienDEF_SIMPLE_OPERATOR ("||", TRUTH_ORIF_EXPR, "oo", 2) 12690075SobrienDEF_SIMPLE_OPERATOR (",", COMPOUND_EXPR, "cm", 2) 12790075SobrienDEF_SIMPLE_OPERATOR ("->*", MEMBER_REF, "pm", 2) 12890075SobrienDEF_SIMPLE_OPERATOR ("->", COMPONENT_REF, "pt", 2) 12990075SobrienDEF_SIMPLE_OPERATOR ("[]", ARRAY_REF, "ix", 2) 13090075SobrienDEF_SIMPLE_OPERATOR ("++", POSTINCREMENT_EXPR, "pp", 2) 13190075SobrienDEF_SIMPLE_OPERATOR ("--", POSTDECREMENT_EXPR, "mm", 2) 132110611Skan/* These operators are GNU extensions. */ 13390075SobrienDEF_SIMPLE_OPERATOR ("<?", MIN_EXPR, "v23min", 2) 13490075SobrienDEF_SIMPLE_OPERATOR (">?", MAX_EXPR, "v23max", 2) 13590075Sobrien/* This one is needed for mangling. */ 136132718SkanDEF_SIMPLE_OPERATOR ("::", SCOPE_REF, "sr", 2) 13790075Sobrien 13890075Sobrien/* Assignment operators. */ 13990075SobrienDEF_ASSN_OPERATOR ("=", NOP_EXPR, "aS", 2) 14090075SobrienDEF_ASSN_OPERATOR ("+=", PLUS_EXPR, "pL", 2) 14190075SobrienDEF_ASSN_OPERATOR ("-=", MINUS_EXPR, "mI", 2) 14290075SobrienDEF_ASSN_OPERATOR ("*=", MULT_EXPR, "mL", 2) 14390075SobrienDEF_ASSN_OPERATOR ("/=", TRUNC_DIV_EXPR, "dV", 2) 14490075SobrienDEF_ASSN_OPERATOR ("%=", TRUNC_MOD_EXPR, "rM", 2) 14590075SobrienDEF_ASSN_OPERATOR ("&=", BIT_AND_EXPR, "aN", 2) 14690075SobrienDEF_ASSN_OPERATOR ("|=", BIT_IOR_EXPR, "oR", 2) 14790075SobrienDEF_ASSN_OPERATOR ("^=", BIT_XOR_EXPR, "eO", 2) 14890075SobrienDEF_ASSN_OPERATOR ("<<=", LSHIFT_EXPR, "lS", 2) 14990075SobrienDEF_ASSN_OPERATOR (">>=", RSHIFT_EXPR, "rS", 2) 150110611Skan/* These operators are GNU extensions. */ 151132718SkanDEF_ASSN_OPERATOR ("<?=", MIN_EXPR, "v23miN", 2) 152132718SkanDEF_ASSN_OPERATOR (">?=", MAX_EXPR, "v23maX", 2) 15390075Sobrien 15490075Sobrien/* Ternary operators. */ 15590075SobrienDEF_SIMPLE_OPERATOR ("?:", COND_EXPR, "qu", 3) 15690075Sobrien 15790075Sobrien/* Miscellaneous. */ 15890075SobrienDEF_SIMPLE_OPERATOR ("()", CALL_EXPR, "cl", -1) 159