[cfe-commits] [PATCH] PR4111, PR5925, PR13210: Make tentative parsing smarter in the presence of undeclared identifiers
Richard Smith
richard at metafoo.co.uk
Thu Jul 12 21:18:22 PDT 2012
Patch rebased to ToT.
On Sun, Jul 8, 2012 at 2:11 PM, Richard Smith <richard at metafoo.co.uk> wrote:
> Ping.
>
>
> On Fri, Jun 29, 2012 at 12:49 PM, Richard Smith <richard at metafoo.co.uk>wrote:
>
>> 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/20120712/31b6e123/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: annotate-name-2.diff
Type: application/octet-stream
Size: 43909 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20120712/31b6e123/attachment.obj>
More information about the cfe-commits
mailing list