From 97a726b18800f2e2766e87966f78d0ef56a013a6 Mon Sep 17 00:00:00 2001 From: yuyi Date: Sat, 8 Jul 2023 03:06:10 +0800 Subject: [PATCH] cgen: fix nested or expr call (fix #18803) (#18807) --- vlib/v/gen/c/cgen.v | 7 ++----- vlib/v/tests/nested_or_expr_call_test.v | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 5 deletions(-) create mode 100644 vlib/v/tests/nested_or_expr_call_test.v diff --git a/vlib/v/gen/c/cgen.v b/vlib/v/gen/c/cgen.v index e6e89771b2..bca703a253 100644 --- a/vlib/v/gen/c/cgen.v +++ b/vlib/v/gen/c/cgen.v @@ -6115,11 +6115,8 @@ fn (mut g Gen) or_block(var_name string, or_block ast.OrExpr, return_type ast.Ty } if or_block.kind == .block { g.or_expr_return_type = return_type.clear_flags(.option, .result) - if g.inside_or_block { - g.writeln('\terr = ${cvar_name}.err;') - } else { - g.writeln('\tIError err = ${cvar_name}.err;') - } + g.writeln('\tIError err = ${cvar_name}.err;') + g.inside_or_block = true defer { g.inside_or_block = false diff --git a/vlib/v/tests/nested_or_expr_call_test.v b/vlib/v/tests/nested_or_expr_call_test.v new file mode 100644 index 0000000000..46d48185f8 --- /dev/null +++ b/vlib/v/tests/nested_or_expr_call_test.v @@ -0,0 +1,18 @@ +fn get_name() !string { + return error('failed') +} + +fn test_nested_or_expr_call() { + uid_map := map[int]string{} + uid := 2 + username := if uid <= 0 { + 'unknown' + } else { + uid_map[uid] or { + name := get_name() or { 'unknown' } + name + } + } + assert username == 'unknown' + println('${uid} is ${username}') +}