[cfe-commits] r112977 - in /cfe/trunk: include/clang/Lex/Token.h lib/Lex/Preprocessor.cpp lib/Parse/ParseObjc.cpp
Fariborz Jahanian
fjahanian at apple.com
Fri Sep 3 10:33:04 PDT 2010
Author: fjahanian
Date: Fri Sep 3 12:33:04 2010
New Revision: 112977
URL: http://llvm.org/viewvc/llvm-project?rev=112977&view=rev
Log:
Use getSpelling to get original text of the
c++ operator token. (radar 8328250).
Modified:
cfe/trunk/include/clang/Lex/Token.h
cfe/trunk/lib/Lex/Preprocessor.cpp
cfe/trunk/lib/Parse/ParseObjc.cpp
Modified: cfe/trunk/include/clang/Lex/Token.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/Token.h?rev=112977&r1=112976&r2=112977&view=diff
==============================================================================
--- cfe/trunk/include/clang/Lex/Token.h (original)
+++ cfe/trunk/include/clang/Lex/Token.h Fri Sep 3 12:33:04 2010
@@ -76,9 +76,7 @@
StartOfLine = 0x01, // At start of line or only after whitespace.
LeadingSpace = 0x02, // Whitespace exists before this token.
DisableExpand = 0x04, // This identifier may never be macro expanded.
- NeedsCleaning = 0x08, // Contained an escaped newline or trigraph.
- CPlusPlusOpKeyword = 0x10 // alternative representation of
- // a C++ operator in objc selectors.
+ NeedsCleaning = 0x08 // Contained an escaped newline or trigraph.
};
tok::TokenKind getKind() const { return (tok::TokenKind)Kind; }
@@ -233,12 +231,7 @@
/// newlines in it.
///
bool needsCleaning() const { return (Flags & NeedsCleaning) ? true : false; }
-
- /// isCPlusPlusOpKeyword - Return true if this token is an operator
- /// for C++ operator keywords.
- bool isCPlusPlusOpKeyword() const
- { return (Flags & CPlusPlusOpKeyword) ? true : false; }
-
+
};
/// PPConditionalInfo - Information about the conditional stack (#if directives)
Modified: cfe/trunk/lib/Lex/Preprocessor.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/Preprocessor.cpp?rev=112977&r1=112976&r2=112977&view=diff
==============================================================================
--- cfe/trunk/lib/Lex/Preprocessor.cpp (original)
+++ cfe/trunk/lib/Lex/Preprocessor.cpp Fri Sep 3 12:33:04 2010
@@ -613,10 +613,8 @@
// C++ 2.11p2: If this is an alternative representation of a C++ operator,
// then we act as if it is the actual operator and not the textual
// representation of it.
- if (II.isCPlusPlusOperatorKeyword()) {
+ if (II.isCPlusPlusOperatorKeyword())
Identifier.setIdentifierInfo(0);
- Identifier.setFlag(Token::CPlusPlusOpKeyword);
- }
// If this is an extension token, diagnose its use.
// We avoid diagnosing tokens that originate from macro definitions.
Modified: cfe/trunk/lib/Parse/ParseObjc.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseObjc.cpp?rev=112977&r1=112976&r2=112977&view=diff
==============================================================================
--- cfe/trunk/lib/Parse/ParseObjc.cpp (original)
+++ cfe/trunk/lib/Parse/ParseObjc.cpp Fri Sep 3 12:33:04 2010
@@ -553,60 +553,6 @@
MatchRHSPunctuation(tok::r_paren, LHSLoc);
}
-static void ConvertCPlusPlusOperatorToken(Preprocessor &PP, Token &Tok) {
- if (!Tok.isCPlusPlusOpKeyword())
- return;
-
- switch (Tok.getKind()) {
- case tok::ampamp:
- Tok.setIdentifierInfo(&PP.getIdentifierTable().get("and"));
- Tok.setKind(tok::identifier);
- return;
- case tok::ampequal:
- Tok.setIdentifierInfo(&PP.getIdentifierTable().get("and_eq"));
- Tok.setKind(tok::identifier);
- return;
- case tok::amp:
- Tok.setIdentifierInfo(&PP.getIdentifierTable().get("bitand"));
- Tok.setKind(tok::identifier);
- return;
- case tok::pipe:
- Tok.setIdentifierInfo(&PP.getIdentifierTable().get("pipe"));
- Tok.setKind(tok::identifier);
- return;
- case tok::tilde:
- Tok.setIdentifierInfo(&PP.getIdentifierTable().get("compl"));
- Tok.setKind(tok::identifier);
- return;
- case tok::exclaim:
- Tok.setIdentifierInfo(&PP.getIdentifierTable().get("not"));
- Tok.setKind(tok::identifier);
- return;
- case tok::exclaimequal:
- Tok.setIdentifierInfo(&PP.getIdentifierTable().get("not_eq"));
- Tok.setKind(tok::identifier);
- return;
- case tok::pipepipe:
- Tok.setIdentifierInfo(&PP.getIdentifierTable().get("or"));
- Tok.setKind(tok::identifier);
- return;
- case tok::pipeequal:
- Tok.setIdentifierInfo(&PP.getIdentifierTable().get("or_eq"));
- Tok.setKind(tok::identifier);
- return;
- case tok::caret:
- Tok.setIdentifierInfo(&PP.getIdentifierTable().get("xor"));
- Tok.setKind(tok::identifier);
- return;
- case tok::caretequal:
- Tok.setIdentifierInfo(&PP.getIdentifierTable().get("xor_eq"));
- Tok.setKind(tok::identifier);
- return;
- default:
- return;
- }
-}
-
/// objc-method-proto:
/// objc-instance-method objc-method-decl objc-method-attributes[opt]
/// objc-class-method objc-method-decl objc-method-attributes[opt]
@@ -638,11 +584,31 @@
/// in out inout bycopy byref oneway int char float double void _Bool
///
IdentifierInfo *Parser::ParseObjCSelectorPiece(SourceLocation &SelectorLoc) {
- ConvertCPlusPlusOperatorToken(PP, Tok);
switch (Tok.getKind()) {
default:
return 0;
+ case tok::ampamp:
+ case tok::ampequal:
+ case tok::amp:
+ case tok::pipe:
+ case tok::tilde:
+ case tok::exclaim:
+ case tok::exclaimequal:
+ case tok::pipepipe:
+ case tok::pipeequal:
+ case tok::caret:
+ case tok::caretequal: {
+ llvm::StringRef ThisTok = PP.getSpelling(Tok);
+ if (isalpha(ThisTok[0])) {
+ IdentifierInfo *II = &PP.getIdentifierTable().get(ThisTok.data());
+ Tok.setKind(tok::identifier);
+ SelectorLoc = ConsumeToken();
+ return II;
+ }
+ return 0;
+ }
+
case tok::identifier:
case tok::kw_asm:
case tok::kw_auto:
More information about the cfe-commits
mailing list