Files
Alex Hoppen b888dc0e40 [Parser] Don't modify the current token kind when cutting off parsing
Previously, when we reached the maximum nesting level, we changed the current token’s kind to an EOF token. A lot of places in the parser are not set up to expect this token change. The intended workaround was to check whether pushing a structure marker failed (which would change the token kind) and bail out parsing if this happened. This was fragile and caused assertion failures in assert builds.

Instead of changing the current token’s kind, and failing to push the structure marker, let the lexer know that it should cut off lexing, essentially making the input buffer stop at the current position. The parser will continue to consume its current token (`Parser.Tok`) and the next token that’s already lexed in the lexer (`Lexer.NextToken`) before reaching the emulated EOF token. Thus two more tokens are parsed than before, but that shouldn’t make much of a difference.
2021-11-09 12:28:10 +01:00

792 lines
8.6 KiB
Swift

func foo(a: Int) {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
if a > 1 {
// This test case used to cause an assertion failure during parsing cut off.
// RUN: not %swift-frontend -typecheck %s