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.declarations.types.TypeVar; 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.TernaryOperator; 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; /** * This implements a ternary conditional operator that behaves like the ?: in * Java. * * @author Simon Taddiken */ public class Conditional extends TernaryOperator<BooleanLiteral, Literal, Literal>{ public Conditional(OpType id) { super(id); final TypeVar a = Type.newTypeVar("A"); this.initTypes(a, Type.BOOLEAN, a, a); } @Override protected void exec(Stack<Literal> stack, Namespace ns, BooleanLiteral first, Literal second, Literal third, Position resultPos, ExecutionVisitor execVisitor) throws ASTTraversalException { if (first.getValue()) { stack.push(second); } else { stack.push(third); } } }