summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp
diff options
context:
space:
mode:
authorMichael M <mchtly@gmail.com>2017-06-07 14:53:41 -0700
committerMichael M <mchtly@gmail.com>2017-09-14 12:53:34 -0700
commitd2821e14fa9735ece3be6eec9d6bdf4cf96c1280 (patch)
tree7c82aad1be267fc4d94c7641a2815ac6de102a6c /Source/Core/InputCommon/ControlReference/ExpressionParser.cpp
parent030dc11c6e31125cd03862f86815fe67d978f98d (diff)
ParseExpression: return a std::pair
Diffstat (limited to 'Source/Core/InputCommon/ControlReference/ExpressionParser.cpp')
-rw-r--r--Source/Core/InputCommon/ControlReference/ExpressionParser.cpp41
1 files changed, 18 insertions, 23 deletions
diff --git a/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp b/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp
index d520015cf3..92e6bde502 100644
--- a/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp
+++ b/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp
@@ -369,15 +369,14 @@ public:
m_it = tokens.begin();
}
- ParseStatus Parse(Expression** expr_out)
+ std::pair<ParseStatus, Expression*> Parse()
{
ExpressionNode* node;
ParseStatus status = Toplevel(&node);
if (status != ParseStatus::Successful)
- return status;
+ return std::make_pair(status, nullptr);
- *expr_out = new Expression(node);
- return ParseStatus::Successful;
+ return std::make_pair(ParseStatus::Successful, new Expression(node));
}
private:
@@ -522,32 +521,28 @@ Expression::~Expression()
delete node;
}
-static ParseStatus ParseExpressionInner(const std::string& str, ControlFinder& finder,
- Expression** expr_out)
+static std::pair<ParseStatus, Expression*> ParseExpressionInner(const std::string& str,
+ ControlFinder& finder)
{
- ParseStatus status;
- Expression* expr;
- *expr_out = nullptr;
-
if (str == "")
- return ParseStatus::Successful;
+ return std::make_pair(ParseStatus::Successful, nullptr);
Lexer l(str);
std::vector<Token> tokens;
- status = l.Tokenize(tokens);
- if (status != ParseStatus::Successful)
- return status;
+ ParseStatus tokenize_status = l.Tokenize(tokens);
+ if (tokenize_status != ParseStatus::Successful)
+ return std::make_pair(tokenize_status, nullptr);
- Parser p(tokens, finder);
- status = p.Parse(&expr);
+ ParseStatus status;
+ Expression* expr;
+ std::tie(status, expr) = Parser(tokens, finder).Parse();
if (status != ParseStatus::Successful)
- return status;
+ return std::make_pair(status, nullptr);
- *expr_out = expr;
- return ParseStatus::Successful;
+ return std::make_pair(ParseStatus::Successful, expr);
}
-ParseStatus ParseExpression(const std::string& str, ControlFinder& finder, Expression** expr_out)
+std::pair<ParseStatus, Expression*> ParseExpression(const std::string& str, ControlFinder& finder)
{
// Add compatibility with old simple expressions, which are simple
// barewords control names.
@@ -560,11 +555,11 @@ ParseStatus ParseExpression(const std::string& str, ControlFinder& finder, Expre
Device::Control* control = finder.FindControl(qualifier);
if (control)
{
- *expr_out = new Expression(new ControlExpression(qualifier, device, control));
- return ParseStatus::Successful;
+ Expression* expr = new Expression(new ControlExpression(qualifier, device, control));
+ return std::make_pair(ParseStatus::Successful, expr);
}
- return ParseExpressionInner(str, finder, expr_out);
+ return ParseExpressionInner(str, finder);
}
}
}