App: [skip ci] reduce code duplication

This commit is contained in:
wmayer
2022-12-23 18:39:59 +01:00
parent b9d88f9985
commit aeb5ea0ddf

View File

@@ -3391,23 +3391,29 @@ UnitExpression * ExpressionParser::parseUnit(const App::DocumentObject *owner, c
}
}
namespace {
std::tuple<int, int> getTokenAndStatus(const std::string & str)
{
ExpressionParser::YY_BUFFER_STATE buf = ExpressionParser::ExpressionParser_scan_string(str.c_str());
int token = ExpressionParser::ExpressionParserlex();
int status = ExpressionParser::ExpressionParserlex();
ExpressionParser::ExpressionParser_delete_buffer(buf);
return std::make_tuple(token, status);
}
}
bool ExpressionParser::isTokenAnIndentifier(const std::string & str)
{
ExpressionParser::YY_BUFFER_STATE buf = ExpressionParser_scan_string(str.c_str());
int token = ExpressionParserlex();
int status = ExpressionParserlex();
ExpressionParser_delete_buffer(buf);
return (status == 0 && (token == IDENTIFIER || token == CELLADDRESS ));
int token{}, status{};
std::tie(token, status) = getTokenAndStatus(str);
return (status == 0 && (token == IDENTIFIER || token == CELLADDRESS));
}
bool ExpressionParser::isTokenAUnit(const std::string & str)
{
ExpressionParser::YY_BUFFER_STATE buf = ExpressionParser_scan_string(str.c_str());
int token = ExpressionParserlex();
int status = ExpressionParserlex();
ExpressionParser_delete_buffer(buf);
int token{}, status{};
std::tie(token, status) = getTokenAndStatus(str);
return (status == 0 && token == UNIT);
}