diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2008-01-04 23:23:46 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2008-01-04 23:23:46 +0000 |
commit | bdd15f701fe98f77b1b8ddb3f4a5c0d83bb8fa9c (patch) | |
tree | 7619d720ff87d8d5247c2478c6366af2bb46887f | |
parent | 773a310030b50b622eb6c5150497989eff2f5afa (diff) |
Added a comment, minor refactoring of foreach parsing code per Chris's suggestion.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@45601 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | Parse/ParseDecl.cpp | 3 | ||||
-rw-r--r-- | Parse/ParseStmt.cpp | 20 |
2 files changed, 13 insertions, 10 deletions
diff --git a/Parse/ParseDecl.cpp b/Parse/ParseDecl.cpp index dccc00e671..99be5caf3f 100644 --- a/Parse/ParseDecl.cpp +++ b/Parse/ParseDecl.cpp @@ -296,6 +296,9 @@ ParseInitDeclaratorListAfterFirstDeclarator(Declarator &D) { ConsumeToken(); return Actions.FinalizeDeclaratorGroup(CurScope, LastDeclInGroup); } + // 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 (D.getContext() == Declarator::ForContext && isTokIdentifier_in()) { return Actions.FinalizeDeclaratorGroup(CurScope, LastDeclInGroup); } diff --git a/Parse/ParseStmt.cpp b/Parse/ParseStmt.cpp index e55c3f905d..8cccf23888 100644 --- a/Parse/ParseStmt.cpp +++ b/Parse/ParseStmt.cpp @@ -746,7 +746,7 @@ Parser::StmtResult Parser::ParseForStatement() { StmtTy *FirstPart = 0; ExprTy *SecondPart = 0; StmtTy *ThirdPart = 0; - bool foreach = false; + bool ForEach = false; // Parse the first part of the for specifier. if (Tok.is(tok::semi)) { // for (; @@ -759,7 +759,7 @@ Parser::StmtResult Parser::ParseForStatement() { DeclTy *aBlockVarDecl = ParseDeclaration(Declarator::ForContext); StmtResult stmtResult = Actions.ActOnDeclStmt(aBlockVarDecl); FirstPart = stmtResult.isInvalid ? 0 : stmtResult.Val; - if ((foreach = isTokIdentifier_in())) { + if ((ForEach = isTokIdentifier_in())) { ConsumeToken(); // consume 'in' Value = ParseExpression(); if (!Value.isInvalid) @@ -778,7 +778,7 @@ Parser::StmtResult Parser::ParseForStatement() { if (Tok.is(tok::semi)) { ConsumeToken(); } - else if ((foreach = isTokIdentifier_in())) { + else if ((ForEach = isTokIdentifier_in())) { ConsumeToken(); // consume 'in' Value = ParseExpression(); if (!Value.isInvalid) @@ -789,7 +789,7 @@ Parser::StmtResult Parser::ParseForStatement() { SkipUntil(tok::semi); } } - if (!foreach) { + if (!ForEach) { // Parse the second part of the for specifier. if (Tok.is(tok::semi)) { // for (...;; // no second part. @@ -842,12 +842,12 @@ Parser::StmtResult Parser::ParseForStatement() { if (Body.isInvalid) return Body; - return !foreach ? Actions.ActOnForStmt(ForLoc, LParenLoc, FirstPart, - SecondPart, ThirdPart, RParenLoc, - Body.Val) - : Actions.ActOnObjcForCollectionStmt(ForLoc, LParenLoc, - FirstPart, SecondPart, - RParenLoc, Body.Val); + if (!ForEach) + return Actions.ActOnForStmt(ForLoc, LParenLoc, FirstPart, + SecondPart, ThirdPart, RParenLoc, Body.Val); + else + return Actions.ActOnObjcForCollectionStmt(ForLoc, LParenLoc, FirstPart, + SecondPart, RParenLoc, Body.Val); } /// ParseGotoStatement |