package edu.ucsd.arcum.interpreter.ast.expressions; import java.util.List; import java.util.Set; import com.google.common.collect.Sets; import edu.ucsd.arcum.exceptions.SourceLocation; import edu.ucsd.arcum.interpreter.ast.TraitSignature; public class UnificationExpression extends ConstraintExpression { private String name; private ConstraintExpression expression; public UnificationExpression(SourceLocation position, String name, ConstraintExpression expression) { super(position); this.name = name; this.expression = expression; } @Override protected void doCheckUserDefinedPredicates(List<TraitSignature> tupleSets, Set<String> varsInScope) { expression.doCheckUserDefinedPredicates(tupleSets, varsInScope); } @Override public Set<String> getArcumVariableReferences() { Set<String> result = Sets.newHashSet(name); result.addAll(expression.getArcumVariableReferences()); return result; } @Override public String toString() { return String.format("%s == (%s)", name, expression); } public String getName() { return name; } public ConstraintExpression getRightHandSide() { return expression; } @Override public Set<String> findAllTraitDependencies() { return expression.findAllTraitDependencies(); } @Override public Set<String> findNonMonotonicDependencies() { return expression.findNonMonotonicDependencies(); } }