001package org.clafer.ast;
002
003import org.clafer.common.Check;
004
005/**
006 * A local is a binding of a value to a name in quantifiers. For example, x, y,
007 * and z are the locals in the expression {@code all x;y:A, z:B | ...}.
008 *
009 * @author jimmy
010 */
011public class AstLocal implements AstSetExpr, AstVar {
012
013    private final String name;
014
015    AstLocal(String name) {
016        this.name = Check.notNull(name);
017    }
018
019    /**
020     * {@inheritDoc}
021     */
022    @Override
023    public String getName() {
024        return name;
025    }
026
027    /**
028     * {@inheritDoc}
029     */
030    @Override
031    public <A, B> B accept(AstExprVisitor<A, B> visitor, A a) {
032        return visitor.visit(this, a);
033    }
034
035    /**
036     * {@inheritDoc}
037     */
038    @Override
039    public boolean equals(Object obj) {
040        return this == obj;
041    }
042
043    /**
044     * {@inheritDoc}
045     */
046    @Override
047    public int hashCode() {
048        return name.hashCode();
049    }
050
051    /**
052     * {@inheritDoc}
053     */
054    @Override
055    public String toString() {
056        return name;
057    }
058}