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 | 9bd1d8d174a9d15ae343246c8322299248b9e92a (patch) | |
tree | 3d34514eefa6e0da0657c72c9d326bacbbeb2326 /lib/Parse/ParseExprCXX.cpp | |
parent | d93fae659ca26558c62dd654e24293be024408af (diff) |
Teach the C++ simple-type-specifier parser and tentative parses about
protocol-qualified types such as id<Protocol>.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@117081 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Parse/ParseExprCXX.cpp')
-rw-r--r-- | lib/Parse/ParseExprCXX.cpp | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/lib/Parse/ParseExprCXX.cpp b/lib/Parse/ParseExprCXX.cpp index 77cb4492f6..7b03757cdc 100644 --- a/lib/Parse/ParseExprCXX.cpp +++ b/lib/Parse/ParseExprCXX.cpp @@ -914,7 +914,19 @@ void Parser::ParseCXXSimpleTypeSpecifier(DeclSpec &DS) { case tok::annot_typename: { DS.SetTypeSpecType(DeclSpec::TST_typename, Loc, PrevSpec, DiagID, getTypeAnnotation(Tok)); - break; + + DS.SetRangeEnd(Tok.getAnnotationEndLoc()); + ConsumeToken(); + + // Objective-C supports syntax of the form 'id<proto1,proto2>' where 'id' + // is a specific typedef and 'itf<proto1,proto2>' where 'itf' is an + // Objective-C interface. If we don't have Objective-C or a '<', this is + // just a normal reference to a typedef name. + if (Tok.is(tok::less) && getLang().ObjC1) + ParseObjCProtocolQualifiers(DS); + + DS.Finish(Diags, PP); + return; } // builtin types |