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}') +}