From 1fb2c3f5b4e3c532a695191af13740d3cefaeb9a Mon Sep 17 00:00:00 2001 From: joe-conigliaro Date: Fri, 20 Mar 2020 14:59:06 +1100 Subject: [PATCH] cgen: multi return optional fix --- vlib/v/gen/cgen.v | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/vlib/v/gen/cgen.v b/vlib/v/gen/cgen.v index 214d3ab7ea..674f485a57 100644 --- a/vlib/v/gen/cgen.v +++ b/vlib/v/gen/cgen.v @@ -385,9 +385,18 @@ fn (g mut Gen) gen_assign_stmt(assign_stmt ast.AssignStmt) { } } mr_var_name := 'mr_$assign_stmt.pos.pos' - mr_typ_str := g.typ(return_type) - g.write('$mr_typ_str $mr_var_name = ') - g.expr(assign_stmt.right[0]) + if table.type_is_optional(return_type) { + return_type = table.type_clear_extra(return_type) + mr_styp := g.typ(return_type) + g.write('$mr_styp $mr_var_name = (*(${mr_styp}*)') + g.expr(assign_stmt.right[0]) + g.write('.data)') + } + else { + mr_styp := g.typ(return_type) + g.write('$mr_styp $mr_var_name = ') + g.expr(assign_stmt.right[0]) + } g.writeln(';') for i, ident in assign_stmt.left { if ident.kind == .blank_ident {