diff --git a/vlib/v/checker/fn.v b/vlib/v/checker/fn.v index b1338fc25fb294..5dde76d4b91e45 100644 --- a/vlib/v/checker/fn.v +++ b/vlib/v/checker/fn.v @@ -1517,7 +1517,10 @@ fn (mut c Checker) fn_call(mut node ast.CallExpr, mut continue_check &bool) ast. } } } - c.check_expected_arg_count(mut node, func) or { return func.return_type } + c.check_expected_arg_count(mut node, func) or { + node.return_type = func.return_type + return func.return_type + } } // println / eprintln / panic can print anything if args_len > 0 && fn_name in print_everything_fns { diff --git a/vlib/v/checker/tests/surplus_args_with_or_block_err.out b/vlib/v/checker/tests/surplus_args_with_or_block_err.out new file mode 100644 index 00000000000000..f0a7ccfd73acf9 --- /dev/null +++ b/vlib/v/checker/tests/surplus_args_with_or_block_err.out @@ -0,0 +1,9 @@ +vlib/v/checker/tests/surplus_args_with_or_block_err.vv:34:47: error: expected 2 arguments, but got 3 + 32 | + 33 | if config.output_file != '' { + 34 | export_results(results, config.output_file, config) or { + | ~~~~~~ + 35 | if config.use_color { + 36 | eprintln('Error: export failed') +Details: have ([]main.SimResult, string, main.Config) + want ([]main.SimResult, main.Config) diff --git a/vlib/v/checker/tests/surplus_args_with_or_block_err.vv b/vlib/v/checker/tests/surplus_args_with_or_block_err.vv new file mode 100644 index 00000000000000..e1c05d04b26b8c --- /dev/null +++ b/vlib/v/checker/tests/surplus_args_with_or_block_err.vv @@ -0,0 +1,42 @@ +struct Config { + use_color bool + output_file string +} + +struct SimResult { + filename string + accuracy f64 +} + +fn export_results(results []SimResult, config Config) ! { + if config.output_file == '' { + return + } + println('Exporting to ${config.output_file}') +} + +fn run_simulation(config Config) []SimResult { + return [SimResult{ + filename: 'test' + accuracy: 0.9 + }] +} + +fn main() { + mut config := Config{ + use_color: true + output_file: 'results.json' + } + + results := run_simulation(config) + + if config.output_file != '' { + export_results(results, config.output_file, config) or { + if config.use_color { + eprintln('Error: export failed') + } else { + eprintln('Error') + } + } + } +}