forked from OSchip/llvm-project
Pass source locations of identifiers referenced by @class through Action::ActOnForwardClassDeclaration().
llvm-svn: 89162
This commit is contained in:
parent
96b96d5f2e
commit
a26da8503c
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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]);
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
||||
///
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in New Issue