summaryrefslogtreecommitdiffstats
path: root/clang/lib/Parse/ParseObjc.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2010-10-21 23:17:00 +0000
committerDouglas Gregor <dgregor@apple.com>2010-10-21 23:17:00 +0000
commit06e41ae5c77c6a918b84b858f49089809e1e956f (patch)
treea56bca0f71e3ba7de4e8b6aa530d24a081621725 /clang/lib/Parse/ParseObjc.cpp
parente2ec62e252fb2150a315e2c523cfa6f2f213fb31 (diff)
downloadbcm5719-llvm-06e41ae5c77c6a918b84b858f49089809e1e956f.tar.gz
bcm5719-llvm-06e41ae5c77c6a918b84b858f49089809e1e956f.zip
Teach the C++ simple-type-specifier parser and tentative parses about
protocol-qualified types such as id<Protocol>. llvm-svn: 117081
Diffstat (limited to 'clang/lib/Parse/ParseObjc.cpp')
-rw-r--r--clang/lib/Parse/ParseObjc.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/clang/lib/Parse/ParseObjc.cpp b/clang/lib/Parse/ParseObjc.cpp
index 2bd44703d9f..f54c3eef079 100644
--- a/clang/lib/Parse/ParseObjc.cpp
+++ b/clang/lib/Parse/ParseObjc.cpp
@@ -1039,6 +1039,23 @@ ParseObjCProtocolReferences(llvm::SmallVectorImpl<Decl *> &Protocols,
return false;
}
+/// \brief Parse the Objective-C protocol qualifiers that follow a typename
+/// in a decl-specifier-seq, starting at the '<'.
+void Parser::ParseObjCProtocolQualifiers(DeclSpec &DS) {
+ assert(Tok.is(tok::less) && "Protocol qualifiers start with '<'");
+ assert(getLang().ObjC1 && "Protocol qualifiers only exist in Objective-C");
+ SourceLocation LAngleLoc, EndProtoLoc;
+ llvm::SmallVector<Decl *, 8> ProtocolDecl;
+ llvm::SmallVector<SourceLocation, 8> ProtocolLocs;
+ ParseObjCProtocolReferences(ProtocolDecl, ProtocolLocs, false,
+ LAngleLoc, EndProtoLoc);
+ DS.setProtocolQualifiers(ProtocolDecl.data(), ProtocolDecl.size(),
+ ProtocolLocs.data(), LAngleLoc);
+ if (EndProtoLoc.isValid())
+ DS.SetRangeEnd(EndProtoLoc);
+}
+
+
/// objc-class-instance-variables:
/// '{' objc-instance-variable-decl-list[opt] '}'
///
OpenPOWER on IntegriCloud