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.ArcumError;
import edu.ucsd.arcum.exceptions.SourceLocation;
import edu.ucsd.arcum.interpreter.ast.TraitSignature;
import edu.ucsd.arcum.interpreter.query.ArcumDeclarationTable;
public class VariableReferenceExpression extends ConstraintExpression
{
private String name;
public VariableReferenceExpression(SourceLocation position, String name) {
super(position);
this.name = name;
}
@Override protected void doCheckUserDefinedPredicates(List<TraitSignature> tupleSets,
Set<String> varsInScope)
{
if (!varsInScope.contains(name)) {
ArcumError.fatalUserError(getPosition(),
"Reference to undefined variable %s (check spelling or scope)", name);
}
}
@Override public Set<String> getArcumVariableReferences() {
return Sets.newHashSet(name);
}
@Override public String toString() {
return name;
}
public String getName() {
return name;
}
public boolean isSpecialAnyVariable() {
return name.equals(ArcumDeclarationTable.SPECIAL_ANY_VARIABLE);
}
@Override public Set<String> findAllTraitDependencies() {
return Sets.newHashSet();
}
@Override public Set<String> findNonMonotonicDependencies() {
return Sets.newHashSet();
}
}