summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/ControlReference
diff options
context:
space:
mode:
authorJordan Woyak <jordan.woyak@gmail.com>2024-03-20 21:59:08 -0500
committerJordan Woyak <jordan.woyak@gmail.com>2024-04-12 15:52:35 -0500
commit5039072ae9a97d7bf6f6711225a2368c71350f13 (patch)
tree3fe9200ac0427ee067104e477d578ef15e2ffcf5 /Source/Core/InputCommon/ControlReference
parent2011c7a4483942cb4001ac7edd584914670e5c33 (diff)
ExpressionParser: Support unary plus operator.
Diffstat (limited to 'Source/Core/InputCommon/ControlReference')
-rw-r--r--Source/Core/InputCommon/ControlReference/ExpressionParser.cpp6
-rw-r--r--Source/Core/InputCommon/ControlReference/FunctionExpression.cpp18
2 files changed, 24 insertions, 0 deletions
diff --git a/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp b/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp
index 30a261d13d..b76c170a2f 100644
--- a/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp
+++ b/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp
@@ -830,6 +830,12 @@ private:
// Interpret it as a unary minus function.
return ParseFunctionArguments("minus", MakeFunctionExpression("minus"), tok);
}
+ case TOK_ADD:
+ {
+ // An atom was expected but we got an addition symbol.
+ // Interpret it as a unary plus.
+ return ParseFunctionArguments("plus", MakeFunctionExpression("plus"), tok);
+ }
default:
{
return ParseResult::MakeErrorResult(tok, _trans("Expected start of expression."));
diff --git a/Source/Core/InputCommon/ControlReference/FunctionExpression.cpp b/Source/Core/InputCommon/ControlReference/FunctionExpression.cpp
index 46cfc37beb..15d8c72c0c 100644
--- a/Source/Core/InputCommon/ControlReference/FunctionExpression.cpp
+++ b/Source/Core/InputCommon/ControlReference/FunctionExpression.cpp
@@ -375,6 +375,22 @@ private:
}
};
+// usage: plus(expression)
+class UnaryPlusExpression : public FunctionExpression
+{
+private:
+ ArgumentValidation
+ ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override
+ {
+ if (args.size() == 1)
+ return ArgumentsAreValid{};
+ else
+ return ExpectedArguments{"expression"};
+ }
+
+ ControlState GetValue() const override { return GetArg(0).GetValue(); }
+};
+
// usage: deadzone(input, amount)
class DeadzoneExpression : public FunctionExpression
{
@@ -689,6 +705,8 @@ std::unique_ptr<FunctionExpression> MakeFunctionExpression(std::string_view name
return std::make_unique<ToggleExpression>();
if (name == "minus")
return std::make_unique<UnaryMinusExpression>();
+ if (name == "plus")
+ return std::make_unique<UnaryPlusExpression>();
if (name == "deadzone")
return std::make_unique<DeadzoneExpression>();
if (name == "smooth")