diff options
| author | Steve Naroff <snaroff@apple.com> | 2008-08-27 16:04:49 +0000 |
|---|---|---|
| committer | Steve Naroff <snaroff@apple.com> | 2008-08-27 16:04:49 +0000 |
| commit | ec33ed9ced52101dc26bcc8848711ae47d559e75 (patch) | |
| tree | 1b86aacfd191866daf33a4b0cbe9c32ccd1e1a24 /clang/lib/Parse/ParseDecl.cpp | |
| parent | 539f74c87de862e197318a214390a9f948528cf6 (diff) | |
| download | bcm5719-llvm-ec33ed9ced52101dc26bcc8848711ae47d559e75.tar.gz bcm5719-llvm-ec33ed9ced52101dc26bcc8848711ae47d559e75.zip | |
First wave of changes to support "blocks" (an extension to C).
This commit adds the declaration syntax (and associated type).
llvm-svn: 55417
Diffstat (limited to 'clang/lib/Parse/ParseDecl.cpp')
| -rw-r--r-- | clang/lib/Parse/ParseDecl.cpp | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp index def039b98d6..76fca9e885f 100644 --- a/clang/lib/Parse/ParseDecl.cpp +++ b/clang/lib/Parse/ParseDecl.cpp @@ -1111,14 +1111,15 @@ void Parser::ParseDeclarator(Declarator &D) { void Parser::ParseDeclaratorInternal(Declarator &D) { tok::TokenKind Kind = Tok.getKind(); - // Not a pointer or C++ reference. - if (Kind != tok::star && (Kind != tok::amp || !getLang().CPlusPlus)) + // Not a pointer, C++ reference, or block. + if (Kind != tok::star && (Kind != tok::amp || !getLang().CPlusPlus) && + (Kind != tok::caret || !getLang().Blocks)) return ParseDirectDeclarator(D); // Otherwise, '*' -> pointer or '&' -> reference. SourceLocation Loc = ConsumeToken(); // Eat the * or &. - if (Kind == tok::star) { + if (Kind == tok::star || Kind == tok::caret) { // Is a pointer. DeclSpec DS; @@ -1126,10 +1127,14 @@ void Parser::ParseDeclaratorInternal(Declarator &D) { // Recursively parse the declarator. ParseDeclaratorInternal(D); - - // Remember that we parsed a pointer type, and remember the type-quals. - D.AddTypeInfo(DeclaratorChunk::getPointer(DS.getTypeQualifiers(), Loc, - DS.TakeAttributes())); + if (Kind == tok::star) + // Remember that we parsed a pointer type, and remember the type-quals. + D.AddTypeInfo(DeclaratorChunk::getPointer(DS.getTypeQualifiers(), Loc, + DS.TakeAttributes())); + else + // Remember that we parsed a Block type, and remember the type-quals. + D.AddTypeInfo(DeclaratorChunk::getBlockPointer(DS.getTypeQualifiers(), + Loc)); } else { // Is a reference DeclSpec DS; |

