From 710c2b22da0ad75408359050e5228103967c64d7 Mon Sep 17 00:00:00 2001 From: Delyan Angelov Date: Sun, 16 Oct 2022 10:42:53 +0300 Subject: [PATCH] parser: fix infinite loop for `type Handler = fn (test string) string` without newline at the end --- vlib/v/parser/parser.v | 6 ++++++ vlib/v/parser/tests/type_fn_eof_on_same_line.out | 0 vlib/v/parser/tests/type_fn_eof_on_same_line.vv | 1 + 3 files changed, 7 insertions(+) create mode 100644 vlib/v/parser/tests/type_fn_eof_on_same_line.out create mode 100644 vlib/v/parser/tests/type_fn_eof_on_same_line.vv diff --git a/vlib/v/parser/parser.v b/vlib/v/parser/parser.v index e4538cd87..583e988f2 100644 --- a/vlib/v/parser/parser.v +++ b/vlib/v/parser/parser.v @@ -471,6 +471,9 @@ fn (p &Parser) peek_token_after_var_list() token.Token { mut n := 0 mut tok := p.tok for { + if tok.kind == .eof { + break + } if tok.kind == .key_mut { n += 2 } else { @@ -495,6 +498,9 @@ fn (p &Parser) is_fn_type_decl() bool { cur_ln := p.tok.line_nr for { tok = p.scanner.peek_token(n) + if tok.kind == .eof { + break + } if tok.kind in [.lpar, .rpar] { n++ prev_tok = tok diff --git a/vlib/v/parser/tests/type_fn_eof_on_same_line.out b/vlib/v/parser/tests/type_fn_eof_on_same_line.out new file mode 100644 index 000000000..e69de29bb diff --git a/vlib/v/parser/tests/type_fn_eof_on_same_line.vv b/vlib/v/parser/tests/type_fn_eof_on_same_line.vv new file mode 100644 index 000000000..7665b0f09 --- /dev/null +++ b/vlib/v/parser/tests/type_fn_eof_on_same_line.vv @@ -0,0 +1 @@ +type Handler = fn (test string) string \ No newline at end of file -- 2.39.5