use of jkind.lustre.Expr in project AGREE by loonwerks.
the class InlineNodeCalls method createAssignmentEquations.
private void createAssignmentEquations(final String prefix, List<Equation> equations, Map<String, IdExpr> translation) {
SubstitutionVisitor substitution = new SubstitutionVisitor(translation) {
@Override
public Expr visit(NodeCallExpr e) {
return new NodeCallExpr(e.location, prefix + e.node, visitExprs(e.args));
}
};
for (Equation eq : equations) {
List<IdExpr> lhs = new ArrayList<>();
for (IdExpr idExpr : eq.lhs) {
lhs.add(translation.get(idExpr.id));
}
Expr expr = eq.expr.accept(substitution);
queue.add(new Equation(eq.location, lhs, expr));
}
}
use of jkind.lustre.Expr in project AGREE by loonwerks.
the class InlineNodeCalls method visit.
@Override
public Expr visit(NodeCallExpr e) {
// Detect duplicate node calls to reduce code size
String key = getKey(e);
if (inlinedCalls.containsKey(key)) {
return inlinedCalls.get(key);
} else {
Expr result = TupleExpr.compress(visitNodeCallExpr(e));
inlinedCalls.put(key, result);
return result;
}
}
use of jkind.lustre.Expr in project AGREE by loonwerks.
the class InlineNodeCalls method createInputEquations.
private void createInputEquations(List<VarDecl> inputs, List<Expr> args, Map<String, IdExpr> translation) {
for (int i = 0; i < inputs.size(); i++) {
IdExpr idExpr = translation.get(inputs.get(i).id);
Expr arg = args.get(i);
queue.add(new Equation(idExpr, arg));
}
}
use of jkind.lustre.Expr in project AGREE by loonwerks.
the class RemoveCondacts method clockNodeCalls.
private Node clockNodeCalls(Node node, final IdExpr clock) {
return (Node) node.accept(new AstMapVisitor() {
@Override
public Expr visit(NodeCallExpr e) {
List<Expr> args = new ArrayList<>();
args.add(clock);
args.addAll(visitExprs(e.args));
Node clocked = createClockedNode(e.node);
return new NodeCallExpr(clocked.id, args);
}
@Override
public Expr visit(CondactExpr e) {
NodeCallExpr call = (NodeCallExpr) super.visit(e.call);
List<Expr> args = new ArrayList<>();
args.add(new BinaryExpr(e.clock.accept(this), BinaryOp.AND, clock));
args.addAll(e.call.args);
args.addAll(visitExprs(e.args));
Node condact = createCondactNode(call.node);
return new NodeCallExpr(condact.id, args);
}
});
}
use of jkind.lustre.Expr in project AGREE by loonwerks.
the class RemoveCondacts method removeCondacts.
private Node removeCondacts(Node node) {
return (Node) node.accept(new AstMapVisitor() {
@Override
public Expr visit(CondactExpr e) {
NodeCallExpr call = (NodeCallExpr) e.call.accept(this);
List<Expr> args = new ArrayList<>();
args.add(e.clock.accept(this));
args.addAll(e.call.args);
args.addAll(visitExprs(e.args));
Node condact = createCondactNode(call.node);
return new NodeCallExpr(condact.id, args);
}
});
}
Aggregations