[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