diff options
-rw-r--r-- | include/clang/Lex/Token.h | 4 | ||||
-rw-r--r-- | include/clang/Parse/Parser.h | 7 | ||||
-rw-r--r-- | lib/Lex/Lexer.cpp | 6 | ||||
-rw-r--r-- | lib/Parse/Parser.cpp | 2 | ||||
-rw-r--r-- | lib/Sema/Sema.cpp | 2 | ||||
-rw-r--r-- | lib/Sema/Sema.h | 5 | ||||
-rw-r--r-- | lib/Sema/SemaExpr.cpp | 2 | ||||
-rw-r--r-- | lib/Sema/SemaExprObjC.cpp | 2 |
8 files changed, 16 insertions, 14 deletions
diff --git a/include/clang/Lex/Token.h b/include/clang/Lex/Token.h index d5bfd9cdf5..474d4048d1 100644 --- a/include/clang/Lex/Token.h +++ b/include/clang/Lex/Token.h @@ -85,10 +85,6 @@ public: IdentInfo = II; } - /// isNamedIdentifier - Return true if this token is a ppidentifier with the - /// specified name. For example, tok.isNamedIdentifier("this"). - bool isNamedIdentifier(const char *Name) const; - /// setFlag - Set the specified flag. void setFlag(TokenFlags Flag) { Flags |= Flag; diff --git a/include/clang/Parse/Parser.h b/include/clang/Parse/Parser.h index cd63b9951c..83ec0a7a8c 100644 --- a/include/clang/Parse/Parser.h +++ b/include/clang/Parse/Parser.h @@ -51,6 +51,11 @@ class Parser { enum { ScopeCacheSize = 16 }; unsigned NumCachedScopes; Scope *ScopeCache[ScopeCacheSize]; + + /// Ident_super - IdentifierInfo for "super", to support fast + /// comparison. + IdentifierInfo *Ident_super; + public: Parser(Preprocessor &PP, Action &Actions); ~Parser(); @@ -434,7 +439,7 @@ private: if (Actions.isTypeName(*Tok.getIdentifierInfo(), CurScope)) return true; - return Tok.isNamedIdentifier("super"); + return Tok.getIdentifierInfo() == Ident_super; } ExprResult ParseObjCAtExpression(SourceLocation AtLocation); diff --git a/lib/Lex/Lexer.cpp b/lib/Lex/Lexer.cpp index 4fbbe3cc46..8bce589f17 100644 --- a/lib/Lex/Lexer.cpp +++ b/lib/Lex/Lexer.cpp @@ -51,12 +51,6 @@ tok::ObjCKeywordKind Token::getObjCKeywordID() const { return specId ? specId->getObjCKeywordID() : tok::objc_not_keyword; } -/// isNamedIdentifier - Return true if this token is a ppidentifier with the -/// specified name. For example, tok.isNamedIdentifier("this"). -bool Token::isNamedIdentifier(const char *Name) const { - return IdentInfo && !strcmp(IdentInfo->getName(), Name); -} - //===----------------------------------------------------------------------===// // Lexer Class Implementation diff --git a/lib/Parse/Parser.cpp b/lib/Parse/Parser.cpp index 7bd8b7b893..a5e73cce32 100644 --- a/lib/Parse/Parser.cpp +++ b/lib/Parse/Parser.cpp @@ -267,6 +267,8 @@ void Parser::Initialize() { &PP.getIdentifierTable().get("nonatomic"); ObjCForCollectionInKW = &PP.getIdentifierTable().get("in"); } + + Ident_super = &PP.getIdentifierTable().get("super"); } /// ParseTopLevelDecl - Parse one top-level declaration, return whatever the diff --git a/lib/Sema/Sema.cpp b/lib/Sema/Sema.cpp index 46c9e994ce..c8d83bd4a5 100644 --- a/lib/Sema/Sema.cpp +++ b/lib/Sema/Sema.cpp @@ -103,6 +103,8 @@ Sema::Sema(Preprocessor &pp, ASTContext &ctxt, ASTConsumer &consumer) KnownFunctionIDs[id_vsprintf] = &IT.get("vsprintf"); KnownFunctionIDs[id_vprintf] = &IT.get("vprintf"); + SuperID = &IT.get("super"); + TUScope = 0; if (getLangOptions().CPlusPlus) FieldCollector.reset(new CXXFieldCollector()); diff --git a/lib/Sema/Sema.h b/lib/Sema/Sema.h index d6dcaf2b9a..98f98aa353 100644 --- a/lib/Sema/Sema.h +++ b/lib/Sema/Sema.h @@ -137,7 +137,10 @@ public: /// kinds of checking (e.g. checking format string errors in printf calls). /// This list is populated upon the creation of a Sema object. IdentifierInfo* KnownFunctionIDs[ id_num_known_functions ]; - + + /// SuperID - Identifier for "super" used for Objective-C checking. + IdentifierInfo* SuperID; + /// Translation Unit Scope - useful to Objective-C actions that need /// to lookup file scope declarations in the "ordinary" C decl namespace. /// For example, user-defined classes, built-in "id" type, etc. diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index 2e99b3dfe8..58a126be6c 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -328,7 +328,7 @@ Sema::ExprResult Sema::ActOnIdentifierExpr(Scope *S, SourceLocation Loc, } } // Needed to implement property "super.method" notation. - if (SD == 0 && !strcmp(II.getName(), "super")) { + if (SD == 0 && &II == SuperID) { QualType T = Context.getPointerType(Context.getObjCInterfaceType( getCurMethodDecl()->getClassInterface())); return new PredefinedExpr(Loc, T, PredefinedExpr::ObjCSuper); diff --git a/lib/Sema/SemaExprObjC.cpp b/lib/Sema/SemaExprObjC.cpp index 75546ea903..7c2f45b6db 100644 --- a/lib/Sema/SemaExprObjC.cpp +++ b/lib/Sema/SemaExprObjC.cpp @@ -150,7 +150,7 @@ Sema::ExprResult Sema::ActOnClassMessage( ObjCInterfaceDecl* ClassDecl = 0; bool isSuper = false; - if (!strcmp(receiverName->getName(), "super") && getCurMethodDecl()) { + if (receiverName == SuperID && getCurMethodDecl()) { isSuper = true; ClassDecl = getCurMethodDecl()->getClassInterface()->getSuperClass(); if (!ClassDecl) |