mirror of
https://github.com/SourMesen/Mesen.git
synced 2025-04-02 10:52:48 -04:00
Debugger: Fixed issues with expression evaluator when using braces/parenthesis/brackets
This commit is contained in:
parent
7c7c948e8b
commit
9bd04c6535
2 changed files with 7 additions and 5 deletions
|
@ -188,7 +188,7 @@ string ExpressionEvaluator::GetNextToken(string expression, size_t &pos)
|
|||
return output;
|
||||
}
|
||||
|
||||
bool ExpressionEvaluator::ProcessSpecialOperator(EvalOperators evalOp, std::stack<EvalOperators> &opStack, vector<int> &outputQueue)
|
||||
bool ExpressionEvaluator::ProcessSpecialOperator(EvalOperators evalOp, std::stack<EvalOperators> &opStack, std::stack<int> &precedenceStack, vector<int> &outputQueue)
|
||||
{
|
||||
if(opStack.empty()) {
|
||||
return false;
|
||||
|
@ -196,6 +196,7 @@ bool ExpressionEvaluator::ProcessSpecialOperator(EvalOperators evalOp, std::stac
|
|||
while(opStack.top() != evalOp) {
|
||||
outputQueue.push_back(opStack.top());
|
||||
opStack.pop();
|
||||
precedenceStack.pop();
|
||||
|
||||
if(opStack.empty()) {
|
||||
return false;
|
||||
|
@ -205,6 +206,7 @@ bool ExpressionEvaluator::ProcessSpecialOperator(EvalOperators evalOp, std::stac
|
|||
outputQueue.push_back(opStack.top());
|
||||
}
|
||||
opStack.pop();
|
||||
precedenceStack.pop();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -251,7 +253,7 @@ bool ExpressionEvaluator::ToRpn(string expression, vector<int> &outputQueue)
|
|||
previousTokenIsOp = true;
|
||||
} else if(token[0] == ')') {
|
||||
parenthesisCount--;
|
||||
if(!ProcessSpecialOperator(EvalOperators::Parenthesis, opStack, outputQueue)) {
|
||||
if(!ProcessSpecialOperator(EvalOperators::Parenthesis, opStack, precedenceStack, outputQueue)) {
|
||||
return false;
|
||||
}
|
||||
} else if(token[0] == '[') {
|
||||
|
@ -260,7 +262,7 @@ bool ExpressionEvaluator::ToRpn(string expression, vector<int> &outputQueue)
|
|||
precedenceStack.push(0);
|
||||
} else if(token[0] == ']') {
|
||||
bracketCount--;
|
||||
if(!ProcessSpecialOperator(EvalOperators::Bracket, opStack, outputQueue)) {
|
||||
if(!ProcessSpecialOperator(EvalOperators::Bracket, opStack, precedenceStack, outputQueue)) {
|
||||
return false;
|
||||
}
|
||||
} else if(token[0] == '{') {
|
||||
|
@ -269,7 +271,7 @@ bool ExpressionEvaluator::ToRpn(string expression, vector<int> &outputQueue)
|
|||
precedenceStack.push(0);
|
||||
} else if(token[0] == '}') {
|
||||
braceCount--;
|
||||
if(!ProcessSpecialOperator(EvalOperators::Braces, opStack, outputQueue)){
|
||||
if(!ProcessSpecialOperator(EvalOperators::Braces, opStack, precedenceStack, outputQueue)){
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
|
|
|
@ -102,7 +102,7 @@ private:
|
|||
EvalOperators GetOperator(string token, bool unaryOperator);
|
||||
bool CheckSpecialTokens(string expression, size_t &pos, string &output);
|
||||
string GetNextToken(string expression, size_t &pos);
|
||||
bool ProcessSpecialOperator(EvalOperators evalOp, std::stack<EvalOperators> &opStack, vector<int> &outputQueue);
|
||||
bool ProcessSpecialOperator(EvalOperators evalOp, std::stack<EvalOperators> &opStack, std::stack<int> &precedenceStack, vector<int> &outputQueue);
|
||||
bool ToRpn(string expression, vector<int> &outputQueue);
|
||||
int32_t PrivateEvaluate(string expression, DebugState &state, EvalResultType &resultType, OperationInfo &operationInfo, bool &success);
|
||||
vector<int>* GetRpnList(string expression, vector<int> &output, bool& success);
|
||||
|
|
Loading…
Add table
Reference in a new issue