class BafLocal implements Local {

  String name;
  Type type;
  int fixedHashCode;
  boolean isHashCodeChosen;
  private Local originalLocal;
  private int number = 0;

  public BafLocal(String name, Type t) {
    this.name = name;
    this.type = t;
  }

  @Override
  public Object clone() {<FILL_FUNCTION_BODY>}

  /* JimpleLocals are *NOT* equivalent to Baf Locals! */
  @Override
  public boolean equivTo(Object o) {
    return this.equals(o);
  }

  /** Returns a hash code for this object, consistent with structural equality. */
  @Override
  public int equivHashCode() {
    return name.hashCode() * 101 + type.hashCode() * 17;
  }

  public Local getOriginalLocal() {
    return this.originalLocal;
  }

  public void setOriginalLocal(Local l) {
    this.originalLocal = l;
  }

  @Override
  public String getName() {
    return this.name;
  }

  @Override
  public void setName(String name) {
    this.name = name;
  }

  @Override
  public Type getType() {
    return this.type;
  }

  @Override
  public void setType(Type t) {
    this.type = t;
  }

  @Override
  public String toString() {
    return getName();
  }

  @Override
  public void toString(UnitPrinter up) {
    up.local(this);
  }

  @Override
  public List<ValueBox> getUseBoxes() {
    return Collections.emptyList();
  }

  @Override
  public void apply(Switch s) {
    throw new RuntimeException("invalid case switch");
  }

  @Override
  public final int getNumber() {
    return number;
  }

  @Override
  public final void setNumber(int number) {
    this.number = number;
  }

  @Override
  public boolean isStackLocal() {
    return true;
  }
}

    BafLocal baf = new BafLocal(name, type);
    baf.originalLocal = this.originalLocal;
    return baf;
  
<no_super_class>