1193326Sed//===--- OperatorKinds.def - C++ Overloaded Operator Database ---*- C++ -*-===// 2193326Sed// 3193326Sed// The LLVM Compiler Infrastructure 4193326Sed// 5193326Sed// This file is distributed under the University of Illinois Open Source 6193326Sed// License. See LICENSE.TXT for details. 7193326Sed// 8193326Sed//===----------------------------------------------------------------------===// 9193326Sed// 10193326Sed// This file defines the OverloadedOperator database, which includes 11193326Sed// all of the overloadable C++ operators. 12193326Sed// 13193326Sed//===----------------------------------------------------------------------===// 14193326Sed// 15193326Sed/// @file OperatorKinds.def 16193326Sed/// 17193326Sed/// In this file, each of the overloadable C++ operators is enumerated 18193326Sed/// with either the OVERLOADED_OPERATOR or OVERLOADED_OPERATOR_MULTI 19193326Sed/// macro, each of which can be specified by the code including this 20193326Sed/// file. OVERLOADED_OPERATOR is used for single-token operators 21193326Sed/// (e.g., "+"), and has six arguments: 22193326Sed/// 23193326Sed/// Name: The name of the token. OO_Name will be the name of the 24193326Sed/// corresponding enumerator in OverloadedOperatorKind in 25193326Sed/// OperatorKinds.h. 26193326Sed/// 27193326Sed/// Spelling: A string that provides a canonical spelling for the 28193326Sed/// operator, e.g., "operator+". 29193326Sed/// 30193326Sed/// Token: The name of the token that specifies the operator, e.g., 31193326Sed/// "plus" for operator+ or "greatergreaterequal" for 32193326Sed/// "operator>>=". With a "kw_" prefix, the token name can be used as 33193326Sed/// an enumerator into the TokenKind enumeration. 34193326Sed/// 35193326Sed/// Unary: True if the operator can be declared as a unary operator. 36193326Sed/// 37193326Sed/// Binary: True if the operator can be declared as a binary 38193326Sed/// operator. Note that some operators (e.g., "operator+" and 39193326Sed/// "operator*") can be both unary and binary. 40193326Sed/// 41193326Sed/// MemberOnly: True if this operator can only be declared as a 42193326Sed/// non-static member function. False if the operator can be both a 43193326Sed/// non-member function and a non-static member function. 44193326Sed/// 45193326Sed/// OVERLOADED_OPERATOR_MULTI is used to enumerate the multi-token 46193326Sed/// overloaded operator names, e.g., "operator delete []". The macro 47193326Sed/// has all of the parameters of OVERLOADED_OPERATOR except Token, 48193326Sed/// which is omitted. 49193326Sed 50193326Sed#ifndef OVERLOADED_OPERATOR 51193326Sed# define OVERLOADED_OPERATOR(Name,Spelling,Token,Unary,Binary,MemberOnly) 52193326Sed#endif 53193326Sed 54193326Sed#ifndef OVERLOADED_OPERATOR_MULTI 55193326Sed# define OVERLOADED_OPERATOR_MULTI(Name,Spelling,Unary,Binary,MemberOnly) \ 56193326Sed OVERLOADED_OPERATOR(Name,Spelling,unknown,Unary,Binary,MemberOnly) 57193326Sed#endif 58193326Sed 59193326SedOVERLOADED_OPERATOR_MULTI(New , "new" , true , true , false) 60193326SedOVERLOADED_OPERATOR_MULTI(Delete , "delete" , true , true , false) 61193326SedOVERLOADED_OPERATOR_MULTI(Array_New , "new[]" , true , true , false) 62193326SedOVERLOADED_OPERATOR_MULTI(Array_Delete , "delete[]" , true , true , false) 63193326SedOVERLOADED_OPERATOR(Plus , "+" , plus , true , true , false) 64193326SedOVERLOADED_OPERATOR(Minus , "-" , minus , true , true , false) 65193326SedOVERLOADED_OPERATOR(Star , "*" , star , true , true , false) 66193326SedOVERLOADED_OPERATOR(Slash , "/" , slash , false, true , false) 67193326SedOVERLOADED_OPERATOR(Percent , "%" , percent , false, true , false) 68193326SedOVERLOADED_OPERATOR(Caret , "^" , caret , false, true , false) 69193326SedOVERLOADED_OPERATOR(Amp , "&" , amp , true , true , false) 70193326SedOVERLOADED_OPERATOR(Pipe , "|" , pipe , false, true , false) 71193326SedOVERLOADED_OPERATOR(Tilde , "~" , tilde , true , false, false) 72193326SedOVERLOADED_OPERATOR(Exclaim , "!" , exclaim , true , false, false) 73193326SedOVERLOADED_OPERATOR(Equal , "=" , equal , false, true , true) 74193326SedOVERLOADED_OPERATOR(Less , "<" , less , false, true , false) 75193326SedOVERLOADED_OPERATOR(Greater , ">" , greater , false, true , false) 76193326SedOVERLOADED_OPERATOR(PlusEqual , "+=" , plusequal , false, true , false) 77193326SedOVERLOADED_OPERATOR(MinusEqual , "-=" , minusequal , false, true , false) 78193326SedOVERLOADED_OPERATOR(StarEqual , "*=" , starequal , false, true , false) 79193326SedOVERLOADED_OPERATOR(SlashEqual , "/=" , slashequal , false, true , false) 80193326SedOVERLOADED_OPERATOR(PercentEqual , "%=" , percentequal , false, true , false) 81193326SedOVERLOADED_OPERATOR(CaretEqual , "^=" , caretequal , false, true , false) 82193326SedOVERLOADED_OPERATOR(AmpEqual , "&=" , ampequal , false, true , false) 83193326SedOVERLOADED_OPERATOR(PipeEqual , "|=" , pipeequal , false, true , false) 84193326SedOVERLOADED_OPERATOR(LessLess , "<<" , lessless , false, true , false) 85193326SedOVERLOADED_OPERATOR(GreaterGreater , ">>" , greatergreater , false, true , false) 86193326SedOVERLOADED_OPERATOR(LessLessEqual , "<<=" , lesslessequal , false, true , false) 87193326SedOVERLOADED_OPERATOR(GreaterGreaterEqual , ">>=" , greatergreaterequal, false, true , false) 88193326SedOVERLOADED_OPERATOR(EqualEqual , "==" , equalequal , false, true , false) 89193326SedOVERLOADED_OPERATOR(ExclaimEqual , "!=" , exclaimequal , false, true , false) 90193326SedOVERLOADED_OPERATOR(LessEqual , "<=" , lessequal , false, true , false) 91193326SedOVERLOADED_OPERATOR(GreaterEqual , ">=" , greaterequal , false, true , false) 92193326SedOVERLOADED_OPERATOR(AmpAmp , "&&" , ampamp , false, true , false) 93193326SedOVERLOADED_OPERATOR(PipePipe , "||" , pipepipe , false, true , false) 94193326SedOVERLOADED_OPERATOR(PlusPlus , "++" , plusplus , true , true , false) 95193326SedOVERLOADED_OPERATOR(MinusMinus , "--" , minusminus , true , true , false) 96193326SedOVERLOADED_OPERATOR(Comma , "," , comma , false, true , false) 97193326SedOVERLOADED_OPERATOR(ArrowStar , "->*" , arrowstar , false, true , false) 98193326SedOVERLOADED_OPERATOR(Arrow , "->" , arrow , true , false, true) 99193326SedOVERLOADED_OPERATOR_MULTI(Call , "()" , true , true , true) 100193326SedOVERLOADED_OPERATOR_MULTI(Subscript , "[]" , false, true , true) 101193326Sed// ?: can *not* be overloaded, but we need the overload 102193326Sed// resolution machinery for it. 103193326SedOVERLOADED_OPERATOR_MULTI(Conditional , "?" , false, true , false) 104193326Sed 105193326Sed#undef OVERLOADED_OPERATOR_MULTI 106193326Sed#undef OVERLOADED_OPERATOR 107