cor3ntin added a comment.

Thanks Tom, I replied to your comments



================
Comment at: clang/lib/Lex/Lexer.cpp:3378-3379
 
-  if (LooseMatch)
+  // If no diagnostic has been emitted yet we do not want to recover here
+  // to make sure this function will be called again and a diagnostic emitted 
then.
+  if (LooseMatch && Diagnose)
----------------
tahonermann wrote:
> I'm having a hard time understanding what this comment is trying to convey. 
> The comment response to Aaron was much more helpful to me. How about this 
> suggested edit?
It's not that a diagnostic would be emitted twice, is that it would not be 
emitted at all.
By recovering - ie returning a loose match - we prevent the function to be 
called again on the same buffer.
So if during the first call Diagnose is false (because we were called from a 
tryXXXX function), then the compilation will continue assuming we were in fact 
able to parse an identifier and never informs us of an invalid name.


================
Comment at: clang/lib/Lex/Lexer.cpp:3386
+
+  if (!Result || CurPtr - StartPtr == (ptrdiff_t)(Buffer.size() + 4))
     StartPtr = CurPtr;
----------------
tahonermann wrote:
> This is a bit of a tangent, but under what circumstances would `CurPtr - 
> StartPtr` not be equal to `Buffer.size() + 4`? Actually, I'm not sure that +4 
> is correct. It looks like `StartPtr` is expected to point to `N` at the 
> beginning of the function, so the initial `\` is not included in the range. 
> If `N` isn't seen, the function returns early. Likewise, if either of the `{` 
> or `}` delimiters is not found, the function returns early.
> 
> I think the goal of this code is to skip the `getAndAdvanceChar()` machinery 
> when the buffer is being claimed (no need to parse UCNs or trigraphs in the 
> character name), but it looks like, particularly with this DR, that we might 
> always be able to do that.
afaict, 4 is correct here because we are one past-the-end.
I do however agree that this whole pattern which is used a few times is 
probably unnecessary, i do think it would be good to investigate. Not in this 
patch though, imo


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D138861/new/

https://reviews.llvm.org/D138861

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to