diff options
author | Ted Kremenek <kremenek@apple.com> | 2009-11-17 23:12:20 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2009-11-17 23:12:20 +0000 |
commit | c09cba67d0ad01e53e0fed07322e95dd281bcfd9 (patch) | |
tree | 9410b477f0582359c707acb5080363990f6adf02 | |
parent | 64989f04d13d9a4a62cc7ebee6351b7c4dbe2e74 (diff) |
Pass source locations of identifiers referenced by @class through Action::ActOnForwardClassDeclaration().
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@89162 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/clang/Parse/Action.h | 2 | ||||
-rw-r--r-- | lib/Frontend/PrintParserCallbacks.cpp | 3 | ||||
-rw-r--r-- | lib/Parse/MinimalAction.cpp | 4 | ||||
-rw-r--r-- | lib/Parse/ParseObjc.cpp | 8 | ||||
-rw-r--r-- | lib/Sema/Sema.h | 5 | ||||
-rw-r--r-- | lib/Sema/SemaDeclObjC.cpp | 1 |
6 files changed, 17 insertions, 6 deletions
diff --git a/include/clang/Parse/Action.h b/include/clang/Parse/Action.h index ceeb9c40e5..f656905219 100644 --- a/include/clang/Parse/Action.h +++ b/include/clang/Parse/Action.h @@ -2102,6 +2102,7 @@ public: virtual DeclPtrTy ActOnForwardClassDeclaration( SourceLocation AtClassLoc, IdentifierInfo **IdentList, + SourceLocation *IdentLocs, unsigned NumElts) { return DeclPtrTy(); } @@ -2415,6 +2416,7 @@ public: virtual DeclPtrTy ActOnForwardClassDeclaration(SourceLocation AtClassLoc, IdentifierInfo **IdentList, + SourceLocation *SLocs, unsigned NumElts); virtual DeclPtrTy ActOnStartClassInterface(SourceLocation interLoc, diff --git a/lib/Frontend/PrintParserCallbacks.cpp b/lib/Frontend/PrintParserCallbacks.cpp index 25b40c7818..deb5498b90 100644 --- a/lib/Frontend/PrintParserCallbacks.cpp +++ b/lib/Frontend/PrintParserCallbacks.cpp @@ -79,10 +79,11 @@ namespace { /// Scope will always be top level file scope. Action::DeclPtrTy ActOnForwardClassDeclaration(SourceLocation AtClassLoc, IdentifierInfo **IdentList, + SourceLocation *IdentLocs, unsigned NumElts) { Out << __FUNCTION__ << "\n"; return MinimalAction::ActOnForwardClassDeclaration(AtClassLoc, IdentList, - NumElts); + IdentLocs, NumElts); } // Pure Printing diff --git a/lib/Parse/MinimalAction.cpp b/lib/Parse/MinimalAction.cpp index bf05b2bacc..a83966d91e 100644 --- a/lib/Parse/MinimalAction.cpp +++ b/lib/Parse/MinimalAction.cpp @@ -213,7 +213,9 @@ MinimalAction::ActOnStartClassInterface(SourceLocation AtInterfaceLoc, /// Scope will always be top level file scope. Action::DeclPtrTy MinimalAction::ActOnForwardClassDeclaration(SourceLocation AtClassLoc, - IdentifierInfo **IdentList, unsigned NumElts) { + IdentifierInfo **IdentList, + SourceLocation *IdentLocs, + unsigned NumElts) { for (unsigned i = 0; i != NumElts; ++i) { // Allocate and add the 'TypeNameInfo' "decl". getTable(TypeNameInfoTablePtr)->AddEntry(true, IdentList[i]); diff --git a/lib/Parse/ParseObjc.cpp b/lib/Parse/ParseObjc.cpp index 6ca2314ef4..6a2c213553 100644 --- a/lib/Parse/ParseObjc.cpp +++ b/lib/Parse/ParseObjc.cpp @@ -61,6 +61,8 @@ Parser::DeclPtrTy Parser::ParseObjCAtDirectives() { Parser::DeclPtrTy Parser::ParseObjCAtClassDeclaration(SourceLocation atLoc) { ConsumeToken(); // the identifier "class" llvm::SmallVector<IdentifierInfo *, 8> ClassNames; + llvm::SmallVector<SourceLocation, 8> ClassLocs; + while (1) { if (Tok.isNot(tok::identifier)) { @@ -69,6 +71,7 @@ Parser::DeclPtrTy Parser::ParseObjCAtClassDeclaration(SourceLocation atLoc) { return DeclPtrTy(); } ClassNames.push_back(Tok.getIdentifierInfo()); + ClassLocs.push_back(Tok.getLocation()); ConsumeToken(); if (Tok.isNot(tok::comma)) @@ -81,8 +84,9 @@ Parser::DeclPtrTy Parser::ParseObjCAtClassDeclaration(SourceLocation atLoc) { if (ExpectAndConsume(tok::semi, diag::err_expected_semi_after, "@class")) return DeclPtrTy(); - return Actions.ActOnForwardClassDeclaration(atLoc, - &ClassNames[0], ClassNames.size()); + return Actions.ActOnForwardClassDeclaration(atLoc, ClassNames.data(), + ClassLocs.data(), + ClassNames.size()); } /// diff --git a/lib/Sema/Sema.h b/lib/Sema/Sema.h index ab8e58754e..637075be71 100644 --- a/lib/Sema/Sema.h +++ b/lib/Sema/Sema.h @@ -3505,8 +3505,9 @@ public: SourceLocation CatLoc); virtual DeclPtrTy ActOnForwardClassDeclaration(SourceLocation Loc, - IdentifierInfo **IdentList, - unsigned NumElts); + IdentifierInfo **IdentList, + SourceLocation *IdentLocs, + unsigned NumElts); virtual DeclPtrTy ActOnForwardProtocolDeclaration(SourceLocation AtProtocolLoc, const IdentifierLocPair *IdentList, diff --git a/lib/Sema/SemaDeclObjC.cpp b/lib/Sema/SemaDeclObjC.cpp index 54b0c3afab..8961cf165a 100644 --- a/lib/Sema/SemaDeclObjC.cpp +++ b/lib/Sema/SemaDeclObjC.cpp @@ -1160,6 +1160,7 @@ Sema::AtomicPropertySetterGetterRules (ObjCImplDecl* IMPDecl, Action::DeclPtrTy Sema::ActOnForwardClassDeclaration(SourceLocation AtClassLoc, IdentifierInfo **IdentList, + SourceLocation *IdentLocs, unsigned NumElts) { llvm::SmallVector<ObjCInterfaceDecl*, 32> Interfaces; |