summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp
diff options
context:
space:
mode:
authorJordan Woyak <jordan.woyak@gmail.com>2019-10-11 19:38:18 -0500
committerJordan Woyak <jordan.woyak@gmail.com>2019-10-11 19:38:18 -0500
commit4d41bd64c8c01884fa0c2a663cc76a696c30adbb (patch)
tree27fdc23a047d67ee0b5fa7fd70699f92b83884b5 /Source/Core/InputCommon/ControlReference/ExpressionParser.cpp
parentb57178d246640270779d791b00d3a5b8fd7c13f2 (diff)
ExpressionParser: Show error message with expected arguments.
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:
{