]> granicus.if.org Git - clang/commitdiff
Add helper functions Token::isObjCAtKeyword() and Token::getObjCKeywordID().
authorSteve Naroff <snaroff@apple.com>
Thu, 23 Aug 2007 18:16:40 +0000 (18:16 +0000)
committerSteve Naroff <snaroff@apple.com>
Thu, 23 Aug 2007 18:16:40 +0000 (18:16 +0000)
Convert all clients to the new cleaner, more robust API.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41330 91177308-0d34-0410-b5e6-96231b3b80d8

Lex/IdentifierTable.cpp
Parse/ParseObjc.cpp
include/clang/Lex/Token.h

index c12fdef20305dc255a0728cc2fd84c27d170da70..d3faeb58dba50fe40a0d6689e25e38b061508d17 100644 (file)
 #include "clang/Basic/LangOptions.h"
 using namespace clang;
 
+//===----------------------------------------------------------------------===//
+// Token Implementation
+//===----------------------------------------------------------------------===//
+
+/// isObjCAtKeyword - Return true if we have an ObjC keyword identifier. 
+bool Token::isObjCAtKeyword(tok::ObjCKeywordKind objcKey) const {
+  return getKind() == tok::identifier && 
+         getIdentifierInfo()->getObjCKeywordID() == objcKey;
+}
+
+/// getObjCKeywordID - Return the ObjC keyword kind.
+tok::ObjCKeywordKind Token::getObjCKeywordID() const {
+  IdentifierInfo *specId = getIdentifierInfo();
+  return specId ? specId->getObjCKeywordID() : tok::objc_not_keyword;
+}
+
 //===----------------------------------------------------------------------===//
 // IdentifierInfo Implementation
 //===----------------------------------------------------------------------===//
