operators.def revision 117395
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). 690075Sobrien Writtey by Mark Mitchell <mark@codesourcery.com> 790075Sobrien 8117395Skan Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. 990075Sobrien 1090075SobrienThis file is part of GNU CC. 1190075Sobrien 1290075SobrienGNU CC 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 1790075SobrienGNU CC 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 2390075Sobrienalong with GNU CC; 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) 9690075Sobrien/* This is an extension. */ 9790075SobrienDEF_SIMPLE_OPERATOR ("alignof", ALIGNOF_EXPR, "v17alignof", 1) 9890075Sobrien 9990075Sobrien/* The cast operator. */ 10090075SobrienDEF_SIMPLE_OPERATOR ("", TYPE_EXPR, "cv", 1) 10190075SobrienDEF_SIMPLE_OPERATOR ("", CAST_EXPR, "cv", 1) 10290075SobrienDEF_SIMPLE_OPERATOR ("", CONST_CAST_EXPR, "cv", 1) 10390075SobrienDEF_SIMPLE_OPERATOR ("", STATIC_CAST_EXPR, "cv", 1) 10490075Sobrien 10590075Sobrien/* Binary operators. */ 10690075SobrienDEF_SIMPLE_OPERATOR ("+", PLUS_EXPR, "pl", 2) 10790075SobrienDEF_SIMPLE_OPERATOR ("-", MINUS_EXPR, "mi", 2) 10890075SobrienDEF_SIMPLE_OPERATOR ("*", MULT_EXPR, "ml", 2) 10990075SobrienDEF_SIMPLE_OPERATOR ("/", TRUNC_DIV_EXPR, "dv", 2) 11090075SobrienDEF_SIMPLE_OPERATOR ("%", TRUNC_MOD_EXPR, "rm", 2) 11190075SobrienDEF_SIMPLE_OPERATOR ("&", BIT_AND_EXPR, "an", 2) 11290075SobrienDEF_SIMPLE_OPERATOR ("|", BIT_IOR_EXPR, "or", 2) 11390075SobrienDEF_SIMPLE_OPERATOR ("^", BIT_XOR_EXPR, "eo", 2) 11490075SobrienDEF_SIMPLE_OPERATOR ("<<", LSHIFT_EXPR, "ls", 2) 11590075SobrienDEF_SIMPLE_OPERATOR (">>", RSHIFT_EXPR, "rs", 2) 11690075SobrienDEF_SIMPLE_OPERATOR ("==", EQ_EXPR, "eq", 2) 11790075SobrienDEF_SIMPLE_OPERATOR ("!=", NE_EXPR, "ne", 2) 11890075SobrienDEF_SIMPLE_OPERATOR ("<", LT_EXPR, "lt", 2) 11990075SobrienDEF_SIMPLE_OPERATOR (">", GT_EXPR, "gt", 2) 12090075SobrienDEF_SIMPLE_OPERATOR ("<=", LE_EXPR, "le", 2) 12190075SobrienDEF_SIMPLE_OPERATOR (">=", GE_EXPR, "ge", 2) 12290075SobrienDEF_SIMPLE_OPERATOR ("&&", TRUTH_ANDIF_EXPR, "aa", 2) 12390075SobrienDEF_SIMPLE_OPERATOR ("||", TRUTH_ORIF_EXPR, "oo", 2) 12490075SobrienDEF_SIMPLE_OPERATOR (",", COMPOUND_EXPR, "cm", 2) 12590075SobrienDEF_SIMPLE_OPERATOR ("->*", MEMBER_REF, "pm", 2) 12690075SobrienDEF_SIMPLE_OPERATOR ("->", COMPONENT_REF, "pt", 2) 12790075SobrienDEF_SIMPLE_OPERATOR ("[]", ARRAY_REF, "ix", 2) 12890075SobrienDEF_SIMPLE_OPERATOR ("++", POSTINCREMENT_EXPR, "pp", 2) 12990075SobrienDEF_SIMPLE_OPERATOR ("--", POSTDECREMENT_EXPR, "mm", 2) 130110611Skan/* These operators are GNU extensions. */ 13190075SobrienDEF_SIMPLE_OPERATOR ("<?", MIN_EXPR, "v23min", 2) 13290075SobrienDEF_SIMPLE_OPERATOR (">?", MAX_EXPR, "v23max", 2) 13390075Sobrien/* This one is needed for mangling. */ 13490075SobrienDEF_SIMPLE_OPERATOR ("::", SCOPE_REF, "sr", 2); 13590075Sobrien 13690075Sobrien/* Assignment operators. */ 13790075SobrienDEF_ASSN_OPERATOR ("=", NOP_EXPR, "aS", 2) 13890075SobrienDEF_ASSN_OPERATOR ("+=", PLUS_EXPR, "pL", 2) 13990075SobrienDEF_ASSN_OPERATOR ("-=", MINUS_EXPR, "mI", 2) 14090075SobrienDEF_ASSN_OPERATOR ("*=", MULT_EXPR, "mL", 2) 14190075SobrienDEF_ASSN_OPERATOR ("/=", TRUNC_DIV_EXPR, "dV", 2) 14290075SobrienDEF_ASSN_OPERATOR ("%=", TRUNC_MOD_EXPR, "rM", 2) 14390075SobrienDEF_ASSN_OPERATOR ("&=", BIT_AND_EXPR, "aN", 2) 14490075SobrienDEF_ASSN_OPERATOR ("|=", BIT_IOR_EXPR, "oR", 2) 14590075SobrienDEF_ASSN_OPERATOR ("^=", BIT_XOR_EXPR, "eO", 2) 14690075SobrienDEF_ASSN_OPERATOR ("<<=", LSHIFT_EXPR, "lS", 2) 14790075SobrienDEF_ASSN_OPERATOR (">>=", RSHIFT_EXPR, "rS", 2) 148110611Skan/* These operators are GNU extensions. */ 149110611SkanDEF_ASSN_OPERATOR ("<?=", MIN_EXPR, "v23miN", 2); 150110611SkanDEF_ASSN_OPERATOR (">?=", MAX_EXPR, "v23maX", 2); 15190075Sobrien 15290075Sobrien/* Ternary operators. */ 15390075SobrienDEF_SIMPLE_OPERATOR ("?:", COND_EXPR, "qu", 3) 15490075Sobrien 15590075Sobrien/* Miscellaneous. */ 15690075SobrienDEF_SIMPLE_OPERATOR ("()", CALL_EXPR, "cl", -1) 157