diff options
author | Douglas Gregor <dgregor@apple.com> | 2010-10-21 23:17:00 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2010-10-21 23:17:00 +0000 |
commit | 06e41ae5c77c6a918b84b858f49089809e1e956f (patch) | |
tree | a56bca0f71e3ba7de4e8b6aa530d24a081621725 /clang/lib/Parse/ParseObjc.cpp | |
parent | e2ec62e252fb2150a315e2c523cfa6f2f213fb31 (diff) | |
download | bcm5719-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.cpp | 17 |
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] '}' /// |