index 3d305668f582eebe2d266150ecff3191c0774fb3..803d820b21b49bbb8b8035aeb355676784b9d873 100644 (file)
@@ -29,8 +29,7 @@ using namespace clang;
 Parser::DeclTy *Parser::ParseObjCAtDirectives() {
   SourceLocation AtLoc = ConsumeToken(); // the "@"
   
-  IdentifierInfo *II = Tok.getIdentifierInfo();
-  switch (II ? II->getObjCKeywordID() : tok::objc_not_keyword) {
+  switch (Tok.getObjCKeywordID()) {
     case tok::objc_class:
       return ParseObjCAtClassDeclaration(AtLoc);
     case tok::objc_interface:
@@ -111,8 +110,7 @@ Parser::DeclTy *Parser::ParseObjCAtClassDeclaration(SourceLocation atLoc) {
 ///
 Parser::DeclTy *Parser::ParseObjCAtInterfaceDeclaration(
   SourceLocation atLoc, AttributeList *attrList) {
-  assert((Tok.getKind() == tok::identifier &&
-          Tok.getIdentifierInfo()->getObjCKeywordID() == tok::objc_interface) &&
+  assert(Tok.isObjCAtKeyword(tok::objc_interface) &&
          "ParseObjCAtInterfaceDeclaration(): Expected @interface");
   ConsumeToken(); // the "interface" identifier
   
@@ -151,8 +149,7 @@ Parser::DeclTy *Parser::ParseObjCAtInterfaceDeclaration(
     ParseObjCInterfaceDeclList(0/*FIXME*/);
 
     // The @ sign was already consumed by ParseObjCInterfaceDeclList().
-    if (Tok.getKind() == tok::identifier &&
-        Tok.getIdentifierInfo()->getObjCKeywordID() == tok::objc_end) {
+    if (Tok.isObjCAtKeyword(tok::objc_end)) {
       ConsumeToken(); // the "end" identifier
       return 0;
     }
@@ -189,8 +186,7 @@ Parser::DeclTy *Parser::ParseObjCAtInterfaceDeclaration(
   ParseObjCInterfaceDeclList(0/*FIXME*/);
 
   // The @ sign was already consumed by ParseObjCInterfaceDeclList().
-  if (Tok.getKind() == tok::identifier &&
-      Tok.getIdentifierInfo()->getObjCKeywordID() == tok::objc_end) {
+  if (Tok.isObjCAtKeyword(tok::objc_end)) {
     ConsumeToken(); // the "end" identifier
     return 0;
   }
@@ -214,7 +210,7 @@ void Parser::ParseObjCInterfaceDeclList(DeclTy *interfaceDecl) {
   while (1) {
     if (Tok.getKind() == tok::at) {
       SourceLocation AtLoc = ConsumeToken(); // the "@"
-      tok::ObjCKeywordKind ocKind = Tok.getIdentifierInfo()->getObjCKeywordID();
+      tok::ObjCKeywordKind ocKind = Tok.getObjCKeywordID();
       
       if (ocKind == tok::objc_end) { // terminate list
         return;
@@ -488,13 +484,12 @@ void Parser::ParseObjCClassInstanceVariables(DeclTy *interfaceDecl) {
     tok::ObjCKeywordKind visibility = tok::objc_private;
     if (Tok.getKind() == tok::at) { // parse objc-visibility-spec
       ConsumeToken(); // eat the @ sign
-      IdentifierInfo *specId = Tok.getIdentifierInfo();
-      switch (specId->getObjCKeywordID()) {
+      switch (Tok.getObjCKeywordID()) {
       case tok::objc_private:
       case tok::objc_public:
       case tok::objc_protected:
       case tok::objc_package:
-        visibility = specId->getObjCKeywordID();
+        visibility = Tok.getObjCKeywordID();
         ConsumeToken();
         continue; 
       default:
@@ -538,8 +533,7 @@ void Parser::ParseObjCClassInstanceVariables(DeclTy *interfaceDecl) {
 ///   semicolon in the first alternative if objc-protocol-refs are omitted.
 
 Parser::DeclTy *Parser::ParseObjCAtProtocolDeclaration(SourceLocation AtLoc) {
-  assert((Tok.getKind() == tok::identifier &&
-          Tok.getIdentifierInfo()->getObjCKeywordID() == tok::objc_protocol) &&
+  assert(Tok.isObjCAtKeyword(tok::objc_protocol) &&
          "ParseObjCAtProtocolDeclaration(): Expected @protocol");
   ConsumeToken(); // the "protocol" identifier
   
@@ -586,8 +580,7 @@ Parser::DeclTy *Parser::ParseObjCAtProtocolDeclaration(SourceLocation AtLoc) {
   ParseObjCInterfaceDeclList(0/*FIXME*/);
 
   // The @ sign was already consumed by ParseObjCInterfaceDeclList().
-  if (Tok.getKind() == tok::identifier &&
-      Tok.getIdentifierInfo()->getObjCKeywordID() == tok::objc_end) {
+  if (Tok.isObjCAtKeyword(tok::objc_end)) {
     ConsumeToken(); // the "end" identifier
     return 0;
   }
@@ -663,8 +656,7 @@ Parser::ExprResult Parser::ParseObjCStringLiteral() {
 ///    objc-encode-expression:
 ///      @encode ( type-name )
 Parser::ExprResult Parser::ParseObjCEncodeExpression() {
-  assert(Tok.getIdentifierInfo()->getObjCKeywordID() == tok::objc_encode && 
-         "Not an @encode expression!");
+  assert(Tok.isObjCAtKeyword(tok::objc_encode) && "Not an @encode expression!");
   
   SourceLocation EncLoc = ConsumeToken();
   
index f3d649bb7eb4fe72943ff6e63dd9491aa0ed6cf2..f336370334d81c7c92dbbc73893a78666fbd3aaa 100644 (file)
@@ -105,7 +105,13 @@ public:
   /// isExpandDisabled - Return true if this identifier token should never
   /// be expanded in the future, due to C99 6.10.3.4p2.
   bool isExpandDisabled() const { return Flags & DisableExpand; }
-    
+  
+  /// isObjCAtKeyword - Return true if we have an ObjC keyword identifier. 
+  bool isObjCAtKeyword(tok::ObjCKeywordKind objcKey) const;
+  
+  /// getObjCKeywordID - Return the ObjC keyword kind.
+  tok::ObjCKeywordKind getObjCKeywordID() const;
+  
   /// needsCleaning - Return true if this token has trigraphs or escaped
   /// newlines in it.
   ///