[cfe-commits] [PATCH] PR4111, PR5925, PR13210: Make tentative parsing smarter in the presence of undeclared identifiers
Richard Smith
richard at metafoo.co.uk
Fri Jun 29 12:49:00 PDT 2012
On Fri, Jun 29, 2012 at 11:46 AM, Sean Silva <silvas at purdue.edu> 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
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20120629/2c324d6d/attachment.html>
More information about the cfe-commits
mailing list