On Fri, Jun 29, 2012 at 11:46 AM, Sean Silva <[email protected]> wrote:
> + case ANK_TentativeDecl:
> + case ANK_TemplateName:
> + // These two shouldn't happen.
> + case ANK_Unresolved:
> break;
>
> assert?
>
Sorry, I forgot to update that comment after some refactoring. The second
case is possible (but only for ill-formed code), and the first case is
completely harmless. I've updated and simplified this code to remove the
switch entirely:
case tok::identifier: {
Token Next = NextToken();
if (Next.is(tok::colon)) { // C99 6.8.1: labeled-statement
// identifier ':' statement
return ParseLabeledStatement(Attrs);
}
// Look up the identifier, and typo-correct it to a keyword if it's not
// found.
if (Next.isNot(tok::coloncolon)) {
// CorrectionCandidateCallback by default allows typo-correction to
// anything which can appear at the start of a statement.
CorrectionCandidateCallback DefaultValidator;
if (TryAnnotateName(/*IsAddressOfOperand*/false, &DefaultValidator)
== ANK_Error) {
// Handle errors here by skipping up to the next semicolon or '}',
and
// eat the semicolon if that's what stopped us.
SkipUntil(tok::r_brace, /*StopAtSemi=*/true, /*DontConsume=*/true);
if (Tok.is(tok::semi))
ConsumeToken();
return StmtError();
}
// If the identifier was typo-corrected, try again.
if (Tok.isNot(tok::identifier))
goto Retry;
}
// Fall through
}
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits