mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
cgen: minor optionals fix (#5714)
This commit is contained in:
parent
68e01d87be
commit
dc24327b1e
@ -2494,8 +2494,7 @@ fn (mut g Gen) return_statement(node ast.Return) {
|
|||||||
if fn_return_is_optional {
|
if fn_return_is_optional {
|
||||||
tmp := g.new_tmp_var()
|
tmp := g.new_tmp_var()
|
||||||
styp := g.typ(g.fn_decl.return_type)
|
styp := g.typ(g.fn_decl.return_type)
|
||||||
g.writeln('$styp $tmp;')
|
g.writeln('$styp $tmp = {.ok = true};')
|
||||||
g.writeln('${tmp}.ok = true;')
|
|
||||||
g.writeln('return $tmp;')
|
g.writeln('return $tmp;')
|
||||||
} else {
|
} else {
|
||||||
g.writeln('return;')
|
g.writeln('return;')
|
||||||
@ -2508,7 +2507,7 @@ fn (mut g Gen) return_statement(node ast.Return) {
|
|||||||
mut is_regular_option := g.typ(node.types[0]) == 'Option'
|
mut is_regular_option := g.typ(node.types[0]) == 'Option'
|
||||||
if optional_none || is_regular_option {
|
if optional_none || is_regular_option {
|
||||||
tmp := g.new_tmp_var()
|
tmp := g.new_tmp_var()
|
||||||
g.write('/*opt promotion*/ Option $tmp = ')
|
g.write('Option $tmp = ')
|
||||||
g.expr_with_cast(node.exprs[0], node.types[0], g.fn_decl.return_type)
|
g.expr_with_cast(node.exprs[0], node.types[0], g.fn_decl.return_type)
|
||||||
g.writeln(';')
|
g.writeln(';')
|
||||||
styp := g.typ(g.fn_decl.return_type)
|
styp := g.typ(g.fn_decl.return_type)
|
||||||
@ -2527,7 +2526,7 @@ fn (mut g Gen) return_statement(node ast.Return) {
|
|||||||
opt_type = g.typ(g.fn_decl.return_type)
|
opt_type = g.typ(g.fn_decl.return_type)
|
||||||
// Create a tmp for this option
|
// Create a tmp for this option
|
||||||
opt_tmp = g.new_tmp_var()
|
opt_tmp = g.new_tmp_var()
|
||||||
g.write('$opt_type $opt_tmp;')
|
g.writeln('$opt_type $opt_tmp;')
|
||||||
styp = g.base_type(g.fn_decl.return_type)
|
styp = g.base_type(g.fn_decl.return_type)
|
||||||
g.write('opt_ok2(&($styp/*X*/[]) { ')
|
g.write('opt_ok2(&($styp/*X*/[]) { ')
|
||||||
} else {
|
} else {
|
||||||
@ -2596,8 +2595,8 @@ fn (mut g Gen) return_statement(node ast.Return) {
|
|||||||
opt_type := g.typ(g.fn_decl.return_type)
|
opt_type := g.typ(g.fn_decl.return_type)
|
||||||
// Create a tmp for this option
|
// Create a tmp for this option
|
||||||
opt_tmp := g.new_tmp_var()
|
opt_tmp := g.new_tmp_var()
|
||||||
g.write('$opt_type $opt_tmp;')
|
g.writeln('$opt_type $opt_tmp;')
|
||||||
g.write('/*:)$return_sym.name*/opt_ok2(&($styp[]) { ')
|
g.write('opt_ok2(&($styp[]) { ')
|
||||||
if !g.fn_decl.return_type.is_ptr() && node.types[0].is_ptr() {
|
if !g.fn_decl.return_type.is_ptr() && node.types[0].is_ptr() {
|
||||||
// Automatic Dereference for optional
|
// Automatic Dereference for optional
|
||||||
g.write('*')
|
g.write('*')
|
||||||
|
@ -249,7 +249,8 @@ fn (mut g Gen) call_expr(node ast.CallExpr) {
|
|||||||
g.inside_call = false
|
g.inside_call = false
|
||||||
}
|
}
|
||||||
gen_or := node.or_block.kind != .absent
|
gen_or := node.or_block.kind != .absent
|
||||||
cur_line := if gen_or && g.is_assign_rhs {
|
is_gen_or_and_assign_rhs := gen_or && g.is_assign_rhs
|
||||||
|
cur_line := if is_gen_or_and_assign_rhs {
|
||||||
line := g.go_before_stmt(0)
|
line := g.go_before_stmt(0)
|
||||||
g.out.write(tabs[g.indent])
|
g.out.write(tabs[g.indent])
|
||||||
line
|
line
|
||||||
@ -268,7 +269,9 @@ fn (mut g Gen) call_expr(node ast.CallExpr) {
|
|||||||
}
|
}
|
||||||
if gen_or {
|
if gen_or {
|
||||||
g.or_block(tmp_opt, node.or_block, node.return_type)
|
g.or_block(tmp_opt, node.or_block, node.return_type)
|
||||||
g.write('\n\t$cur_line$tmp_opt')
|
if is_gen_or_and_assign_rhs {
|
||||||
|
g.write('\n$cur_line$tmp_opt')
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user