Skip to content

Commit 72f45e4

Browse files
authored
parser: fix wrong string parsing (fix #24297) (#24298)
1 parent 59909cd commit 72f45e4

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

vlib/v/parser/parser.v

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2762,7 +2762,8 @@ fn (mut p Parser) name_expr() ast.Expr {
27622762
}
27632763
}
27642764
// Raw string (`s := r'hello \n ')
2765-
if p.peek_tok.kind == .string && !p.inside_str_interp && p.peek_token(2).kind != .colon {
2765+
if p.peek_tok.kind == .string && p.tok.line_nr == p.peek_tok.line_nr && !p.inside_str_interp
2766+
&& p.peek_token(2).kind != .colon {
27662767
if p.tok.kind == .name && p.tok.lit in ['r', 'c', 'js'] {
27672768
return p.string_expr()
27682769
} else {

vlib/v/tests/if_elseif_else_test.v

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
module main
2+
3+
fn if_expt(this int) (string, int) {
4+
inc := 1
5+
mut count := 0
6+
thing := if this in [0, 1, 2] {
7+
count += 1
8+
'0..2'
9+
} else if this in [3, 4, 5] {
10+
count += inc
11+
'3..5'
12+
} else {
13+
'not 0..5'
14+
}
15+
return thing, count
16+
}
17+
18+
fn test_main() {
19+
a, b := if_expt(1)
20+
assert a == '0..2'
21+
assert b == 1
22+
c, d := if_expt(4)
23+
assert c == '3..5'
24+
assert d == 1
25+
e, f := if_expt(7)
26+
assert e == 'not 0..5'
27+
assert f == 0
28+
}

0 commit comments

Comments
 (0)