@Override
  public Integer eval(Evaluator evaluator, RuntimeEnvironment localEnv) throws EvaluatorException {
    Integer value;
    RuntimeEnvironment globalEnv = evaluator.getGlobalEnv();
    SymbolTable symbolTable = evaluator.getSymbolTable();

    if (localEnv.isBound(nameIndex)) {
      value = localEnv.fetch(nameIndex);
    } else if (globalEnv.isBound(nameIndex)) {
      value = globalEnv.fetch(nameIndex);
    } else {
      throw new EvaluatorException("Undefined variable: " + symbolTable.getName(nameIndex));
    }

    return value;
  }