diff options
| author | Jordan Woyak <jordan.woyak@gmail.com> | 2019-10-11 19:38:18 -0500 |
|---|---|---|
| committer | Jordan Woyak <jordan.woyak@gmail.com> | 2019-10-11 19:38:18 -0500 |
| commit | 4d41bd64c8c01884fa0c2a663cc76a696c30adbb (patch) | |
| tree | 27fdc23a047d67ee0b5fa7fd70699f92b83884b5 /Source/Core/InputCommon/ControlReference/ExpressionParser.cpp | |
| parent | b57178d246640270779d791b00d3a5b8fd7c13f2 (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.cpp | 20 |
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: { |
