Skip to content

Commit

Permalink
Support double (or more) not operator
Browse files Browse the repository at this point in the history
  • Loading branch information
ethanmoffat committed Feb 5, 2022
1 parent 714dd6a commit 4dcefef
Showing 1 changed file with 13 additions and 12 deletions.
25 changes: 13 additions & 12 deletions EOBot/Interpreter/States/ExpressionEvaluator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -190,23 +190,24 @@ public override async Task<(EvalResult, string, BotToken)> EvaluateAsync(Program
if (input.OperationStack.Count == 0)
return StackEmptyError(input.Current());

var varToken = input.OperationStack.Pop();
var operand = input.OperationStack.Pop();

if (input.OperationStack.Count == 0 || input.OperationStack.Peek().TokenType != BotTokenType.NotOperator)
{
input.OperationStack.Push(varToken);
return Success();
}
var varToken = operand as VariableBotToken;
if (varToken == null)
return StackTokenError(BotTokenType.Literal, operand);

var notOperator = input.OperationStack.Pop();
while (input.OperationStack.Count > 0 && input.OperationStack.Peek().TokenType == BotTokenType.NotOperator)
{
var notOperator = input.OperationStack.Pop();

var boolOperand = ((VariableBotToken)varToken).VariableValue as BoolVariable;
if (boolOperand == null)
return UnsupportedOperatorError(notOperator);
var boolOperand = varToken.VariableValue as BoolVariable;
if (boolOperand == null)
return UnsupportedOperatorError(notOperator);

var negatedToken = new VariableBotToken(varToken.TokenType, (!boolOperand.Value).ToString(), new BoolVariable(!boolOperand.Value));
input.OperationStack.Push(negatedToken);
varToken = new VariableBotToken(varToken.TokenType, (!boolOperand.Value).ToString(), new BoolVariable(!boolOperand.Value));
}

input.OperationStack.Push(varToken);
return Success();
}

Expand Down

0 comments on commit 4dcefef

Please sign in to comment.