Skip to content

Commit f1d7bbb

Browse files
committed
Make bindKeywordArguments errors more explicit
NP-1167
1 parent 3026268 commit f1d7bbb

1 file changed

Lines changed: 7 additions & 7 deletions

File tree

src/ast/fn_application_expr.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,15 @@ namespace CuraFormulaeEngine::ast
2121
{
2222
namespace
2323
{
24-
std::optional<std::vector<eval::Value>> bindKeywordArguments(
24+
zeus::expected<std::vector<eval::Value>, eval::Error> bindKeywordArguments(
2525
const std::vector<std::string>& parameter_names,
2626
const std::vector<eval::Value>& positional_args,
2727
const std::vector<std::pair<std::string, eval::Value>>& keyword_args
2828
) noexcept
2929
{
3030
if (positional_args.size() > parameter_names.size())
3131
{
32-
return std::nullopt;
32+
return eval::Error::InvalidNumberOfArgument;
3333
}
3434

3535
std::vector<std::optional<eval::Value>> slots(parameter_names.size());
@@ -43,13 +43,13 @@ std::optional<std::vector<eval::Value>> bindKeywordArguments(
4343
auto it = std::find(parameter_names.begin(), parameter_names.end(), name);
4444
if (it == parameter_names.end())
4545
{
46-
return std::nullopt;
46+
return eval::Error::InvalidNumberOfArgument;
4747
}
4848

4949
const auto idx = static_cast<size_t>(std::distance(parameter_names.begin(), it));
5050
if (slots[idx].has_value())
5151
{
52-
return std::nullopt;
52+
return eval::Error::InvalidNumberOfArgument;
5353
}
5454
slots[idx] = value;
5555
}
@@ -72,7 +72,7 @@ std::optional<std::vector<eval::Value>> bindKeywordArguments(
7272
{
7373
if (slots[i].has_value())
7474
{
75-
return std::nullopt;
75+
return eval::Error::InvalidNumberOfArgument;
7676
}
7777
}
7878

@@ -161,13 +161,13 @@ std::optional<std::vector<eval::Value>> bindKeywordArguments(
161161

162162
if (! parameter_names.has_value())
163163
{
164-
return zeus::unexpected(eval::Error::InvalidNumberOfArguments);
164+
return eval::Error::InvalidNumberOfArgument;
165165
}
166166

167167
const auto bound_args = bindKeywordArguments(parameter_names.value(), positional_arg_results, keyword_arg_results);
168168
if (! bound_args.has_value())
169169
{
170-
return zeus::unexpected(eval::Error::InvalidNumberOfArguments);
170+
return zeus::unexpected(bound_args.error());
171171
}
172172

173173
return fn_value(bound_args.value());

0 commit comments

Comments
 (0)