mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
compiler: fix expression in multiple return
This commit is contained in:
parent
8fe0e88c05
commit
9e7ee40477
@ -3694,26 +3694,27 @@ fn (p mut Parser) return_st() {
|
|||||||
p.inside_return_expr = true
|
p.inside_return_expr = true
|
||||||
is_none := p.tok == .key_none
|
is_none := p.tok == .key_none
|
||||||
p.expected_type = p.cur_fn.typ
|
p.expected_type = p.cur_fn.typ
|
||||||
// expr_type := p.bool_expression()
|
|
||||||
mut expr_type := p.bool_expression()
|
mut expr_type := p.bool_expression()
|
||||||
mut types := []string
|
mut types := []string
|
||||||
|
mut mr_values := [p.cgen.cur_line.right(ph).trim_space()]
|
||||||
types << expr_type
|
types << expr_type
|
||||||
for p.tok == .comma {
|
for p.tok == .comma {
|
||||||
p.check(.comma)
|
p.check(.comma)
|
||||||
|
p.cgen.start_tmp()
|
||||||
types << p.bool_expression()
|
types << p.bool_expression()
|
||||||
|
mr_values << p.cgen.end_tmp().trim_space()
|
||||||
}
|
}
|
||||||
mut cur_fn_typ_chk := p.cur_fn.typ
|
mut cur_fn_typ_chk := p.cur_fn.typ
|
||||||
// multiple returns
|
// multiple returns
|
||||||
if types.len > 1 {
|
if types.len > 1 {
|
||||||
expr_type = types.join(',')
|
expr_type = types.join(',')
|
||||||
cur_fn_typ_chk = cur_fn_typ_chk.replace('_V_MulRet_', '').replace('_PTR_', '*').replace('_V_', ',')
|
cur_fn_typ_chk = cur_fn_typ_chk.replace('_V_MulRet_', '').replace('_PTR_', '*').replace('_V_', ',')
|
||||||
ret_vals := p.cgen.cur_line.right(ph)
|
|
||||||
mut ret_fields := ''
|
mut ret_fields := ''
|
||||||
for ret_val_idx, ret_val in ret_vals.split(' ') {
|
for ret_val_idx, ret_val in mr_values {
|
||||||
if ret_val_idx > 0 {
|
if ret_val_idx > 0 {
|
||||||
ret_fields += ','
|
ret_fields += ','
|
||||||
}
|
}
|
||||||
ret_fields += '.var_$ret_val_idx=$ret_val'
|
ret_fields += '.var_$ret_val_idx=${ret_val}'
|
||||||
}
|
}
|
||||||
p.cgen.resetln('($p.cur_fn.typ){$ret_fields}')
|
p.cgen.resetln('($p.cur_fn.typ){$ret_fields}')
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user