From 905f844b167239c423b2eaf0bc5340de908b0e67 Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Sat, 30 May 2020 20:18:03 +0200 Subject: [PATCH] cgen: return interface fix --- vlib/v/gen/cgen.v | 5 +++-- vlib/v/tests/interface_test.v | 4 ++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/vlib/v/gen/cgen.v b/vlib/v/gen/cgen.v index 0359046699..f3435a9825 100644 --- a/vlib/v/gen/cgen.v +++ b/vlib/v/gen/cgen.v @@ -2314,11 +2314,12 @@ fn (mut g Gen) return_statement(node ast.Return) { g.writeln(' }, sizeof($styp));') return } - if sym.kind == .interface_ { + cast_interface := sym.kind == .interface_ && node.types[0] != g.fn_decl.return_type + if cast_interface { g.interface_call(node.types[0], g.fn_decl.return_type) } g.expr_with_cast(node.exprs[0], node.types[0], g.fn_decl.return_type) - if sym.kind == .interface_ { + if cast_interface { g.write(')') } } diff --git a/vlib/v/tests/interface_test.v b/vlib/v/tests/interface_test.v index f6da952007..0d6a1915d2 100644 --- a/vlib/v/tests/interface_test.v +++ b/vlib/v/tests/interface_test.v @@ -243,3 +243,7 @@ fn new_animal() Animal { dog := Dog{} return dog } + +fn new_animal2() Animal { + return new_animal() +}