package de.skuzzle.polly.core.parser.ast.lang.operators;
import de.skuzzle.polly.core.parser.Position;
import de.skuzzle.polly.core.parser.ast.declarations.Namespace;
import de.skuzzle.polly.core.parser.ast.declarations.types.Type;
import de.skuzzle.polly.core.parser.ast.expressions.literals.BooleanLiteral;
import de.skuzzle.polly.core.parser.ast.expressions.literals.Literal;
import de.skuzzle.polly.core.parser.ast.lang.UnaryOperator;
import de.skuzzle.polly.core.parser.ast.visitor.ASTTraversalException;
import de.skuzzle.polly.core.parser.ast.visitor.ExecutionVisitor;
import de.skuzzle.polly.tools.collections.Stack;
public class UnaryBooleanArithmetic extends UnaryOperator<BooleanLiteral> {
public UnaryBooleanArithmetic(OpType opType) {
super(opType);
this.initTypes(Type.BOOLEAN, Type.BOOLEAN);
}
@Override
protected void exec(Stack<Literal> stack, Namespace ns, BooleanLiteral operand,
Position resultPos, ExecutionVisitor execVisitor) throws ASTTraversalException {
switch (this.getOp()) {
case EXCLAMATION:
stack.push(new BooleanLiteral(resultPos, !operand.getValue()));
break;
default:
this.invalidOperatorType(this.getOp());
}
}
}