anutosh491 wrote:

Thanks for the reply.

> I suspect we could somehow invert the rule considering eof as a 
> non-terminator when incremental extensions is on. In this case we will have 
> to figure out the places where eof should be treated as a terminator...

So if i understand correctly, we could probably start with something like this 

1) Add a tiny predicate in Parser and use it where a loop means “stop at end of 
the current unit of input”:
```
// Parser.h
bool isChunkEnd(const Token &T) const {
  if (getLangOpts().IncrementalExtensions)
    return T.is(tok::annot_repl_input_end);
  return T.is(tok::eof);
}
bool isNotChunkEnd(const Token &T) const { return !isChunkEnd(T); }
```

2) Then update parser loops (compound stmt bodies, namespace/class bodies 
present in `clang/lib/Parse/*`)
```
- while (Tok.isNot(tok::r_brace) && Tok.isNot(tok::eof)) {
+ while (Tok.isNot(tok::r_brace) && isNotChunkEnd(Tok)) {
    ...
}

```

3) We wouldn't need to touch other `tok::eof` instances (Rewriter / Frontend / 
HTMLRewrite / tidy checks) I think. Also the ones inside `Parse` would need to 
be changed.

This should work I think. Let me know if you think we could try this !


https://github.com/llvm/llvm-project/pull/127569
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to