From 72f45e44340e0b76dbddc598a42facbad27e9c6c Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Thu, 24 Apr 2025 07:53:31 -0300 Subject: [PATCH] parser: fix wrong string parsing (fix #24297) (#24298) --- vlib/v/parser/parser.v | 3 ++- vlib/v/tests/if_elseif_else_test.v | 28 ++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 vlib/v/tests/if_elseif_else_test.v diff --git a/vlib/v/parser/parser.v b/vlib/v/parser/parser.v index 6313dd318e..bbea0b4707 100644 --- a/vlib/v/parser/parser.v +++ b/vlib/v/parser/parser.v @@ -2762,7 +2762,8 @@ fn (mut p Parser) name_expr() ast.Expr { } } // Raw string (`s := r'hello \n ') - if p.peek_tok.kind == .string && !p.inside_str_interp && p.peek_token(2).kind != .colon { + if p.peek_tok.kind == .string && p.tok.line_nr == p.peek_tok.line_nr && !p.inside_str_interp + && p.peek_token(2).kind != .colon { if p.tok.kind == .name && p.tok.lit in ['r', 'c', 'js'] { return p.string_expr() } else { diff --git a/vlib/v/tests/if_elseif_else_test.v b/vlib/v/tests/if_elseif_else_test.v new file mode 100644 index 0000000000..b1a7c3ef42 --- /dev/null +++ b/vlib/v/tests/if_elseif_else_test.v @@ -0,0 +1,28 @@ +module main + +fn if_expt(this int) (string, int) { + inc := 1 + mut count := 0 + thing := if this in [0, 1, 2] { + count += 1 + '0..2' + } else if this in [3, 4, 5] { + count += inc + '3..5' + } else { + 'not 0..5' + } + return thing, count +} + +fn test_main() { + a, b := if_expt(1) + assert a == '0..2' + assert b == 1 + c, d := if_expt(4) + assert c == '3..5' + assert d == 1 + e, f := if_expt(7) + assert e == 'not 0..5' + assert f == 0 +}