package main.nl.uva.parser.expression.unary;
import main.nl.uva.parser.Line;
import main.nl.uva.parser.expression.Expression;
import main.nl.uva.validation.ASTValidation;
import main.nl.uva.validation.Scope;
import main.nl.uva.validation.error.VariableNotFoundError;
import main.nl.uva.validation.type.Invalid;
import main.nl.uva.validation.type.Value;
public class VariableAtom extends Expression {
private final String _variableName;
private Value _linkedValue = new Invalid();
public VariableAtom(final String variableName, final Line lineInfo) {
super(lineInfo);
_variableName = variableName;
}
@Override
public ASTValidation validateAndCalculate(final Scope scope) {
ASTValidation valid = new ASTValidation();
if (scope.variableAlreadyDefined(_variableName)) {
_linkedValue = scope.getVariable(_variableName).getValue();
} else {
valid.addError(new VariableNotFoundError(_variableName, getLineInfo()));
}
notifyListenersAboutValueChange();
return valid;
}
@Override
public Value getValue() {
return _linkedValue;
}
@Override
public String toString() {
return _variableName;
}
}