diff options
author | Chris Lattner <sabre@nondot.org> | 2009-03-29 17:27:48 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-03-29 17:27:48 +0000 |
commit | cd1477562e7cf03279850885583d615e1f631dd4 (patch) | |
tree | d7b054d0c3d9742f9e491932046397d92f558651 /lib/Parse/ParseDecl.cpp | |
parent | 23c4b1883b13dc17484b7214091b73f3ba29096e (diff) |
hoist some code for handling objc foreach construct out of Declaration processing
into ParseForStatement. Merge two tests into one.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@68010 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Parse/ParseDecl.cpp')
-rw-r--r-- | lib/Parse/ParseDecl.cpp | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/lib/Parse/ParseDecl.cpp b/lib/Parse/ParseDecl.cpp index 5de4dd4a7c..f80afe3f4b 100644 --- a/lib/Parse/ParseDecl.cpp +++ b/lib/Parse/ParseDecl.cpp @@ -257,7 +257,11 @@ Parser::DeclGroupPtrTy Parser::ParseDeclaration(unsigned Context) { /// declaration-specifiers init-declarator-list[opt] ';' ///[C90/C++]init-declarator-list ';' [TODO] /// [OMP] threadprivate-directive [TODO] -Parser::DeclGroupPtrTy Parser::ParseSimpleDeclaration(unsigned Context) { +/// +/// If RequireSemi is false, this does not check for a ';' at the end of the +/// declaration. +Parser::DeclGroupPtrTy Parser::ParseSimpleDeclaration(unsigned Context, + bool RequireSemi) { // Parse the common declaration-specifiers piece. DeclSpec DS; ParseDeclarationSpecifiers(DS); @@ -275,22 +279,16 @@ Parser::DeclGroupPtrTy Parser::ParseSimpleDeclaration(unsigned Context) { DeclGroupPtrTy DG = ParseInitDeclaratorListAfterFirstDeclarator(DeclaratorInfo); + + // If the client wants to check what comes after the declaration, just return + // immediately without checking anything! + if (!RequireSemi) return DG; if (Tok.is(tok::semi)) { ConsumeToken(); - // for(is key; in keys) is error. - if (Context == Declarator::ForContext && isTokIdentifier_in()) - Diag(Tok, diag::err_parse_error); - return DG; } - // If this is an ObjC2 for-each loop, this is a successful declarator - // parse. The syntax for these looks like: - // 'for' '(' declaration 'in' expr ')' statement - if (Context == Declarator::ForContext && isTokIdentifier_in()) - return DG; - Diag(Tok, diag::err_expected_semi_declation); // Skip to end of block or statement SkipUntil(tok::r_brace, true, true); |