Skip to content

Commit 227f31b

Browse files
authored
parser: fix for x in Iterator{} {, when there are no field initialisations (#21333)
1 parent 4f0a8b5 commit 227f31b

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

vlib/v/parser/expr.v

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ fn (mut p Parser) check_expr(precedence int) !ast.Expr {
5353
} else if p.tok.kind == .question && p.peek_tok.kind == .amp {
5454
node = p.prefix_expr()
5555
} else if p.inside_for_expr && p.tok.kind == .name && p.tok.lit[0].is_capital()
56-
&& p.peek_tok.kind == .lcbr && p.peek_token(2).kind == .name {
56+
&& p.peek_tok.kind == .lcbr && p.peek_token(2).kind in [.rcbr, .name] {
5757
node = p.struct_init(p.mod + '.' + p.tok.lit, .normal, false)
5858
} else {
5959
if p.inside_comptime_if && p.is_generic_name() && p.peek_tok.kind != .dot {

vlib/v/tests/struct_init_on_for_expr_test.v

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ fn (mut iter Iterator) next() ?int {
1111
return none
1212
}
1313

14-
fn test_main() {
14+
fn test_iterator_with_field_init() {
1515
for k, x in Iterator{
1616
counter: 10
1717
} {
@@ -24,3 +24,24 @@ fn test_main() {
2424
}
2525
}
2626
}
27+
28+
//
29+
30+
struct OddNumberIterator {
31+
mut:
32+
current i64
33+
}
34+
35+
fn (mut i OddNumberIterator) next() ?i64 {
36+
i.current += 2
37+
return i.current + 1
38+
}
39+
40+
fn test_iterator_without_field_init() {
41+
for x in OddNumberIterator{} {
42+
dump(x)
43+
if x > 10 {
44+
break
45+
}
46+
}
47+
}

0 commit comments

Comments
 (0)