aboutsummaryrefslogtreecommitdiff
path: root/lib/Parse/ParseDecl.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-03-29 17:27:48 +0000
committerChris Lattner <sabre@nondot.org>2009-03-29 17:27:48 +0000
commitcd1477562e7cf03279850885583d615e1f631dd4 (patch)
treed7b054d0c3d9742f9e491932046397d92f558651 /lib/Parse/ParseDecl.cpp
parent23c4b1883b13dc17484b7214091b73f3ba29096e (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.cpp20
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);