parent
75ebac006d
commit
04654ed518
|
@ -11,12 +11,12 @@ fn test_that_net_and_net_unix_can_be_imported_together_without_conflicts() ? {
|
||||||
mut l := unix.listen_stream(test_port) or { panic(err) }
|
mut l := unix.listen_stream(test_port) or { panic(err) }
|
||||||
go echo_server(mut l)
|
go echo_server(mut l)
|
||||||
defer {
|
defer {
|
||||||
l.close() ?
|
l.close() or {}
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
mut c := unix.connect_stream(test_port) ?
|
mut c := unix.connect_stream(test_port) ?
|
||||||
defer {
|
defer {
|
||||||
c.close() ?
|
c.close() or {}
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
data := 'Hello from vlib/net!'
|
data := 'Hello from vlib/net!'
|
||||||
|
|
|
@ -2694,6 +2694,10 @@ fn (mut p Parser) dot_expr(left ast.Expr) ast.Expr {
|
||||||
// `foo()?`
|
// `foo()?`
|
||||||
if p.tok.kind == .question {
|
if p.tok.kind == .question {
|
||||||
p.next()
|
p.next()
|
||||||
|
if p.inside_defer {
|
||||||
|
p.error_with_pos('error propagation not allowed inside `defer` blocks',
|
||||||
|
p.prev_tok.pos())
|
||||||
|
}
|
||||||
or_kind = .propagate
|
or_kind = .propagate
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
vlib/v/parser/tests/defer_propagate2.vv:16:13: error: error propagation not allowed inside `defer` blocks
|
||||||
|
14 | dump(s.x)
|
||||||
|
15 | defer {
|
||||||
|
16 | s.close() ?
|
||||||
|
| ^
|
||||||
|
17 | }
|
||||||
|
18 | return s.x
|
|
@ -0,0 +1,23 @@
|
||||||
|
struct Abc {
|
||||||
|
mut:
|
||||||
|
x int = 123
|
||||||
|
}
|
||||||
|
|
||||||
|
fn (mut s Abc) close() ? {
|
||||||
|
println('> CLOSE 1 s.x: $s.x')
|
||||||
|
s.x = -1
|
||||||
|
println('> CLOSE 2 s.x: $s.x')
|
||||||
|
}
|
||||||
|
|
||||||
|
fn opt2() ?int {
|
||||||
|
mut s := Abc{}
|
||||||
|
dump(s.x)
|
||||||
|
defer {
|
||||||
|
s.close() ?
|
||||||
|
}
|
||||||
|
return s.x
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
println(opt2() ?)
|
||||||
|
}
|
Loading…
Reference in New Issue