summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/InputCommon/ControlReference/ExpressionParser.cpp')
-rw-r--r--Source/Core/InputCommon/ControlReference/ExpressionParser.cpp20
1 files changed, 13 insertions, 7 deletions
diff --git a/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp b/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp
index f7937a19bd..0d1d0fdbea 100644
--- a/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp
+++ b/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp
@@ -469,7 +469,8 @@ private:
return tok.type == type;
}
- ParseResult ParseFunctionArguments(std::unique_ptr<FunctionExpression>&& func,
+ ParseResult ParseFunctionArguments(const std::string_view& func_name,
+ std::unique_ptr<FunctionExpression>&& func,
const Token& func_tok)
{
std::vector<std::unique_ptr<Expression>> args;
@@ -518,10 +519,15 @@ private:
}
}
- if (!func->SetArguments(std::move(args)))
+ const auto argument_validation = func->SetArguments(std::move(args));
+
+ if (std::holds_alternative<FunctionExpression::ExpectedArguments>(argument_validation))
{
- // TODO: It would be nice to output how many arguments are expected.
- return ParseResult::MakeErrorResult(func_tok, _trans("Wrong number of arguments."));
+ const auto text = std::string(func_name) + '(' +
+ std::get<FunctionExpression::ExpectedArguments>(argument_validation).text +
+ ')';
+
+ return ParseResult::MakeErrorResult(func_tok, _trans("Expected arguments: " + text));
}
return ParseResult::MakeSuccessfulResult(std::move(func));
@@ -543,7 +549,7 @@ private:
return ParseAtom(control_tok);
}
- return ParseFunctionArguments(std::move(func), tok);
+ return ParseFunctionArguments(tok.data, std::move(func), tok);
}
case TOK_CONTROL:
{
@@ -553,7 +559,7 @@ private:
}
case TOK_NOT:
{
- return ParseFunctionArguments(MakeFunctionExpression("not"), tok);
+ return ParseFunctionArguments("not", MakeFunctionExpression("not"), tok);
}
case TOK_LITERAL:
{
@@ -571,7 +577,7 @@ private:
{
// An atom was expected but we got a subtraction symbol.
// Interpret it as a unary minus function.
- return ParseFunctionArguments(MakeFunctionExpression("minus"), tok);
+ return ParseFunctionArguments("minus", MakeFunctionExpression("minus"), tok);
}
default:
{