mirror of
https://github.com/vlang/v.git
synced 2025-09-16 10:57:25 -04:00
cgen: add missing sync auto import, when using SelectExpr (#19998)
This commit is contained in:
parent
2964855d15
commit
b5ba12256d
@ -4245,44 +4245,56 @@ fn (mut g Gen) select_expr(node ast.SelectExpr) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
chan_array := g.new_tmp_var()
|
chan_array := g.new_tmp_var()
|
||||||
g.write('Array_sync__Channel_ptr ${chan_array} = new_array_from_c_array(${n_channels}, ${n_channels}, sizeof(sync__Channel*), _MOV((sync__Channel*[${n_channels}]){')
|
if n_channels == 0 {
|
||||||
for i in 0 .. n_channels {
|
g.writeln('Array_sync__Channel_ptr ${chan_array} = __new_array_with_default(0, 0, sizeof(sync__Channel*), 0);')
|
||||||
if i > 0 {
|
} else {
|
||||||
g.write(', ')
|
g.write('Array_sync__Channel_ptr ${chan_array} = new_array_from_c_array(${n_channels}, ${n_channels}, sizeof(sync__Channel*), _MOV((sync__Channel*[${n_channels}]){')
|
||||||
|
for i in 0 .. n_channels {
|
||||||
|
if i > 0 {
|
||||||
|
g.write(', ')
|
||||||
|
}
|
||||||
|
g.write('(sync__Channel*)(')
|
||||||
|
g.expr(channels[i])
|
||||||
|
g.write(')')
|
||||||
}
|
}
|
||||||
g.write('(sync__Channel*)(')
|
g.writeln('}));\n')
|
||||||
g.expr(channels[i])
|
|
||||||
g.write(')')
|
|
||||||
}
|
}
|
||||||
g.writeln('}));\n')
|
|
||||||
directions_array := g.new_tmp_var()
|
directions_array := g.new_tmp_var()
|
||||||
g.write('Array_sync__Direction ${directions_array} = new_array_from_c_array(${n_channels}, ${n_channels}, sizeof(sync__Direction), _MOV((sync__Direction[${n_channels}]){')
|
if n_channels == 0 {
|
||||||
for i in 0 .. n_channels {
|
g.writeln('Array_sync__Direction ${directions_array} = __new_array_with_default(0, 0, sizeof(sync__Direction), 0);')
|
||||||
if i > 0 {
|
} else {
|
||||||
g.write(', ')
|
g.write('Array_sync__Direction ${directions_array} = new_array_from_c_array(${n_channels}, ${n_channels}, sizeof(sync__Direction), _MOV((sync__Direction[${n_channels}]){')
|
||||||
}
|
for i in 0 .. n_channels {
|
||||||
if is_push[i] {
|
if i > 0 {
|
||||||
g.write('sync__Direction__push')
|
g.write(', ')
|
||||||
} else {
|
}
|
||||||
g.write('sync__Direction__pop')
|
if is_push[i] {
|
||||||
|
g.write('sync__Direction__push')
|
||||||
|
} else {
|
||||||
|
g.write('sync__Direction__pop')
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
g.writeln('}));\n')
|
||||||
}
|
}
|
||||||
g.writeln('}));\n')
|
|
||||||
objs_array := g.new_tmp_var()
|
objs_array := g.new_tmp_var()
|
||||||
g.write('Array_voidptr ${objs_array} = new_array_from_c_array(${n_channels}, ${n_channels}, sizeof(voidptr), _MOV((voidptr[${n_channels}]){')
|
if n_channels == 0 {
|
||||||
for i in 0 .. n_channels {
|
g.writeln('Array_voidptr ${objs_array} = __new_array_with_default(0, 0, sizeof(voidptr), 0);')
|
||||||
if i > 0 {
|
} else {
|
||||||
g.write(', &')
|
g.write('Array_voidptr ${objs_array} = new_array_from_c_array(${n_channels}, ${n_channels}, sizeof(voidptr), _MOV((voidptr[${n_channels}]){')
|
||||||
} else {
|
for i in 0 .. n_channels {
|
||||||
g.write('&')
|
if i > 0 {
|
||||||
}
|
g.write(', &')
|
||||||
if tmp_objs[i] == '' {
|
} else {
|
||||||
g.expr(objs[i])
|
g.write('&')
|
||||||
} else {
|
}
|
||||||
g.write(tmp_objs[i])
|
if tmp_objs[i] == '' {
|
||||||
|
g.expr(objs[i])
|
||||||
|
} else {
|
||||||
|
g.write(tmp_objs[i])
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
g.writeln('}));\n')
|
||||||
}
|
}
|
||||||
g.writeln('}));\n')
|
|
||||||
select_result := g.new_tmp_var()
|
select_result := g.new_tmp_var()
|
||||||
g.write('int ${select_result} = sync__channel_select(&/*arr*/${chan_array}, ${directions_array}, &/*arr*/${objs_array}, ')
|
g.write('int ${select_result} = sync__channel_select(&/*arr*/${chan_array}, ${directions_array}, &/*arr*/${objs_array}, ')
|
||||||
if has_timeout {
|
if has_timeout {
|
||||||
|
@ -532,6 +532,7 @@ fn (mut p Parser) select_expr() ast.SelectExpr {
|
|||||||
if p.tok.kind == .rcbr {
|
if p.tok.kind == .rcbr {
|
||||||
p.check(.rcbr)
|
p.check(.rcbr)
|
||||||
}
|
}
|
||||||
|
p.register_auto_import('sync')
|
||||||
return ast.SelectExpr{
|
return ast.SelectExpr{
|
||||||
branches: branches
|
branches: branches
|
||||||
pos: pos.extend_with_last_line(p.prev_tok.pos(), p.prev_tok.line_nr)
|
pos: pos.extend_with_last_line(p.prev_tok.pos(), p.prev_tok.line_nr)
|
||||||
|
8
vlib/v/tests/select_auto_sync_test.v
Normal file
8
vlib/v/tests/select_auto_sync_test.v
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
import time
|
||||||
|
|
||||||
|
fn test_main() {
|
||||||
|
select {
|
||||||
|
1 * time.second {}
|
||||||
|
}
|
||||||
|
assert true
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user