Skip to content

Commit 10fb16e

Browse files
authored
parser: fix optional with multiple statements (#14592)
1 parent 5bf246f commit 10fb16e

File tree

5 files changed

+26
-67
lines changed

5 files changed

+26
-67
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
fn main() {
2+
x := fmt_test() or {
3+
println(err.msg())
4+
-100
5+
}
6+
println(x)
7+
assert x == -100
8+
}
9+
10+
fn fmt_test() ?int {
11+
return error('foo')
12+
}

vlib/v/parser/expr.v

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -443,16 +443,8 @@ pub fn (mut p Parser) expr_with_left(left ast.Expr, precedence int, is_stmt_iden
443443
pos: pos
444444
is_stmt: true
445445
}
446-
} else if p.tok.kind.is_infix() {
447-
if p.tok.kind.is_prefix() && p.tok.line_nr != p.prev_tok.line_nr {
448-
// return early for deref assign `*x = 2` goes to prefix expr
449-
if p.tok.kind == .mul && p.peek_token(2).kind == .assign {
450-
return node
451-
}
452-
// added 10/2020: LATER this will be parsed as PrefixExpr instead
453-
p.warn_with_pos('move infix `$p.tok.kind` operator before new line (if infix intended) or use brackets for a prefix expression',
454-
p.tok.pos())
455-
}
446+
} else if p.tok.kind.is_infix() && !(p.tok.kind in [.minus, .amp, .mul]
447+
&& p.tok.line_nr != p.prev_tok.line_nr) {
456448
// continue on infix expr
457449
node = p.infix_expr(node)
458450
// return early `if bar is SumType as b {`

vlib/v/parser/tests/prefix_first.out

Lines changed: 0 additions & 28 deletions
This file was deleted.

vlib/v/parser/tests/prefix_first.vv

Lines changed: 0 additions & 29 deletions
This file was deleted.
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
fn test_or_expr_with_multi_stmts() {
2+
x := fmt_test() or {
3+
println(err.msg())
4+
-100
5+
}
6+
println(x)
7+
assert x == -100
8+
}
9+
10+
fn fmt_test() ?int {
11+
return error('foo')
12+
}

0 commit comments

Comments
 (0)