parser: fix optional expr with array value (#13599)
parent
73f931b52e
commit
83ea97b1a3
|
@ -376,9 +376,7 @@ pub fn (mut p Parser) expr_with_left(left ast.Expr, precedence int, is_stmt_iden
|
||||||
return node
|
return node
|
||||||
}
|
}
|
||||||
p.is_stmt_ident = is_stmt_ident
|
p.is_stmt_ident = is_stmt_ident
|
||||||
} else if p.tok.kind in [.lsbr, .nilsbr]
|
} else if p.tok.kind in [.lsbr, .nilsbr] && p.tok.line_nr == p.prev_tok.line_nr {
|
||||||
&& (p.inside_fn || p.tok.line_nr == p.prev_tok.line_nr) {
|
|
||||||
// node = p.index_expr(node)
|
|
||||||
if p.tok.kind == .nilsbr {
|
if p.tok.kind == .nilsbr {
|
||||||
node = p.index_expr(node, true)
|
node = p.index_expr(node, true)
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -3,9 +3,7 @@ const x = 4
|
||||||
[deprecated]
|
[deprecated]
|
||||||
fn g() {
|
fn g() {
|
||||||
a := [3]
|
a := [3]
|
||||||
// indexing is currently allowed on next line
|
_ = a[0]
|
||||||
_ = a
|
|
||||||
[0]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const y = 5
|
const y = 5
|
||||||
|
@ -16,7 +14,5 @@ const z = 6
|
||||||
[typedef]
|
[typedef]
|
||||||
struct C.Foo{}
|
struct C.Foo{}
|
||||||
|
|
||||||
// test implicit main allows indexing on next line
|
|
||||||
a := [3]
|
a := [3]
|
||||||
_ := a
|
_ := a[0]
|
||||||
[0]
|
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
struct Empty {
|
||||||
|
empty string
|
||||||
|
}
|
||||||
|
|
||||||
|
fn print_error() ?[]Empty {
|
||||||
|
mut test := []Empty{}
|
||||||
|
test << Empty{
|
||||||
|
empty: 'Test'
|
||||||
|
}
|
||||||
|
if test[0].empty != '' {
|
||||||
|
return error('Not empty')
|
||||||
|
}
|
||||||
|
return test
|
||||||
|
}
|
||||||
|
|
||||||
|
fn test_option_expr_with_array_value() {
|
||||||
|
test_error := print_error() or {
|
||||||
|
eprintln(err)
|
||||||
|
[]Empty{}
|
||||||
|
}
|
||||||
|
println(test_error)
|
||||||
|
assert '$test_error' == '[]'
|
||||||
|
}
|
Loading…
Reference in New Issue