mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-03-10 11:37:43 +01:00
Merge pull request #13315 from jordan-woyak/func-exp-cleanup
InputCommon/ExpressionParser: Function argument parsing minor cleanup.
This commit is contained in:
commit
9ff833e2f4
@ -786,12 +786,13 @@ private:
|
|||||||
|
|
||||||
// Comma before the next argument.
|
// Comma before the next argument.
|
||||||
if (TOK_COMMA != tok.type)
|
if (TOK_COMMA != tok.type)
|
||||||
return ParseResult::MakeErrorResult(tok, Common::GetStringT("Expected comma."));
|
return ParseResult::MakeErrorResult(tok, Common::GetStringT("Expected closing paren."));
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto argument_validation = func->SetArguments(std::move(args));
|
func->SetArguments(std::move(args));
|
||||||
|
const auto argument_validation = func->ValidateArguments();
|
||||||
|
|
||||||
if (std::holds_alternative<FunctionExpression::ExpectedArguments>(argument_validation))
|
if (std::holds_alternative<FunctionExpression::ExpectedArguments>(argument_validation))
|
||||||
{
|
{
|
||||||
|
@ -16,11 +16,10 @@ using FSec = std::chrono::duration<ControlState>;
|
|||||||
class ToggleExpression : public FunctionExpression
|
class ToggleExpression : public FunctionExpression
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
ArgumentValidation
|
ArgumentValidation ValidateArguments() override
|
||||||
ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override
|
|
||||||
{
|
{
|
||||||
// Optional 2nd argument for clearing state:
|
// Optional 2nd argument for clearing state:
|
||||||
if (args.size() == 1 || args.size() == 2)
|
if (GetArgCount() == 1 || GetArgCount() == 2)
|
||||||
return ArgumentsAreValid{};
|
return ArgumentsAreValid{};
|
||||||
else
|
else
|
||||||
return ExpectedArguments{"toggle_state_input, [clear_state_input]"};
|
return ExpectedArguments{"toggle_state_input, [clear_state_input]"};
|
||||||
@ -56,10 +55,9 @@ private:
|
|||||||
class NotExpression : public FunctionExpression
|
class NotExpression : public FunctionExpression
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
ArgumentValidation
|
ArgumentValidation ValidateArguments() override
|
||||||
ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override
|
|
||||||
{
|
{
|
||||||
if (args.size() == 1)
|
if (GetArgCount() == 1)
|
||||||
return ArgumentsAreValid{};
|
return ArgumentsAreValid{};
|
||||||
else
|
else
|
||||||
return ExpectedArguments{"expression"};
|
return ExpectedArguments{"expression"};
|
||||||
@ -73,10 +71,9 @@ private:
|
|||||||
class AbsExpression final : public FunctionExpression
|
class AbsExpression final : public FunctionExpression
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
ArgumentValidation
|
ArgumentValidation ValidateArguments() override
|
||||||
ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override
|
|
||||||
{
|
{
|
||||||
if (args.size() == 1)
|
if (GetArgCount() == 1)
|
||||||
return ArgumentsAreValid{};
|
return ArgumentsAreValid{};
|
||||||
else
|
else
|
||||||
return ExpectedArguments{"expression"};
|
return ExpectedArguments{"expression"};
|
||||||
@ -89,10 +86,9 @@ private:
|
|||||||
class SinExpression : public FunctionExpression
|
class SinExpression : public FunctionExpression
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
ArgumentValidation
|
ArgumentValidation ValidateArguments() override
|
||||||
ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override
|
|
||||||
{
|
{
|
||||||
if (args.size() == 1)
|
if (GetArgCount() == 1)
|
||||||
return ArgumentsAreValid{};
|
return ArgumentsAreValid{};
|
||||||
else
|
else
|
||||||
return ExpectedArguments{"expression"};
|
return ExpectedArguments{"expression"};
|
||||||
@ -105,10 +101,9 @@ private:
|
|||||||
class CosExpression : public FunctionExpression
|
class CosExpression : public FunctionExpression
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
ArgumentValidation
|
ArgumentValidation ValidateArguments() override
|
||||||
ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override
|
|
||||||
{
|
{
|
||||||
if (args.size() == 1)
|
if (GetArgCount() == 1)
|
||||||
return ArgumentsAreValid{};
|
return ArgumentsAreValid{};
|
||||||
else
|
else
|
||||||
return ExpectedArguments{"expression"};
|
return ExpectedArguments{"expression"};
|
||||||
@ -121,10 +116,9 @@ private:
|
|||||||
class TanExpression : public FunctionExpression
|
class TanExpression : public FunctionExpression
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
ArgumentValidation
|
ArgumentValidation ValidateArguments() override
|
||||||
ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override
|
|
||||||
{
|
{
|
||||||
if (args.size() == 1)
|
if (GetArgCount() == 1)
|
||||||
return ArgumentsAreValid{};
|
return ArgumentsAreValid{};
|
||||||
else
|
else
|
||||||
return ExpectedArguments{"expression"};
|
return ExpectedArguments{"expression"};
|
||||||
@ -137,10 +131,9 @@ private:
|
|||||||
class ASinExpression : public FunctionExpression
|
class ASinExpression : public FunctionExpression
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
ArgumentValidation
|
ArgumentValidation ValidateArguments() override
|
||||||
ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override
|
|
||||||
{
|
{
|
||||||
if (args.size() == 1)
|
if (GetArgCount() == 1)
|
||||||
return ArgumentsAreValid{};
|
return ArgumentsAreValid{};
|
||||||
else
|
else
|
||||||
return ExpectedArguments{"expression"};
|
return ExpectedArguments{"expression"};
|
||||||
@ -153,10 +146,9 @@ private:
|
|||||||
class ACosExpression : public FunctionExpression
|
class ACosExpression : public FunctionExpression
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
ArgumentValidation
|
ArgumentValidation ValidateArguments() override
|
||||||
ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override
|
|
||||||
{
|
{
|
||||||
if (args.size() == 1)
|
if (GetArgCount() == 1)
|
||||||
return ArgumentsAreValid{};
|
return ArgumentsAreValid{};
|
||||||
else
|
else
|
||||||
return ExpectedArguments{"expression"};
|
return ExpectedArguments{"expression"};
|
||||||
@ -169,10 +161,9 @@ private:
|
|||||||
class ATanExpression : public FunctionExpression
|
class ATanExpression : public FunctionExpression
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
ArgumentValidation
|
ArgumentValidation ValidateArguments() override
|
||||||
ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override
|
|
||||||
{
|
{
|
||||||
if (args.size() == 1)
|
if (GetArgCount() == 1)
|
||||||
return ArgumentsAreValid{};
|
return ArgumentsAreValid{};
|
||||||
else
|
else
|
||||||
return ExpectedArguments{"expression"};
|
return ExpectedArguments{"expression"};
|
||||||
@ -185,10 +176,9 @@ private:
|
|||||||
class ATan2Expression : public FunctionExpression
|
class ATan2Expression : public FunctionExpression
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
ArgumentValidation
|
ArgumentValidation ValidateArguments() override
|
||||||
ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override
|
|
||||||
{
|
{
|
||||||
if (args.size() == 2)
|
if (GetArgCount() == 2)
|
||||||
return ArgumentsAreValid{};
|
return ArgumentsAreValid{};
|
||||||
else
|
else
|
||||||
return ExpectedArguments{"y, x"};
|
return ExpectedArguments{"y, x"};
|
||||||
@ -204,10 +194,9 @@ private:
|
|||||||
class SqrtExpression : public FunctionExpression
|
class SqrtExpression : public FunctionExpression
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
ArgumentValidation
|
ArgumentValidation ValidateArguments() override
|
||||||
ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override
|
|
||||||
{
|
{
|
||||||
if (args.size() == 1)
|
if (GetArgCount() == 1)
|
||||||
return ArgumentsAreValid{};
|
return ArgumentsAreValid{};
|
||||||
else
|
else
|
||||||
return ExpectedArguments{"expression"};
|
return ExpectedArguments{"expression"};
|
||||||
@ -220,10 +209,9 @@ private:
|
|||||||
class PowExpression : public FunctionExpression
|
class PowExpression : public FunctionExpression
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
ArgumentValidation
|
ArgumentValidation ValidateArguments() override
|
||||||
ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override
|
|
||||||
{
|
{
|
||||||
if (args.size() == 2)
|
if (GetArgCount() == 2)
|
||||||
return ArgumentsAreValid{};
|
return ArgumentsAreValid{};
|
||||||
else
|
else
|
||||||
return ExpectedArguments{"base, exponent"};
|
return ExpectedArguments{"base, exponent"};
|
||||||
@ -236,10 +224,9 @@ private:
|
|||||||
class MinExpression : public FunctionExpression
|
class MinExpression : public FunctionExpression
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
ArgumentValidation
|
ArgumentValidation ValidateArguments() override
|
||||||
ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override
|
|
||||||
{
|
{
|
||||||
if (args.size() == 2)
|
if (GetArgCount() == 2)
|
||||||
return ArgumentsAreValid{};
|
return ArgumentsAreValid{};
|
||||||
else
|
else
|
||||||
return ExpectedArguments{"a, b"};
|
return ExpectedArguments{"a, b"};
|
||||||
@ -252,10 +239,9 @@ private:
|
|||||||
class MaxExpression : public FunctionExpression
|
class MaxExpression : public FunctionExpression
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
ArgumentValidation
|
ArgumentValidation ValidateArguments() override
|
||||||
ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override
|
|
||||||
{
|
{
|
||||||
if (args.size() == 2)
|
if (GetArgCount() == 2)
|
||||||
return ArgumentsAreValid{};
|
return ArgumentsAreValid{};
|
||||||
else
|
else
|
||||||
return ExpectedArguments{"a, b"};
|
return ExpectedArguments{"a, b"};
|
||||||
@ -268,10 +254,9 @@ private:
|
|||||||
class ClampExpression : public FunctionExpression
|
class ClampExpression : public FunctionExpression
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
ArgumentValidation
|
ArgumentValidation ValidateArguments() override
|
||||||
ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override
|
|
||||||
{
|
{
|
||||||
if (args.size() == 3)
|
if (GetArgCount() == 3)
|
||||||
return ArgumentsAreValid{};
|
return ArgumentsAreValid{};
|
||||||
else
|
else
|
||||||
return ExpectedArguments{"value, min, max"};
|
return ExpectedArguments{"value, min, max"};
|
||||||
@ -287,10 +272,9 @@ private:
|
|||||||
class TimerExpression : public FunctionExpression
|
class TimerExpression : public FunctionExpression
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
ArgumentValidation
|
ArgumentValidation ValidateArguments() override
|
||||||
ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override
|
|
||||||
{
|
{
|
||||||
if (args.size() == 1)
|
if (GetArgCount() == 1)
|
||||||
return ArgumentsAreValid{};
|
return ArgumentsAreValid{};
|
||||||
else
|
else
|
||||||
return ExpectedArguments{"seconds"};
|
return ExpectedArguments{"seconds"};
|
||||||
@ -330,10 +314,9 @@ private:
|
|||||||
class IfExpression : public FunctionExpression
|
class IfExpression : public FunctionExpression
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
ArgumentValidation
|
ArgumentValidation ValidateArguments() override
|
||||||
ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override
|
|
||||||
{
|
{
|
||||||
if (args.size() == 3)
|
if (GetArgCount() == 3)
|
||||||
return ArgumentsAreValid{};
|
return ArgumentsAreValid{};
|
||||||
else
|
else
|
||||||
return ExpectedArguments{"condition, true_expression, false_expression"};
|
return ExpectedArguments{"condition, true_expression, false_expression"};
|
||||||
@ -351,10 +334,9 @@ private:
|
|||||||
class UnaryMinusExpression : public FunctionExpression
|
class UnaryMinusExpression : public FunctionExpression
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
ArgumentValidation
|
ArgumentValidation ValidateArguments() override
|
||||||
ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override
|
|
||||||
{
|
{
|
||||||
if (args.size() == 1)
|
if (GetArgCount() == 1)
|
||||||
return ArgumentsAreValid{};
|
return ArgumentsAreValid{};
|
||||||
else
|
else
|
||||||
return ExpectedArguments{"expression"};
|
return ExpectedArguments{"expression"};
|
||||||
@ -371,10 +353,9 @@ private:
|
|||||||
class UnaryPlusExpression : public FunctionExpression
|
class UnaryPlusExpression : public FunctionExpression
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
ArgumentValidation
|
ArgumentValidation ValidateArguments() override
|
||||||
ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override
|
|
||||||
{
|
{
|
||||||
if (args.size() == 1)
|
if (GetArgCount() == 1)
|
||||||
return ArgumentsAreValid{};
|
return ArgumentsAreValid{};
|
||||||
else
|
else
|
||||||
return ExpectedArguments{"expression"};
|
return ExpectedArguments{"expression"};
|
||||||
@ -386,10 +367,9 @@ private:
|
|||||||
// usage: deadzone(input, amount)
|
// usage: deadzone(input, amount)
|
||||||
class DeadzoneExpression : public FunctionExpression
|
class DeadzoneExpression : public FunctionExpression
|
||||||
{
|
{
|
||||||
ArgumentValidation
|
ArgumentValidation ValidateArguments() override
|
||||||
ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override
|
|
||||||
{
|
{
|
||||||
if (args.size() == 2)
|
if (GetArgCount() == 2)
|
||||||
return ArgumentsAreValid{};
|
return ArgumentsAreValid{};
|
||||||
else
|
else
|
||||||
return ExpectedArguments{"input, amount"};
|
return ExpectedArguments{"input, amount"};
|
||||||
@ -407,10 +387,9 @@ class DeadzoneExpression : public FunctionExpression
|
|||||||
// seconds is seconds to change from 0.0 to 1.0
|
// seconds is seconds to change from 0.0 to 1.0
|
||||||
class SmoothExpression : public FunctionExpression
|
class SmoothExpression : public FunctionExpression
|
||||||
{
|
{
|
||||||
ArgumentValidation
|
ArgumentValidation ValidateArguments() override
|
||||||
ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override
|
|
||||||
{
|
{
|
||||||
if (args.size() == 2 || args.size() == 3)
|
if (GetArgCount() == 2 || GetArgCount() == 3)
|
||||||
return ArgumentsAreValid{};
|
return ArgumentsAreValid{};
|
||||||
else
|
else
|
||||||
return ExpectedArguments{"input, seconds_up, seconds_down = seconds_up"};
|
return ExpectedArguments{"input, seconds_up, seconds_down = seconds_up"};
|
||||||
@ -451,10 +430,9 @@ private:
|
|||||||
// usage: hold(input, seconds)
|
// usage: hold(input, seconds)
|
||||||
class HoldExpression : public FunctionExpression
|
class HoldExpression : public FunctionExpression
|
||||||
{
|
{
|
||||||
ArgumentValidation
|
ArgumentValidation ValidateArguments() override
|
||||||
ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override
|
|
||||||
{
|
{
|
||||||
if (args.size() == 2)
|
if (GetArgCount() == 2)
|
||||||
return ArgumentsAreValid{};
|
return ArgumentsAreValid{};
|
||||||
else
|
else
|
||||||
return ExpectedArguments{"input, seconds"};
|
return ExpectedArguments{"input, seconds"};
|
||||||
@ -490,10 +468,9 @@ private:
|
|||||||
// usage: tap(input, seconds, taps=2)
|
// usage: tap(input, seconds, taps=2)
|
||||||
class TapExpression : public FunctionExpression
|
class TapExpression : public FunctionExpression
|
||||||
{
|
{
|
||||||
ArgumentValidation
|
ArgumentValidation ValidateArguments() override
|
||||||
ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override
|
|
||||||
{
|
{
|
||||||
if (args.size() == 2 || args.size() == 3)
|
if (GetArgCount() == 2 || GetArgCount() == 3)
|
||||||
return ArgumentsAreValid{};
|
return ArgumentsAreValid{};
|
||||||
else
|
else
|
||||||
return ExpectedArguments{"input, seconds, taps = 2"};
|
return ExpectedArguments{"input, seconds, taps = 2"};
|
||||||
@ -550,10 +527,9 @@ private:
|
|||||||
// speed is max movement per second
|
// speed is max movement per second
|
||||||
class RelativeExpression : public FunctionExpression
|
class RelativeExpression : public FunctionExpression
|
||||||
{
|
{
|
||||||
ArgumentValidation
|
ArgumentValidation ValidateArguments() override
|
||||||
ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override
|
|
||||||
{
|
{
|
||||||
if (args.size() >= 2 && args.size() <= 4)
|
if (GetArgCount() >= 2 && GetArgCount() <= 4)
|
||||||
return ArgumentsAreValid{};
|
return ArgumentsAreValid{};
|
||||||
else
|
else
|
||||||
return ExpectedArguments{"input, speed, [max_abs_value, [shared_state]]"};
|
return ExpectedArguments{"input, speed, [max_abs_value, [shared_state]]"};
|
||||||
@ -609,10 +585,9 @@ private:
|
|||||||
// usage: pulse(input, seconds)
|
// usage: pulse(input, seconds)
|
||||||
class PulseExpression : public FunctionExpression
|
class PulseExpression : public FunctionExpression
|
||||||
{
|
{
|
||||||
ArgumentValidation
|
ArgumentValidation ValidateArguments() override
|
||||||
ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override
|
|
||||||
{
|
{
|
||||||
if (args.size() == 2)
|
if (GetArgCount() == 2)
|
||||||
return ArgumentsAreValid{};
|
return ArgumentsAreValid{};
|
||||||
else
|
else
|
||||||
return ExpectedArguments{"input, seconds"};
|
return ExpectedArguments{"input, seconds"};
|
||||||
@ -731,12 +706,9 @@ void FunctionExpression::UpdateReferences(ControlEnvironment& env)
|
|||||||
arg->UpdateReferences(env);
|
arg->UpdateReferences(env);
|
||||||
}
|
}
|
||||||
|
|
||||||
FunctionExpression::ArgumentValidation
|
void FunctionExpression::SetArguments(std::vector<std::unique_ptr<Expression>>&& args)
|
||||||
FunctionExpression::SetArguments(std::vector<std::unique_ptr<Expression>>&& args)
|
|
||||||
{
|
{
|
||||||
m_args = std::move(args);
|
m_args = std::move(args);
|
||||||
|
|
||||||
return ValidateArguments(m_args);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Expression& FunctionExpression::GetArg(u32 number)
|
Expression& FunctionExpression::GetArg(u32 number)
|
||||||
|
@ -33,14 +33,12 @@ public:
|
|||||||
int CountNumControls() const override;
|
int CountNumControls() const override;
|
||||||
void UpdateReferences(ControlEnvironment& env) override;
|
void UpdateReferences(ControlEnvironment& env) override;
|
||||||
|
|
||||||
ArgumentValidation SetArguments(std::vector<std::unique_ptr<Expression>>&& args);
|
void SetArguments(std::vector<std::unique_ptr<Expression>>&& args);
|
||||||
|
virtual ArgumentValidation ValidateArguments() = 0;
|
||||||
|
|
||||||
void SetValue(ControlState value) override;
|
void SetValue(ControlState value) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual ArgumentValidation
|
|
||||||
ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) = 0;
|
|
||||||
|
|
||||||
Expression& GetArg(u32 number);
|
Expression& GetArg(u32 number);
|
||||||
u32 GetArgCount() const;
|
u32 GetArgCount() const;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user