@Override protected Expr clone(Map<Expr, Expr> cache) { Expr known = cache.get(this); if (known != null) { return known; } ConditionalExpr copy = new ConditionalExpr(); cache.put(this, copy); copy.setCondition(condition != null ? condition.clone(cache) : null); copy.setConsequent(consequent != null ? consequent.clone(cache) : null); copy.setAlternative(alternative != null ? alternative.clone(cache) : null); return copy; } }
@Override public void visit(ConditionalExpr expr) { pushLocation(expr.getLocation()); try { expr.getCondition().acceptVisitor(this); Expr cond = optimizeCondition(resultExpr); Statement barrier = addBarrier(); expr.getConsequent().acceptVisitor(this); Expr consequent = resultExpr; expr.getAlternative().acceptVisitor(this); Expr alternative = resultExpr; removeBarrier(barrier); expr.setCondition(cond); expr.setConsequent(consequent); expr.setAlternative(alternative); resultExpr = expr; } finally { popLocation(); } }
@Override public void visit(ConditionalExpr expr) { expr.getCondition().acceptVisitor(this); expr.getConsequent().acceptVisitor(this); expr.getAlternative().acceptVisitor(this); }
VariableExpr secondLhs = (VariableExpr) secondAssignment.getLeftValue(); if (firstLhs.getIndex() == secondLhs.getIndex()) { ConditionalExpr conditionalExpr = new ConditionalExpr(); conditionalExpr.setCondition(statement.getCondition()); conditionalExpr.setConsequent(firstAssignment.getRightValue()); conditionalExpr.setAlternative(secondAssignment.getRightValue()); conditionalExpr.setLocation(statement.getCondition().getLocation()); AssignmentStatement assignment = new AssignmentStatement(); assignment.setLocation(conditionalExpr.getLocation()); VariableExpr lhs = new VariableExpr(); lhs.setIndex(firstLhs.getIndex());
@Override public void visit(ConditionalExpr expr) { try { if (expr.getLocation() != null) { pushLocation(expr.getLocation()); } Precedence outerPrecedence = precedence; if (outerPrecedence.ordinal() > Precedence.CONDITIONAL.ordinal()) { writer.append('('); } precedence = Precedence.CONDITIONAL.next(); expr.getCondition().acceptVisitor(this); writer.ws().append("?").ws(); precedence = Precedence.CONDITIONAL.next(); expr.getConsequent().acceptVisitor(this); writer.ws().append(":").ws(); precedence = Precedence.CONDITIONAL; expr.getAlternative().acceptVisitor(this); if (outerPrecedence.ordinal() > Precedence.CONDITIONAL.ordinal()) { writer.append(')'); } if (expr.getLocation() != null) { popLocation(); } } catch (IOException e) { throw new RenderingException("IO error occured", e); } }
@Override public void visit(ConditionalExpr expr) { ConditionalStatement statement = new ConditionalStatement(); statement.setCondition(expr.getCondition()); expr.getCondition().acceptVisitor(new ExpressionSideEffectDecomposer(statement.getConsequent())); expr.getAlternative().acceptVisitor(new ExpressionSideEffectDecomposer(statement.getAlternative())); target.add(statement); } @Override
VariableExpr secondLhs = (VariableExpr) secondAssignment.getLeftValue(); if (firstLhs.getIndex() == secondLhs.getIndex()) { ConditionalExpr conditionalExpr = new ConditionalExpr(); conditionalExpr.setCondition(statement.getCondition()); conditionalExpr.setConsequent(firstAssignment.getRightValue()); conditionalExpr.setAlternative(secondAssignment.getRightValue()); conditionalExpr.setLocation(statement.getCondition().getLocation()); AssignmentStatement assignment = new AssignmentStatement(); assignment.setLocation(conditionalExpr.getLocation()); VariableExpr lhs = new VariableExpr(); lhs.setIndex(firstLhs.getIndex());
@Override public void visit(ConditionalExpr expr) { try { output.writeByte(2); writeExpr(expr.getCondition()); writeExpr(expr.getConsequent()); writeExpr(expr.getAlternative()); } catch (IOException e) { throw new IOExceptionWrapper(e); } }
@Override public void visit(ConditionalExpr expr) { try { if (expr.getLocation() != null) { pushLocation(expr.getLocation()); } Precedence outerPrecedence = precedence; if (outerPrecedence.ordinal() > Precedence.CONDITIONAL.ordinal()) { writer.append('('); } precedence = Precedence.CONDITIONAL.next(); expr.getCondition().acceptVisitor(this); writer.ws().append("?").ws(); precedence = Precedence.CONDITIONAL.next(); expr.getConsequent().acceptVisitor(this); writer.ws().append(":").ws(); precedence = Precedence.CONDITIONAL; expr.getAlternative().acceptVisitor(this); if (outerPrecedence.ordinal() > Precedence.CONDITIONAL.ordinal()) { writer.append(')'); } if (expr.getLocation() != null) { popLocation(); } } catch (IOException e) { throw new RenderingException("IO error occured", e); } }
@Override public void visit(ConditionalExpr expr) { ConditionalStatement statement = new ConditionalStatement(); statement.setCondition(expr.getCondition()); expr.getCondition().acceptVisitor(new ExpressionSideEffectDecomposer(statement.getConsequent())); expr.getAlternative().acceptVisitor(new ExpressionSideEffectDecomposer(statement.getAlternative())); target.add(statement); } @Override
@Override public void visit(ConditionalExpr expr) { pushLocation(expr.getLocation()); try { expr.getCondition().acceptVisitor(this); Expr cond = resultExpr; expr.getConsequent().acceptVisitor(this); Expr consequent = resultExpr; expr.getAlternative().acceptVisitor(this); Expr alternative = resultExpr; expr.setCondition(cond); expr.setConsequent(consequent); expr.setAlternative(alternative); resultExpr = expr; } finally { popLocation(); } }
ConditionalExpr expr = new ConditionalExpr(); expr.setCondition(readExpr(input)); expr.setConsequent(readExpr(input)); expr.setAlternative(readExpr(input)); return expr;
@Override public void visit(ConditionalExpr expr) { writer.print("("); expr.getCondition().acceptVisitor(this); writer.print(" ? "); expr.getConsequent().acceptVisitor(this); writer.print(" : "); expr.getAlternative().acceptVisitor(this); writer.print(")"); }
@Override protected Expr clone(Map<Expr, Expr> cache) { Expr known = cache.get(this); if (known != null) { return known; } ConditionalExpr copy = new ConditionalExpr(); cache.put(this, copy); copy.setCondition(condition != null ? condition.clone(cache) : null); copy.setConsequent(consequent != null ? consequent.clone(cache) : null); copy.setAlternative(alternative != null ? alternative.clone(cache) : null); return copy; } }
@Override public void visit(ConditionalExpr expr) { accept(expr.getCondition()); WasmConditional conditional = new WasmConditional(forCondition(result)); accept(expr.getConsequent()); conditional.getThenBlock().getBody().add(result); result.acceptVisitor(typeInference); WasmType thenType = typeInference.getResult(); conditional.getThenBlock().setType(thenType); accept(expr.getAlternative()); conditional.getElseBlock().getBody().add(result); result.acceptVisitor(typeInference); WasmType elseType = typeInference.getResult(); conditional.getElseBlock().setType(elseType); assert thenType == elseType; conditional.setType(thenType); result = conditional; }
ConditionalExpr expr = new ConditionalExpr(); expr.setCondition(readExpr(input)); expr.setConsequent(readExpr(input)); expr.setAlternative(readExpr(input)); return expr;
@Override public void visit(ConditionalExpr expr) { expr.getCondition().acceptVisitor(this); expr.getConsequent().acceptVisitor(this); expr.getAlternative().acceptVisitor(this); }
@Override public void visit(ConditionalExpr expr) { try { output.writeByte(2); writeExpr(expr.getCondition()); writeExpr(expr.getConsequent()); writeExpr(expr.getAlternative()); } catch (IOException e) { throw new IOExceptionWrapper(e); } }
@Override public void visit(ConditionalExpr expr) { accept(expr.getCondition()); WasmConditional conditional = new WasmConditional(forCondition(result)); accept(expr.getConsequent()); conditional.getThenBlock().getBody().add(result); result.acceptVisitor(typeInference); WasmType thenType = typeInference.getResult(); conditional.getThenBlock().setType(thenType); accept(expr.getAlternative()); conditional.getElseBlock().getBody().add(result); result.acceptVisitor(typeInference); WasmType elseType = typeInference.getResult(); conditional.getElseBlock().setType(elseType); assert thenType == elseType; conditional.setType(thenType); result = conditional; }