@Override
  public VarType evaluate() {
    Drawable d = new Drawable();
    double start = startExpr.evaluate().asDouble().intValue();
    double stop = stopExpr.evaluate().asDouble().intValue();
    double increment = 1.0;
    if (incrementExpr != null) {
      increment = startExpr.evaluate().asDouble();
    }
    for (double i = start; i <= stop; i += increment) {
      scope.assign(identifier, new VarType(i));
      VarType returnValue = block.evaluate();

      if (returnValue.isDrawable() && lookup) {
        Drawable d2 = returnValue.asDrawable();
        d.addToGroup(d2);
        d2.removeFromCanvas();
        // System.out.println("added drawable in for loop at+"+i);

      }
      /*
      else if(returnValue != VarType.VOID ) {
          return returnValue;

      }*/
    }

    return VarType.VOID;
  }
  @Override
  public VarType evaluate() {

    VarType a = lhs.evaluate();
    VarType b = rhs.evaluate();

    if (a.isBoolean() && b.isBoolean()) {
      return new VarType(a.asBoolean() && b.asBoolean());
    }
    if (a.isDrawable() && b.isDrawable()) {
      Drawable aP = a.asDrawable();
      Drawable bP = b.asDrawable();
      this.fireDrawableEvent(CustomEvent.REMOVE_DRAWABLE, aP);
      this.fireDrawableEvent(CustomEvent.REMOVE_DRAWABLE, bP);
      Drawable d = PolyBoolean.intersection(aP, bP);
      // TODO: add actual line number instead of 0 here
      this.fireDrawableEvent(CustomEvent.DRAWABLE_CREATED, d);
      // d.setLine(line);
      return new VarType(d);
    } else {
      throw new RuntimeException("illegal expression: " + this);
    }
  }