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/FunctionExpression.cpp | |
| parent | b57178d246640270779d791b00d3a5b8fd7c13f2 (diff) | |
ExpressionParser: Show error message with expected arguments.
Diffstat (limited to 'Source/Core/InputCommon/ControlReference/FunctionExpression.cpp')
| -rw-r--r-- | Source/Core/InputCommon/ControlReference/FunctionExpression.cpp | 99 |
1 files changed, 74 insertions, 25 deletions
diff --git a/Source/Core/InputCommon/ControlReference/FunctionExpression.cpp b/Source/Core/InputCommon/ControlReference/FunctionExpression.cpp index daf36c0fa1..18b98c5e19 100644 --- a/Source/Core/InputCommon/ControlReference/FunctionExpression.cpp +++ b/Source/Core/InputCommon/ControlReference/FunctionExpression.cpp @@ -21,10 +21,14 @@ using FSec = std::chrono::duration<ControlState>; class ToggleExpression : public FunctionExpression { private: - virtual bool ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override + ArgumentValidation + ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override { // Optional 2nd argument for clearing state: - return 1 == args.size() || 2 == args.size(); + if (1 == args.size() || 2 == args.size()) + return ArgumentsAreValid{}; + else + return ExpectedArguments{"toggle_state_input, [clear_state_input]"}; } ControlState GetValue() const override @@ -57,9 +61,13 @@ private: class NotExpression : public FunctionExpression { private: - virtual bool ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override + ArgumentValidation + ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override { - return 1 == args.size(); + if (1 == args.size()) + return ArgumentsAreValid{}; + else + return ExpectedArguments{"expression"}; } ControlState GetValue() const override { return 1.0 - GetArg(0).GetValue(); } @@ -70,9 +78,13 @@ private: class SinExpression : public FunctionExpression { private: - virtual bool ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override + ArgumentValidation + ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override { - return 1 == args.size(); + if (1 == args.size()) + return ArgumentsAreValid{}; + else + return ExpectedArguments{"expression"}; } ControlState GetValue() const override { return std::sin(GetArg(0).GetValue()); } @@ -82,9 +94,13 @@ private: class TimerExpression : public FunctionExpression { private: - virtual bool ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override + ArgumentValidation + ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override { - return 1 == args.size(); + if (1 == args.size()) + return ArgumentsAreValid{}; + else + return ExpectedArguments{"seconds"}; } ControlState GetValue() const override @@ -121,9 +137,13 @@ private: class IfExpression : public FunctionExpression { private: - virtual bool ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override + ArgumentValidation + ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override { - return 3 == args.size(); + if (3 == args.size()) + return ArgumentsAreValid{}; + else + return ExpectedArguments{"condition, true_expression, false_expression"}; } ControlState GetValue() const override @@ -137,9 +157,13 @@ private: class UnaryMinusExpression : public FunctionExpression { private: - virtual bool ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override + ArgumentValidation + ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override { - return 1 == args.size(); + if (1 == args.size()) + return ArgumentsAreValid{}; + else + return ExpectedArguments{"expression"}; } ControlState GetValue() const override @@ -152,9 +176,13 @@ private: // usage: deadzone(input, amount) class DeadzoneExpression : public FunctionExpression { - virtual bool ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override + ArgumentValidation + ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override { - return 2 == args.size(); + if (2 == args.size()) + return ArgumentsAreValid{}; + else + return ExpectedArguments{"input, amount"}; } ControlState GetValue() const override @@ -169,9 +197,13 @@ class DeadzoneExpression : public FunctionExpression // seconds is seconds to change from 0.0 to 1.0 class SmoothExpression : public FunctionExpression { - virtual bool ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override + ArgumentValidation + ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override { - return 2 == args.size() || 3 == args.size(); + if (2 == args.size() || 3 == args.size()) + return ArgumentsAreValid{}; + else + return ExpectedArguments{"input, seconds_up, seconds_down = seconds_up"}; } ControlState GetValue() const override @@ -209,9 +241,13 @@ private: // usage: hold(input, seconds) class HoldExpression : public FunctionExpression { - virtual bool ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override + ArgumentValidation + ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override { - return 2 == args.size(); + if (2 == args.size()) + return ArgumentsAreValid{}; + else + return ExpectedArguments{"input, seconds"}; } ControlState GetValue() const override @@ -244,9 +280,13 @@ private: // usage: tap(input, seconds, taps=2) class TapExpression : public FunctionExpression { - virtual bool ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override + ArgumentValidation + ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override { - return 2 == args.size() || 3 == args.size(); + if (2 == args.size() || 3 == args.size()) + return ArgumentsAreValid{}; + else + return ExpectedArguments{"input, seconds, taps = 2"}; } ControlState GetValue() const override @@ -300,9 +340,13 @@ private: // speed is max movement per second class RelativeExpression : public FunctionExpression { - virtual bool ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override + ArgumentValidation + ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override { - return args.size() >= 2 && args.size() <= 4; + if (args.size() >= 2 && args.size() <= 4) + return ArgumentsAreValid{}; + else + return ExpectedArguments{"input, speed, [max_abs_value, [shared_state]]"}; } ControlState GetValue() const override @@ -355,9 +399,13 @@ private: // usage: pulse(input, seconds) class PulseExpression : public FunctionExpression { - virtual bool ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override + ArgumentValidation + ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override { - return 2 == args.size(); + if (2 == args.size()) + return ArgumentsAreValid{}; + else + return ExpectedArguments{"input, seconds"}; } ControlState GetValue() const override @@ -447,7 +495,8 @@ void FunctionExpression::UpdateReferences(ControlEnvironment& env) arg->UpdateReferences(env); } -bool FunctionExpression::SetArguments(std::vector<std::unique_ptr<Expression>>&& args) +FunctionExpression::ArgumentValidation +FunctionExpression::SetArguments(std::vector<std::unique_ptr<Expression>>&& args) { m_args = std::move(args); |
