зеркало из https://github.com/microsoft/clang-1.git
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
This commit is contained in:
Родитель
773a310030
Коммит
bdd15f701f
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Загрузка…
Ссылка в новой задаче